10

我正在编写一个与端点通信的 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 执行中解决它。

感谢您的任何建议。

4

1 回答 1

16

看看这里:

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/

于 2015-07-09T07:46:13.490 回答