为什么我的Lambda函数超时,即使API网关callback已被调用?

我有一个AWS API网关方法,通过AWS Lambda代理请求。 但是,它在三秒钟后在日志中出现以下错误:

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

因此,我继续检查我的Node 6.10 AWS Lambda函数,看看它为什么会超时。 我在每个函数调用之前和之后添加了日志logging。 令人惊讶的是,它做了所有它应该做的事情:称为API网关callback,然后对数据库运行一个查询。 所有需要0.6s的,据我所知,没有其他的代码需要运行。 尽pipe如此,它似乎继续在三秒钟的其余时间运行,然后超时。 (这是,我想,因为我打开数据库的连接。)

我在callback调用之前和之后放置的日志语句表明,该调用在半秒内执行。 然而,这种回应似乎并没有使它成为API网关,而三秒钟后的错误呢。

这可能是什么原因,我该如何debugging呢?

默认情况下,调用NodeJS Lambda函数中的callback()函数不会结束函数的执行。 它将继续运行,直到事件循环为空。 当您继续打开数据库连接时,会发生NodeJS Lambda函数在callback之后继续运行的常见问题。 您还没有发布任何代码,所以我不能给出具体的build议,但是您需要确定是否要在代码中打开数据库连接或类似的东西。

或者,您可以通过在context对象上设置callbackWaitsForEmptyEventLoop = false来更改行为,以便一旦callback函数就结束执行。

你需要增加你的lambda函数超时。 默认限制设置为3.0秒的时间,而您的代码需要更多时间来执行。