AWS Lambda

时间:2015-05-19 14:37:57

标签: node.js amazon-web-services 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);
    }
  }...
  

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

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

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

感谢您的任何建议。

1 个答案:

答案 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/