【问题标题】:how to turn an node.js express server as an AWS lambda?如何将 node.js express 服务器转换为 AWS lambda?
【发布时间】:2019-09-21 11:30:01
【问题描述】:

我有一个成熟的 node.js express 服务器,有很多端点。

我需要将此代码转换为 AWS lambda。 我见过的所有例子,快递服务器只暴露一个端点,它被定义并导出为ex​​ports.handler。

他们是否暗示了如何做到这一点?

【问题讨论】:

  • 需要拆分成多个入口点。

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


【解决方案1】:

如果我对您的理解正确,您有一个 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"
  }
}

【讨论】:

  • 我假设这样,我可以根据需要添加任意数量的端点,并且仍然可以正常工作。对吗?
  • 你知道没有第三方工具的方法吗?
  • 你必须为 Lambda 重写你的 express.js 文件 - dev.to/brightdevs/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2016-04-15
  • 2018-07-17
  • 2017-10-08
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多