在 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/
我正在编写一个与端点通信的 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/