gpt4 book ai didi

node.js - 如何将 node.js express 服务器转换为 AWS lambda?

转载 作者:搜寻专家 更新时间:2023-11-01 00:48:16 25 4
gpt4 key购买 nike

我有一个带有许多端点的完整的 node.js Express 服务器。

我需要将此代码变形为 AWS lambda。我见过的所有示例,express 服务器仅公开一个端点,它被定义并导出为 exports.handler。

他们是否提示如何执行此操作?

最佳答案

如果我对你的理解正确,你有一个 express.js 应用程序,你想在 Lambda 上运行?

Claudia.js 可以帮助您将应用程序部署到 AWS Lambda。

确保在运行 Claudia 命令之前配置了 AWS 访问凭证。

您的代码应稍作修改以支持 AWS Lambda 和通过 Claudia 进行的部署。您需要导出您的应用程序,而不是使用 app.listen 启动服务器。您的 app.js 应类似于以下代码 list :

'use strict'
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello world!'))
module.exports = app

这会破坏本地 Express 服务器,但您可以添加具有以下内容的 app.local.js 文件:

'use strict'
const app = require('./app')
const port = process.env.PORT || 3000
app.listen(port, () =>
console.log(`Server is listening on port ${port}.`)
)

然后使用以下命令运行本地服务器:

node app.local.js

要使您的应用程序与 AWS Lambda 一起正常工作,您需要为您的 Express 应用程序生成 AWS Lambda 包装器。使用 Claudia,您可以通过在终端中运行以下命令来执行此操作:

claudia generate-serverless-express-proxy --express-module app

其中 app 是您的 Express 应用程序入口文件的名称,只是没有 .js 扩展名。

这一步生成了一个名为lambda.js的文件,内容如下:

'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const binaryMimeTypes = [
'application/octet-stream',
'font/eot',
'font/opentype',
'font/otf',
'image/jpeg',
'image/png',
'image/svg+xml'
]
const server = awsServerlessExpress
.createServer(app, null, binaryMimeTypes)
exports.handler = (event, context) =>
awsServerlessExpress.proxy(server, event, context
)

现在您只需使用 claudia create 命令将您的 Express 应用程序(带有 lambda.js 文件)部署到 AWS Lambda 和 API 网关。

claudia create --handler lambda.handler --deploy-proxy-api --region eu-central-1

片刻之后,命令完成并打印出以下响应:

{
"lambda": {
"role": "awesome-serverless-expressjs-app-executor",
"name": "awesome-serverless-expressjs-app",
"region": "eu-central-1"
},
"api": {
"id": "iltfb5bke3",
"url": "https://iltfb5bke3.execute-api.eu-central-1.amazonaws.com/latest"
}
}

关于node.js - 如何将 node.js express 服务器转换为 AWS lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55960979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com