Lambda将ErrorMessage添加到SQS消息

问题描述 投票:0回答:1

我有一个基本的SQS队列触发Lambda与重启策略,以便在重试5次后向DLQ发送失败的消息。 I read that Lambda should add message attributes about the error to the message

一切都按预期工作,除非我在DLQ中查看消息,我没有看到任何来自Lambda的ErrorCode,ErrorMessage属性。有人有这个工作吗?

aws-lambda amazon-sqs
1个回答
1
投票

您混淆了两个不同功能的行为。

SQS队列可以具有死信队列。

当消息的ReceiveCount超过队列的maxReceiveCount时,Amazon SQS会将消息移动到死信队列(具有其原始消息ID)。

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html

Lambda函数也可以有一个死信队列。

在丢弃事件之前,将重试两次异步调用的Lambda函数。如果重试失败并且您不确定原因,请使用死信队列(DLQ)将未处理的事件定向到Amazon SQS队列或Amazon SNS主题以分析失败。

...

写入DLQ目标ARN的有效载荷是原始事件有效载荷,不对消息体进行任何修改。消息的属性包含有助于您了解未处理事件的原因的信息

https://docs.aws.amazon.com/lambda/latest/dg/dlq.html

你拥有的是前者 - 带有DLQ的SQS队列,而不是后者 - 带有DLQ的Lambda函数。

在您的配置中,根据重新启动策略,消息将根据描述简单地移动到DLQ,而无需修改。

由于SQS / Lambda集成不使用异步函数调用,因此无法在正在侦听SQS队列的Lambda函数上的DLQ中接收您要查找的消息。

Lambda轮询队列并与包含队列消息的事件同步调用您的函数。

https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

不能以其他方式配置SQS / Lambda集成,并且使用DLQ(而不是SQS队列)配置Lambda函数本身将不起作用。

解决方法是使用CloudWatch logs for your Lambda function查找有问题的消息。在代码中记录SQS MessageId,以便稍后在日志中找到它。

© www.soinside.com 2019 - 2024. All rights reserved.