如何将node.js快递服务器转换为AWS Lambda?

时间:2019-05-02 22:21:01

标签: node.js amazon-web-services express aws-lambda

我有一个功能齐全的node.js Express服务器,其中有许多端点。

我需要将此代码转换为AWS lambda。 我所看到的所有示例中,快递服务器仅公开一个端点,并且将其定义并导出为ex​​ports.handler。

他们在暗示如何执行此操作吗?

1 个答案:

答案 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"
  }
}