AWS事件桥Lambda调用

21

我已将一个 Lambda 函数配置为 EventBridge 规则目标,并在 EventBridge 规则上配置了死信队列以捕获异常。 现在,如果 Lambda 函数失败,EventBridge 不会将该故障识别为错误。 由于 EventBridge 对 Lambda 的调用是异步的,因此只要到达 Lambda 就足以让 EventBridge 将事件视为成功,但是这样我就无法在 Lambda 失败后跟踪和重试事件。 是否有一种方法可以使 EventBridge 到 Lambda 的请求变成同步的,或者另一种方法来能够在 Lambda 调用失败后重试事件?


你解决了吗?我遇到了完全相同的问题。 - blahblah
3个回答

5

EventBridge保证将事件传递给Lambda函数,但不知道之后会发生什么。这是lambda调用与lambda执行的区别。Eventbridge已经成功将消息传递给lambda服务,因此这是一个成功的调用。

对于Lambda,EventBridge调用invokeAsync API。因此,如果该API发送成功响应,EventBridge将假定传递成功。从异步到同步的任何Lambda内部故障都不可见于EventBridge。我们应该配置重试并在Lambda函数中创建DLQs,以确保事件在Lambda函数无法执行时不会丢失。实际上,我们可以配置由EventBridge使用的相同DLQ也被Lambda使用,以便所有可能的故障都落在一个地方。


4

一个选项是将SQS作为规则目标,并使用SQS事件触发Lambda。当出现故障时,Lambda不会标记事件完成,以保留事件在SQS中。在配置的时间段后(SQS配置),重试将自动发生。此外,您还可以在保留时间过期后配置死信队列。


0
AWS 为此专门提供了文档页面,其中针对异步调用的说明如下:

Lambda 会重试函数错误两次。如果函数没有足够的容量来处理所有传入请求,则事件可能会在队列中等待数小时或数天才能发送到函数。您可以在函数上配置死信队列以捕获未成功处理的事件。有关更多信息,请参见异步调用。

这意味着只要 Lambda 函数处理程序函数不返回错误,AWS Lambda 服务就应该重试运行 Lambda。

因此,您可能不需要使用 EventBridge 来重试事件。

请参见: AWS Lambda 中的错误处理和自动重试


2
你说得没错,但是事件桥尝试重试24小时,而Lambda只重试2次。如果Lambda触发的服务在这两次都不可用,它将不再重试。 - marcob88
3
你最终弄清楚了吗?@marcob88 - Garret Harp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接