在 AWS Lambda 中重试

Retries in 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);
    }
  }...

I'm wondering what the correct thing to do with the context variable is.

在我上面引用的代码之后,我应该context.fail()吗?或者我应该等待 context.succeed()context.fail() 出现在这个重试过程的后续迭代中吗?

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

感谢任何建议。

看这里:

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/