Lambda 将 ErrorMessage 添加到 SQS 消息

use*_*790 3 amazon-sqs aws-lambda

我有一个基本的 SQS 队列,触发 Lambda 并使用重新驱动策略,在 5 次重试后将失败的消息发送到 DLQ。 我读到 Lambda 应该将有关错误的消息属性添加到消息中

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

Mic*_*bot 7

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

\n\n

SQS 队列可以有死信队列。

\n\n
\n

ReceiveCount一条消息的长度超过maxReceiveCount队列的 时,Amazon SQS 会将消息移动到死信队列(及其原始消息 ID)。

\n\n

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

\n
\n\n

Lambda 函数还可以有死信队列。

\n\n
\n

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

\n\n

...

\n\n

写入 DLQ 目标 ARN 的负载是原始事件负载,未对消息正文进行任何修改。消息的属性包含可帮助您了解为何未处理事件\xe2\x80\x99 的信息

\n\n

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

\n
\n\n

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

\n\n

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

\n\n

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

\n\n
\n

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

\n\n

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

\n
\n\n

否则无法配置 SQS/Lambda 集成,并且使用 DLQ(而不是 SQS 队列)配置 Lambda 函数本身将不起作用。

\n\n

解决方法是使用Lambda 函数的 CloudWatch 日志来查找有问题的消息。将 SQS MessageId 记录在代码中,以便稍后可以在日志中找到它。

\n