问题描述
我试图在aws-lambda-fastify
的帮助下使可运行于AWS Lambda的fastify上的Node.JS API正常工作。
我可以在路由之内做一些事情,例如连接到数据库等。但是,当我到达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',}]
当我通过API网关访问该端点时,出现502错误。所有其他路线都有相同的问题。
我使用无服务器部署。具有通配符的一个路由指向一个lambda处理程序,例如:
events:
- http:
path: /{any+}
method: ANY
cors: true
我还有一个资源文件-api-gateway-errors.yml
,我什至不需要。
相同的代码(减去aws lambda代理)可以在Docker和物理/虚拟主机中正常运行。
解决方法
编写lambda的简单方法未包含在代理文档中。基本上,只需将其写为:
exports.handler = (event,context,callback) => {
context.callbackWaitsForEmptyEventLoop = false;
proxy(event,callback);
}
这样,回调将不会等待,并且lambda不会超时。然后,API网关将不会发送502代码。