使用 SQSEvent 对象从另一个函数调用 aws lambda 函数
Invoke an aws lambda function from another function with SQSEvent object
我有一个用 java 编写的 lambda 函数,其句柄方法签名为:
public String handleRequest(SQSEvent sqsEvent, Context context){
//Todo
}
我的 lambda 函数接受 SQS 事件作为请求并处理逻辑。
万一我的 lambda 函数以某种方式失败,我想通过手动提供所需的输入数据来再次触发它。
我的方法是创建一个新的 lambda 函数,它将调用我的主 lambda 函数。我将使用带有必需参数的 APIGateway 触发我的新 lambda。
我们如何创建自己的 SQS 事件对象以将其作为请求主体传递给我的主 lambda? SQSEvent对象需要的参数和结构是什么?
谢谢!
有很多事情需要考虑:
默认情况下,Lambda 会重试几次失败的调用
如果 SQS 是您的事件源,消息将保留在那里,直到您在代码中将其从队列中删除。如果您的功能失败并且没有删除该消息,它将在可见性超时到期后恢复
如果事件一直导致重复失败,将其反馈给函数没有任何好处,会导致死循环
对于这种情况,建议进行 DLQ 设置,这样您就可以隔离持续失败的消息。
现在,您处理的性质可能使您可以安全地重试而不必担心无限循环,在这种情况下,您可以编写一个函数来从 DLQ 中获取消息并将它们反馈回主队列,不需要直接调用 "main" lambda。但话虽如此,我会非常仔细地查看最终出现在 DLQ 中的消息,它们可能表明您的代码中存在一些处理错误。
我有一个用 java 编写的 lambda 函数,其句柄方法签名为:
public String handleRequest(SQSEvent sqsEvent, Context context){
//Todo
}
我的 lambda 函数接受 SQS 事件作为请求并处理逻辑。
万一我的 lambda 函数以某种方式失败,我想通过手动提供所需的输入数据来再次触发它。 我的方法是创建一个新的 lambda 函数,它将调用我的主 lambda 函数。我将使用带有必需参数的 APIGateway 触发我的新 lambda。
我们如何创建自己的 SQS 事件对象以将其作为请求主体传递给我的主 lambda? SQSEvent对象需要的参数和结构是什么?
谢谢!
有很多事情需要考虑:
默认情况下,Lambda 会重试几次失败的调用
如果 SQS 是您的事件源,消息将保留在那里,直到您在代码中将其从队列中删除。如果您的功能失败并且没有删除该消息,它将在可见性超时到期后恢复
如果事件一直导致重复失败,将其反馈给函数没有任何好处,会导致死循环
对于这种情况,建议进行 DLQ 设置,这样您就可以隔离持续失败的消息。
现在,您处理的性质可能使您可以安全地重试而不必担心无限循环,在这种情况下,您可以编写一个函数来从 DLQ 中获取消息并将它们反馈回主队列,不需要直接调用 "main" lambda。但话虽如此,我会非常仔细地查看最终出现在 DLQ 中的消息,它们可能表明您的代码中存在一些处理错误。