配置死信队列重新驱动 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置死信队列重新驱动

您可以配置死信队列重新驱动,将标准未使用的消息从现有死信队列中移回其源队列。有关死信队列重新驱动的更多信息,请参阅将消息移出死信队列

为现有标准队列配置死信队列重新驱动 (API)

您可以使用以下 API 操作配置死信队列重新驱动。

API 操作 描述

StartMessageMoveTask

启动异步任务,将消息从指定的源队列移动到指定的目标队列。

ListMessageMoveTasks

获取特定源队列下的最新消息移动任务(最多 10 个)。

CancelMessageMoveTask

取消指定的消息移动任务。只有在当前状态为“正在运行”时,才能取消消息移动。

为现有标准队列配置死信队列重新驱动(控制台)

  1. 通过以下网址打开 Amazon SQS 控制台:https://console.aws.amazon.com/sqs/

  2. 在导航窗格中,选择 Queues (队列)。

  3. 选择已配置为死信队列的队列名称。

  4. 选择开始 DLQ 重新驱动

  5. 重新驱动配置下,对于消息目标,执行以下任一操作:

    • 要将消息重新驱动到其源队列,请选择重新驱动到源队列

    • 要将消息重新驱动到其他队列,请选择驱动到自定义目标。然后,输入现有目标队列的 Amazon 资源名称 (ARN)。

      注意

      自定义目标队列必须与死信队列的类型匹配。例如,如果死信队列是 FIFO 队列,则自定义目标队列也必须是 FIFO 队列。

  6. 速度控制设置下,选择以下一个选项:

    • 系统优化 - 以每秒最大消息数重新驱动死信队列消息。

    • 自定义最大速度 - 使用自定义每秒最大消息速率重新驱动死信队列消息。允许的最大速率为每秒 500 条消息。

      • 建议从“自定义最大速度”的较小值开始,并验证源队列不会被消息淹没。在这里,逐渐增加“自定义最大速度”值,继续监控源队列的状态。

  7. 配置完死信队列重新驱动后,选择重新驱动消息

    重要

    Amazon SQS 不支持在将消息从死信队列中重新驱动时筛选和修改消息。

    死信队列重新驱动任务最多可以运行 36 小时。Amazon SQS 支持每个账户最多 100 个活跃的重新驱动任务。

    重新驱动任务会重置保留期。新的 messageIDenqueueTime 会被分配给重新驱动消息。

  8. 如果要取消消息重新驱动任务,请在队列的详细信息页面上,选择取消 DLQ 重新驱动。取消正在进行的消息重新驱动时,任何已经成功移至其移动目标队列的消息都将保留在目标队列中。

为死信队列重新驱动配置队列权限

您可以通过向策略添加权限来授予用户访问特定死信队列操作的权限。死信队列重新驱动所需的最低权限如下:

最小权限 必需的 API 方法
开始重新驱动消息
  • 添加死信队列的 sqs:StartMessageMoveTasksqs:ReceiveMessagesqs:DeleteMessagesqs:GetQueueAttributes。如果死信队列或原始源队列经过加密(也称为 SSE 队列),则还需要使用已用于加密消息的任何 KMS 密钥的 kms:Decrypt

  • 添加目标队列的 sqs:SendMessage。如果目标队列已加密,则还需要 kms:GenerateDataKeykms:Decrypt

取消进行中的消息重新驱动
  • 添加死信队列的 sqs:CancelMessageMoveTasksqs:ReceiveMessagesqs:DeleteMessagesqs:GetQueueAttributes。如果死信队列已加密(也称为 SSE 队列),则还需要 kms:Decrypt

显示消息移动状态
  • 添加死信队列的 sqs:ListMessageMoveTaskssqs:GetQueueAttributes

为加密队列对(带有死信队列的源队列)配置权限

使用以下步骤配置死信队列重新驱动的最低权限:

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择策略

  3. 创建具有以下权限的策略,并将其附加到您的登录 IAM 用户角色

    • sqs:StartMessageMoveTask

    • sqs:CancelMessageMoveTask

    • sqs:ListMessageMoveTasks

    • sqs:ListDeadLetterSourceQueues

    • sqs:ReceiveMessage

    • sqs:DeleteMessage

    • sqs:GetQueueAttributes

    • 死信队列的 Resource ARN(例如,“arn:aws:sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>”)。

    • sqs:SendMessage

    • 目标队列的 Resource ARN(例如,“arn: aws: sqs: < _region>: < _accountid>: < DestQueue _name>”)。DestQueue DestQueue

    • kms:Decrypt - 允许解密操作。

    • kms:GenerateDataKey

    • 已用于加密原始源队列消息的 KMS 加密密钥的 Resource ARN(例如,“arn:aws:kms:<region>:<accountId>:key/<keyId_used to encrypt the message body>”)。

    • 用于重新驱动目标队列的 KMS 加密密钥的资源 ARN(例如,“arn:aws:kms:<region>:<accountId>:key/<keyId_used for the destination queue>”)。

    访问策略应类似下文:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:StartMessageMoveTask", "sqs:CancelMessageMoveTask", "sqs:ListMessageMoveTasks", "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes" ], "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>" }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:<region>:<accountId>:key/<keyId>" } ] }
使用非加密队列对(带有死信队列的源队列)配置权限

使用以下步骤为未加密的标准死信队列配置最低权限:所需的最低权限包括:从死信队列中接收删除获取属性,以及向源队列发送属性。

  1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择策略

  3. 创建具有以下权限的策略,并将其附加到您的登录 IAM 用户角色

    • sqs:StartMessageMoveTask

    • sqs:CancelMessageMoveTask

    • sqs:ListMessageMoveTasks

    • sqs:ReceiveMessage

    • sqs:DeleteMessage

    • sqs:GetQueueAttributes

    • 死信队列的 Resource ARN(例如,“arn:aws:sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>”)。

    • sqs:SendMessage

    • 目标队列的 Resource ARN(例如,“arn: aws: sqs: < _region>: < _accountid>: < DestQueue _name>”)。DestQueue DestQueue

    访问策略应类似下文:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:StartMessageMoveTask", "sqs:CancelMessageMoveTask", "sqs:ListMessageMoveTasks", "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes" ], "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>" } ] }