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

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

了解如何在 Amazon SQS 中配置死信队列重新驱动

您可以使用死信队列重新驱动将未使用的消息移出现有的死信队列。默认情况下,死信队列重新驱动会将消息从死信队列移动到源队列。但是,您还可以将任何其他队列配置为重新驱动目的地,前提是两个队列属于同一类型。例如,如果死信队列是 FIFO 队列,则重新驱动目的地队列也必须是 FIFO 队列。此外,您可以配置重新驱动速度以设置 Amazon SQS 移动消息的速率。

注意

当消息从 FIFO 队列移动到 FIFO DLQ 时,原始消息的重复数据删除 ID 将替换为原始消息的 ID。这是为了确保 DLQ 重复数据删除不会阻止存储恰好共享重复数据删除 ID 的两条独立消息。

死信队列按接收顺序重新驱动消息,从最旧的消息开始。但是,目标队列会根据接收消息的顺序摄取重新驱动的消息以及来自其他创建者的新消息。例如,如果生产者在同时从死信队列接收重新驱动的消息时向源 FIFO 队列发送消息,则重新驱动的消息将与来自生产者的新消息交织在一起。

注意

重新驱动任务会重置保留期。所有重新驱动的消息都被视为带有新消息的新消息,messageIDenqueueTime分配给重新驱动的消息。

使用 Amazon SQS API 为现有标准队列配置死信队列重新驱动

您可以使用SendMessageBatch、和 DeleteMessageBatch API 操作配置死信队列重ReceiveMessage启:

API 操作 描述

StartMessageMoveTask

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

ListMessageMoveTasks

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

CancelMessageMoveTask

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

使用 Amazon SQS 控制台为现有标准队列配置死信队列重新驱动

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

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

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

  4. 选择开始 DLQ 重新驱动

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

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

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

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

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

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

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

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

    重要

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

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

  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", "sqs:ListDeadLetterSourceQueues" ], "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: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

    访问策略应类似下文:

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