我的lamba函数以应有的方式工作,但是有时会出错。但是通过手动重新运行它可以正常工作。所以我想在发生错误时自动重试。
现在,我是Serverless的新手,所以我想问一下如何在失败/错误时调用重试。我尝试搜索,但未成功。如果有人可以指导我,我会很高兴。
谢谢:)
答案 0 :(得分:0)
我认为也许您应该查看lambda的最大执行时间。 默认情况下为3秒,也许有时您的功能较长,然后失败。
This document解释了lambda重试。
答案 1 :(得分:0)
在继续之前,您需要确保您了解在哪里生成错误。
如果您的lambda函数本身在运行时建立了某种套接字连接,并且lambda函数在执行过程中出现“套接字挂起”异常,则它可能会返回调用应用程序的5xx状态代码。您可以使用任何一种常见的重试技术让lambda函数重试。
如果正在调用的应用程序遇到Socket Hang Up异常,则问题实际上出在应用程序与AWS Lambda之间的通信中,并且在Lambda函数内部 添加重试将毫无用处。您需要将重试添加到调用的应用程序中。
这是一个可能看起来像的例子:
function getUsers() {
let retries = 0;
let maxAttempts = 3;
function attempt() {
return lambda.invoke({
ClientContext: "MyApp",
FunctionName: "GetUsers",
Payload: JSON.stringify({ Active: true })
}).promise().catch(error => {
// We don't want to retry on EVERY error, because the error might
// be an application error or an AWS credentials error. So here we
// check specifically for the types of errors to retry. AWS will
// helpfully set the "retryable" property if it's a network issue
// that they caught.
//
// A socket connection might not be an AWS-generated error, so you
// need to check it directly... this is just an example you can
// extend:
if (error.retryable || error.code === 'ECONNRESET') {
retries++;
if (retries < maxAttempts) {
return attempt();
}
}
throw error;
});
}
return attempt();
}