我有一个 AWS Lambda 函数,它订阅 DynamoDB 流并配置了SQS 死信队列 (DLQ) https://docs.aws.amazon.com/lambda/latest/dg/dlq.html。我可以看到管理控制台中配置了正确的队列。我还小心翼翼地授予我的功能权限sqs:SendMessage
在我的 DLQ 上。
订阅可以工作,但仍然会因调用错误而“挂起”,就像未配置 DLQ 一样。即,如果有一条消息导致未处理的异常,则该函数将继续重试该消息,直到将其从流中删除。我可以看到调用错误的数量有所增加,并且该函数的 Cloudwatch 仪表板中没有显示 DLQ 错误。 SQS 队列仍为空。
我想要的是失败的消息被转发到我的 DLQ,并且订阅继续到下一条消息。有任何想法吗?
Edit
正如 Jonathan Seed 在下面所说,DLQ 目前不适用于基于流的订阅。 AWS Support 确认他们正在努力实现这一点。
我相信这是因为 DynamoDB 流是基于流事件源。拉姆达文档 https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html指出在处理基于流的事件源时“如果 Lambda 函数失败,AWS Lambda 会尝试处理出错的一批记录,直到数据过期”
根据我的理解,lambda 函数将重试,直到事件成功处理或过期并从流中消失,该事件永远不会被 lambda 函数“丢弃”,因为它们位于非基于流的事件源中。
如果您希望丢弃某些事件,将事件手动发布到队列/主题并成功返回,您可能必须实现自己的故障处理作为主 lambda 函数的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)