我正在尝试设置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。
我想念什么?
谢谢!
答案 0 :(得分:0)
根据您的最新评论:
通过将邮递员的HTTP请求直接发布到Lambda的Api网关进行测试
这是您面临问题的原因。
解释一下,当您拥有一个Lambda的API网关代理时,API网关会处理Lambda发回的错误情况(而不是具有DLQ配置的Lambda服务本身),并且这些错误不会最终出现在DLQ中。为了实现DLQ,您需要进行不同的设计,可能需要进行诸如调用SNS-> Lambda的调用之类的设计,然后在失败时Lambda会将这些消息发送到DLQ。
如果您没有代理集成,您也许也可以解决此问题,但是我还没有亲自测试过,而且我不确定这是否行得通。