我无法将 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 死信队列重新驱动功能