如何解决 Amazon SQS DLQ 重新驱动问题?

1 分钟阅读
0

我无法将 Amazon Simple Queue Service(Amazon SQS)消息从死信队列(DLQ)重新驱动到源队列。

解决方法

“开始 DLQ 重新驱动”图标显示为灰色

如果您未将 Amazon SQS 队列配置为 DLQ,则无法在 Amazon SQS 控制台中使用开始 DLQ 重新驱动图标。

有关更多信息,请参阅配置死信队列重新驱动

“Failed: CouldNotDetermineMessageSource”错误

如果 DLQ 有以下一条消息,那么当您尝试向源队列开始 DLQ 重新驱动时,可能会收到此错误:

  • 一条通过 SendMessage API 调用向 DLQ 发送的 Amazon SQS 消息。
  • 一条来自 Amazon Simple Notification Service(Amazon SNS)主题或配置了 DLQ 的 AWS Lambda 函数的消息。

要解决此错误,请在开始重新驱动时选择重新驱动到自定义目标。然后,输入 Amazon SQS 队列 ARN,将所有消息从 DLQ 移至目标队列。

“Failed: AWS.SimpleQueueService.NonExistentQueue”错误

当因为 Amazon SQS 源队列不存在或被删除而导致 DLQ 重新驱动失败时,就会出现此错误。

“Failed to create redrive task.Error code: AccessDenied - Queue Permissions to Redrive”错误

当因为 AWS Identity and Access Management(AWS IAM)实体没有所需权限而导致 DLQ 重新驱动失败时,就会出现此错误。提出 DLQ 重新驱动请求需要以下 API 权限:

对于服务器端加密(SSE)队列,需要以下 AWS Key Management Service(AWS KMS)密钥策略权限:

{
    "Version": "2012-10-17",
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "sqs:ReceiveMessage",
                "sqs:DeleteMessage",
                "sqs:GetQueueAttributes",
                "sqs:StartMessageMoveTask",
                "sqs:ListMessageMoveTasks",
                "sqs:CancelMessageMoveTask"
            ],
            "Resource": "arn:aws:sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>"
        },
        {
            "Effect": "Allow",
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:<DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>"
        }
    ]
}

有关更多信息,请参阅如何解决 Amazon SQS API 调用的“AccessDenied”或“AccessDeniedException”错误?

**重要说明:**如果您在 2023 年 8 月 31 日之前使用 Amazon SQS 控制台配置 DLQ 重新驱动的队列权限,请确保更新权限

相关信息

访问 Amazon SQS 队列需要什么权限?

为什么我的 Lambda 函数重试有效的 Amazon SQS 消息并将它们放入我的死信队列中?

Amazon SQS 宣布支持 FIFO 死信队列重新驱动功能

AWS 官方
AWS 官方已更新 10 个月前