Lambda在调用回调后定时

时间:2016-06-13 13:37:33

标签: node.js amazon-web-services aws-lambda

我在Javascript的4.3运行时使用了两个lambda函数。我运行第一个,它同步调用第二个(同步是意图)。问题是第二次超时(60秒)但实际上仅在22秒后达到成功结束。

这是两个Lambda函数之间的流程:

flow

Lamda功能 A 我不再获取CloudWatch日志,但真正的问题(我认为)是功能 B ,它会无缘无故地超时。

以下是一些CloudWatch日志来说明这一点:

cloudwatch logs

最后功能B中的代码 - 包括上面的“成功”日志语句,见下图:

code example

最初我只有callback(null, 'successful ...')行而不是nodejs 0.10.x的方式,你在上下文中调用了succeed()。绝望中我添加了两个但结果是一样的。

任何人都知道发生了什么事?我可以通过哪种方式调试它?

如果A和B之间的调用逻辑在B开始的状态中产生差异,这里是调用:

invocation of Function b

2 个答案:

答案 0 :(得分:27)

正如Michael - sqlbot所说;问题似乎是只要存在开放连接,由于非空事件循环,调用回调不会终止该函数。打开Redis连接时遇到同样的问题;所述解决方案是context.callbackWaitsForEmptyEventLoop = false;

答案 1 :(得分:0)

至少对于redis连接而言,它有助于退出与redis的连接,以使Lambda正确完成工作。