使用AWS Lambda进行固定

问题描述

我试图在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代码。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...