我有一个功能齐全的node.js Express服务器,其中有许多端点。
我需要将此代码转换为AWS lambda。 我所看到的所有示例中,快递服务器仅公开一个端点,并且将其定义并导出为exports.handler。
他们在暗示如何执行此操作吗?
答案 0 :(得分:1)
如果我对您的理解正确,那么您有想要在Lambda上运行的express.js应用程序吗?
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"
}
}