我正在编写与端点通信的Lambda函数。如果发生500错误,我希望该功能可以多次重试。
我希望在我的exports.handler
函数中执行类似的操作:
exports.handler = function(event, context){ ...
if (!error && response.statusCode >= 500 && response.statusCode < 600) {
if (event.retries <= 5) {
setTimeout(exports.handler(event, context), 60000);
}
}...
我想知道
context
变量的正确做法是什么。
在我上面引用的代码之后,我应该context.fail()
吗?或者我应该等待context.succeed()
或context.fail()
在此重试过程的后续迭代中发生?
我很难确定每个context
是否需要在其出现的原始exports.handler
级别解析,或者context
是否可以解决和任何级别,并将解决整个Lambda执行。
感谢您的任何建议。
答案 0 :(得分:9)
看看这里:
http://aws.amazon.com/lambda/faqs/
在Lambda放弃之前,该功能最多可运行3次。
如果你调用&#34; context.succeed&#34;,lambda将不会重试(它假设你的功能成功)。
呼叫&#34; context.fail&#34;将导致您的功能被重试。
有一点需要注意:你必须小心打电话给&#34; context.succeed&#34;或&#34; context.fail&#34;在合适的时间。如果您使用尚未处理的待处理回调调用,则您的Lambda函数将提前暂停,并且您的某些代码可能会运行。因此,调用context.succeed或context.fail的最佳位置是在回调中,在这一点上你知道不需要进行其他处理。
同样值得查看这篇文章:
https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/