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

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

了解如何在 Amazon 中配置死信队列重启 SQS

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

注意

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

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

注意

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

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

您可以使用StartMessageMoveTaskListMessageMoveTasks和操作配置死信队列重新驱动:CancelMessageMoveTaskAPI

API行动 描述

StartMessageMoveTask

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

ListMessageMoveTasks

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

CancelMessageMoveTask

取消指定的消息移动任务。只有当当前状态为时,才能取消邮件移动RUNNING。

使用 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:Decrypt获得用于加密消息的任何KMS密钥的权限。

  • 添加目标队列的 sqs:SendMessage。如果目标队列已加密,则kms:GenerateDataKey也是必需的。

取消进行中的消息重新驱动
  • 添加死信队列的 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

    • 死信队列中的 ResourceARN(例如,“arn: aws: sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>").

    • sqs:SendMessage

    • 目标队ResourceARN列的(例如,“arn: aws: sqs:<DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>").

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

    • kms:GenerateDataKey

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

    • 用于重新驱动目标队列ARN的KMS加密密钥的资源(例如,“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" ], "Resource": "arn:aws:kms:<region>:<accountId>:key/<keyId_used to encrypt the message body>" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:<region>:<accountId>:key/<keyId_used for the destination queue>" } ] }
使用非加密队列对(带有死信队列的源队列)配置权限

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

  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

    • 死信队列中的 ResourceARN(例如,“arn: aws: sqs:<DLQ_region>:<DLQ_accountId>:<DLQ_name>") .

    • sqs:SendMessage

    • 目标队ResourceARN列的(例如,“arn: aws: sqs:<DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>").

    访问策略应类似下文:

    { "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>" } ] }