为什么即使已经调用了API网关回调,我的Lambda函数也会超时?

Vin*_*ent 2 amazon-web-services node.js aws-lambda aws-api-gateway

我有一个AWS API Gateway方法,可以将请求代理到AWS Lambda.但是,日志中的以下内容在三秒后出现错误:

转换前的端点响应体:{"errorMessage":"2017-09-05T16:30:49.987Z 922186c0-9257-11e7-9db3-51921d5597a2任务在3.00秒后超时"}

因此,我继续检查我的Node 6.10 AWS Lambda函数,看看它为何超时.我在每个函数调用之前和之后都添加了日志语句.令人惊讶的是,它完成了它应该做的所有事情:称为API网关回调,然后在数据库之后运行查询.所有需要0.6秒,据我所知,没有其他代码可以运行.然而,它似乎继续运行三秒钟的剩余时间,然后超时.(我想,这是因为我要打开与数据库的连接.)

我在callback调用之前和之后放置的日志语句表明该调用在不到半秒的时间内执行.然而,该响应似乎没有进入API网关,而三秒后的错误确实如此.

可能是什么原因,我该如何调试呢?

Mar*_*k B 12

默认情况下,callback()在NodeJS Lambda函数中调用函数不会结束函数执行.它将继续运行,直到事件循环为空.callback当您继续打开数据库连接时,会发生调用NodeJS Lambda函数后继续运行的常见问题.您尚未发布任何代码,因此我无法提供具体建议,但您需要确定是否要在代码中打开数据库连接或类似的东西.

另外,您也可以改变,使得执行尽快结束行为callback功能通过设置所谓callbackWaitsForEmptyEventLoop = false的上context对象.