使用 AWS Lambda 进行 Fastify

Fastify with AWS Lambda

我正在努力 Node.JS API 在 aws-lambda-fastify.

的帮助下作为 AWS Lambda 在 fastify 运行 上完成

我已经到了可以在路由内做事的地步,比如连接到我的数据库等。但是,当我到达 res.send() 时,奇怪的事情发生了。

我的 lambda 只是 fastify lambda 包的基本示例。

const awsLambdaFastify = require('aws-lambda-fastify');
const app = require('./index');
const proxy = awsLambdaFastify(app);
exports.handler = proxy;

为了调试正在发生的事情,我在我的一条路线中添加了一些控制台语句,例如:

console.log('res.send():', res.send);
console.log('results:', filteredResults);
res.send(filteredResults);

在 CloudWatch 中,我看到:

INFO    res.send(): [Function]
INFO    results: [
{
  id: 8,
  address: 'Innsbruck Strasse',
  city: 'Park City',
  state: 'UT',
  zip: '84098',
  country: 'US',
},
...
{
  id: 9,
  address: '1000 5th Ave',
  city: 'New York',
  state: 'NY',
  zip: '10028',
  country: 'US',
}]

当我通过 API 网关访问该端点时,出现 502 错误。所有其他路线都有同样的问题。

我使用无服务器部署。有一个带有通配符的路由指向一个 lambda 处理程序,例如:

events:
  - http: 
      path: /{any+}
      method: ANY
      cors: true

我还有一个资源文件 - api-gateway-errors.yml,我可能根本不需要它。

相同的代码 [减去 aws lambda 代理] 在 Docker 和 physical/virtual 主机中工作正常 运行。

编写 lambda 的简单方法未包含在代理文档中。基本上,只需将其写为:

exports.handler = (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  proxy(event, context, callback);
}

这样,回调就不会等待,lambda 也不会 time-out。 API 网关随后不会发送 502 代码。