为什么我的失败事件没有发送到 AWS 死信队列 DLQ?

Why my failed event is not sent to AWS Dead Letter Queue DLQ?

我正在尝试设置 DLQ 以从 Lambda 函数捕获失败事件。

这是我所做的:

  1. 在 SQS 中创建了死信队列 (QueueX),
  2. 将我的 lambda 函数 DLQ 资源设置为 'Amazon SQS'
  3. 将 SQS 队列设置为 QueueX
  4. 创建了一个策略,将所有权限 (sqs:*) 授予所有资源 (*); VisibilityTimeout=5 分钟,MessageRetentionPeriod=3 天
  5. 将策略附加到执行 lambda 函数的角色

现在,通过“队列操作”,我可以发送消息并看到它显示在 "Messages Available" 中。但是,如果我向 lambda 函数发送一个 http 请求——我故意创建了一个格式错误的 JSON,它的异常没有被捕获——我在 CloudWatch 中看到了错误消息,但没有发送到 QueueX。

我错过了什么?

根据您的最新评论:

testing by posting a HTTP request from Postman directly to Api gateway for the lambda

这就是您遇到的问题的原因。

解释一下,当您有 Lambda 的 API 网关代理时,API 网关会处理 Lambda 发回的错误案例(而不是 Lambda 服务本身,后者具有 DLQ 配置) ,并且错误不会在 DLQ 中结束。为了实施 DLQ,您需要不同的设计,可能类似于调用 SNS -> Lambda,然后在失败时 Lambda 会将这些消息发送到 DLQ。

如果您没有代理集成,您也可以解决这个问题,但我没有亲自测试过,我不确定这是否有效。