使用 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对象需要的参数和结构是什么?

谢谢!

有很多事情需要考虑:

  1. 默认情况下,Lambda 会重试几次失败的调用

  2. 如果 SQS 是您的事件源,消息将保留在那里,直到您在代码中将其从队列中删除。如果您的功能失败并且没有删除该消息,它将在可见性超时到期后恢复

  3. 如果事件一直导致重复失败,将其反馈给函数没有任何好处,会导致死循环

对于这种情况,建议进行 DLQ 设置,这样您就可以隔离持续失败的消息。

现在,您处理的性质可能使您可以安全地重试而不必担心无限循环,在这种情况下,您可以编写一个函数来从 DLQ 中获取消息并将它们反馈回主队列,不需要直接调用 "main" lambda。但话虽如此,我会非常仔细地查看最终出现在 DLQ 中的消息,它们可能表明您的代码中存在一些处理错误。