AWS中的重试次数Lambda

问题描述:

我在写一个与端点通信的Lambda函数。如果发生500错误,我希望函数重试几次。AWS中的重试次数Lambda

我希望做这样的事情我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()发生在此重试过程的后续迭代中?

我只是随便如果在原来的exports.handler的层面解决每个context需求,它出现,或者很难决定是否context可以解决任何水平,这将解决它整个Lambda执行。

感谢您的任何建议。

到这里看看:

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

功能将运行到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/

+0

感谢您的输入。一段时间以来,我们一直在使用上面描述的(我们自己的重试),但是我们没有对它进行测试以确保它的行为符合预期。如果我不得不依靠cloudwatch日志,那么看看事情是否正常工作会有点难。它*似乎*表现正确... – rschwieb

+0

重试只取决于context.failed或context.succeed,因为我有情境,我是context.succeed回调但我的lambda仍然重试 – Marko

+0

如果发生任何错误,Lambda可能会重试除了调用context.fail。例如,如果你的函数超时,或者抛出一个异常。另外,在主处理程序中是否有任何代码路径导致它在未调用完成或成功的情况下返回,或者是否存在不保证其中一个的回调序列? –