我有一个基本的SQS队列,它使用重新驱动策略触发Lambda,以便在5次重试后将失败的消息发送到DLQ。 I read that Lambda should add message attributes about the error to the message
一切正常,但当我查看DLQ中的消息时,我看不到Lambda的任何ErrorCode,ErrorMessage属性。有人有这个工作吗?
答案 0 :(得分:1)
您正在混淆两个不同功能的行为。
SQS队列可以有一个死信队列。
当消息的
ReceiveCount
超过队列的maxReceiveCount
时,Amazon SQS会将消息移动到死信队列(具有其原始消息ID)。
Lambda函数也可以具有死信队列。
异步调用的任何Lambda函数都会被重试两次,然后将其丢弃。如果重试失败,但您不确定原因,请使用死信队列(DLQ)将未处理的事件定向到Amazon SQS队列或Amazon SNS主题以分析失败。
...
写入DLQ目标ARN的有效负载是原始事件有效负载,未对消息主体进行任何修改。邮件的属性包含有助于您了解未处理事件的原因的信息
您拥有的是前者-一个带有DLQ的SQS队列,而不是后者-一个带有DLQ的Lambda函数。
在您的配置中,根据重新驱动策略,仅按照说明将邮件移至DLQ,无需进行修改。
由于正在侦听SQS队列的Lambda函数上的DLQ中无法接收您正在寻找的消息,因为SQS / Lambda集成不使用异步函数调用。
Lambda轮询队列并同步调用一个包含队列消息的事件。
否则将无法配置SQS / Lambda集成,并且使用DLQ(而不是SQS队列)配置Lambda函数本身将无效。
解决方法是使用CloudWatch logs for your Lambda function查找有问题的消息。在代码中记录SQS MessageId,以便稍后在日志中找到它。