首页 > 解决方案 > 为什么我的失败事件没有发送到 AWS Dead Letter Queue DLQ?

问题描述

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

这是我所做的:

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

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

我错过了什么?

标签: amazon-web-servicesaws-lambdaamazon-sqs

解决方案


根据您的最新评论:

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

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

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

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


推荐阅读