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



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

这是我所做的:

  1. 在 SQS 中创建了一个 DeadLetterQueue (QueueX(,
  2. 将我的 lambda 函数 DLQ 资源设置为"Amazon SQS">
  3. 将 SQS 队列设置为队列 X
  4. 创建了一个策略,用于向所有资源 (*( 授予所有权限 (sqs:*(;可见性超时 = 5 分钟,消息保留期 = 3 天
  5. 将策略附加到执行 lambda 函数
  6. 的角色

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

我错过了什么?

根据你最新的评论:

通过将来自 Postman 的 HTTP 请求直接发布到 lambda 的 API 网关进行测试

这就是您面临的问题的原因。

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

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

最新更新