【发布时间】:2019-09-21 11:30:01
【问题描述】:
我有一个成熟的 node.js express 服务器,有很多端点。
我需要将此代码转换为 AWS lambda。 我见过的所有例子,快递服务器只暴露一个端点,它被定义并导出为exports.handler。
他们是否暗示了如何做到这一点?
【问题讨论】:
-
需要拆分成多个入口点。
标签: node.js amazon-web-services express aws-lambda
我有一个成熟的 node.js express 服务器,有很多端点。
我需要将此代码转换为 AWS lambda。 我见过的所有例子,快递服务器只暴露一个端点,它被定义并导出为exports.handler。
他们是否暗示了如何做到这一点?
【问题讨论】:
标签: node.js amazon-web-services express aws-lambda
如果我对您的理解正确,您有一个 express.js 应用程序,您想在 Lambda 上运行?
Claudia.js 可以帮助您将应用部署到 AWS Lambda。
确保在运行 Claudia 命令之前配置了 AWS 访问凭证。
您的代码应稍作修改以支持 AWS Lambda 和通过 Claudia 进行部署。您需要导出您的应用程序,而不是使用 app.listen 启动服务器。您的 app.js 应类似于以下代码清单:
'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 Gateway。
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"
}
}
【讨论】: