AWS Lambda中的重试次数

rsc*_*ieb 6 amazon-web-services node.js aws-lambda

我正在写一个与端点通信的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);
    }
  }...
Run Code Online (Sandbox Code Playgroud)

我想知道context变量的正确做法是什么.

在我上面引用的代码之后,我应该context.fail()吗?或者我应该等待context.succeed()还是context.fail()在此重试过程的后续迭代中发生?

我只是很难决定每个是否context需要在exports.handler它出现的原始级别上解决,或者是否context可以解析和任何级别,并且将解决整个Lambda执行的问题.

谢谢你的建议.

Sco*_*ski 11

看看这里:

http://aws.amazon.com/lambda/faqs/

在Lambda放弃之前,该功能最多可运行3次.

如果你调用"context.succeed",lambda将不会重试(它假设你的函数成功).

调用"context.fail"将导致重试您的函数.

有一点需要注意:你必须小心在正确的时间调用"context.succeed"或"context.fail".如果您使用尚未处理的节点的待处理回调调用,则您的Lambda函数将提前暂停,并且您的某些代码可能会运行.因此,调用context.succeed或context.fail的最佳位置是在回调中,您知道不需要进行其他处理.

这篇文章也值得一读:

https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/

  • 重试仅取决于 context.failed 或 context.succeed,因为我的情况是我在回调中是 context.succeed 但我的 lambda 仍然重试 (2认同)
  • +1表示禁用重试功能.这件事太破碎了.为什么它应该假设我的任务是可重试的?如果我没有错误回调,我如何使用CloudWatch监控错误计数? (2认同)