Saiba como configurar o redirecionamento de uma fila de mensagens não entregues no Amazon SQS - Amazon Simple Queue Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Saiba como configurar o redirecionamento de uma fila de mensagens não entregues no Amazon SQS

Use o redirecionamento de fila de mensagens mortas para mover mensagens não consumidas de uma fila de mensagens mortas para outro destino para processamento. Por padrão, a redirecionamento da fila de mensagens mortas move as mensagens de uma fila de mensagens mortas para uma fila de origem. No entanto, também será possível configurar qualquer outra fila como o destino de redirecionamento se as filas forem do mesmo tipo. Por exemplo, se a fila de mensagens não entregues for uma fila FIFO, a fila de destino de redirecionamento também deverá ser uma fila FIFO. Além disso, você pode configurar a velocidade de redirecionamento para definir a taxa na qual o Amazon SQS move mensagens.

nota

Quando uma mensagem é movida de uma fila FIFO para uma DLQ FIFO, o ID de eliminação de duplicação da mensagem original será substituído pelo ID da mensagem original. Isso acontece para garantir que a eliminação de duplicação da DLQ não impeça o armazenamento de duas mensagens independentes que, por acaso, compartilham o mesmo ID de eliminação de duplicação.

As filas de mensagens não entregues redirecionam as mensagens na ordem em que são recebidas, começando pela mais antiga. No entanto, a fila de destino ingere as mensagens redirecionadas, bem como as novas mensagens de outros produtores, de acordo com a ordem em que as recebe. Por exemplo, se um produtor enviar mensagens para uma fila FIFO de origem ao receber simultaneamente mensagens redirecionadas de uma fila de mensagens não entregues, as mensagens redirecionadas serão combinadas com as novas mensagens do produtor.

nota

A tarefa de redirecionamento redefine o período de retenção. Todas as mensagens redirecionadas são consideradas novas mensagens com um novo messageID e enqueueTime são atribuídos a mensagens redirecionadas.

Configurar o redirecionamento de uma fila de mensagens não entregues para uma fila padrão existente usando a API do Amazon SQS

É possível configurar o redirecionamento de uma fila de mensagens não entregues usando as ações de API StartMessageMoveTask, ListMessageMoveTasks e CancelMessageMoveTask:

Ação da API Descrição

StartMessageMoveTask

Inicia uma tarefa assíncrona para mover mensagens de uma fila de origem especificada a uma fila de destino especificada.

ListMessageMoveTasks

Exibe as tarefas mais recentes de movimentação de mensagens (até dez) em uma fila de origem específica.

CancelMessageMoveTask

Cancela uma tarefa de movimentação de mensagens especificada. A movimentação de uma mensagem só pode ser cancelada quando o status atual é EM EXECUÇÃO.

Configurar o redirecionamento de uma fila de mensagens não entregues para uma fila padrão existente usando o console do Amazon SQS

  1. Abra o console do Amazon SQS em. https://console.aws.amazon.com/sqs/

  2. No painel de navegação, escolha Queues.

  3. Escolha o nome da fila configurada como uma fila de mensagens não entregues.

  4. Selecione Start DLQ redrive (Iniciar o redirecionamento DLQ).

  5. Em Redrive configuration (Configurações de redirecionamento), em Message destination (Destino da mensagem), execute uma das seguintes ações:

    • Para redirecionar mensagens para a fila de origem, escolha Redrive to source queue(s) (Redirecionar para fila(s) de origem).

    • Para redirecionar mensagens para outra fila, escolha Redrive to custom destination (Redirecionar para um destino personalizado). Em seguida, insira o nome do recurso da Amazon (ARN) de uma fila de destino existente.

  6. Em Velocity control settings (Configurações de controle de velocidade), escolha uma das opções a seguir:

    • System optimized (Otimizado para o sistema) — Redirecione mensagens de fila de mensagens não entregues no número máximo de mensagens por segundo.

    • Custom max velocity (Velocidade máxima personalizada) — Redirecione mensagens de fila de mensagens não entregues com uma taxa máxima personalizada de mensagens por segundo. A taxa máxima permitida é de 500 mensagens por segundo.

      • É recomendável começar com um valor pequeno para a velocidade máxima personalizada e verificar se a fila de origem não está sobrecarregada com mensagens. A partir daí, aumente gradualmente o valor de velocidade máxima personalizada, continuando a monitorar o estado da fila de origem.

  7. Quando você terminar de configurar o redirecionamento da fila de mensagens não entregues, escolha Save (Salvar).

    Importante

    O Amazon SQS não oferece suporte à filtragem e modificação de mensagens enquanto as redireciona da fila de mensagens não entregues.

    Uma tarefa de redirecionamento de fila de mensagens não entregues pode ser executada no máximo 36 horas. O Amazon SQS oferece suporte a um máximo de 100 tarefas de redirecionamento ativo por conta.

  8. Se você quiser cancelar a tarefa de redirecionamento de mensagens, na página Details (Detalhes) da sua fila, escolha Cancel DLQ redrive (Cancelar redirecionamento DLQ). Ao cancelar uma redirecionamento de mensagem em andamento, todas as mensagens que já tenham sido movidas com sucesso para a fila de destino de movimentação permanecerão na fila de destino.

Configurar permissões de fila para o redirecionamento da fila de mensagens não entregues

Você pode conceder ao usuário acesso a ações específicas da fila de mensagens não entregues adicionando permissões à política. As permissões mínimas necessárias para uma fila de mensagens não entregues são as seguintes:

Permissões mínimas Métodos de API necessários
Como iniciar um redirecionamento de mensagens
  • Adicione sqs:StartMessageMoveTasksqs:ReceiveMessagesqs:DeleteMessage e sqs:GetQueueAttributes da fila de mensagens não entregues. Se a fila de mensagens não entregues ou a fila de origem forem criptografadas (também conhecida como fila SSE), também será necessário kms:Decrypt para qualquer chave do KMS usada para criptografar as mensagens.

  • Adicione o sqs:SendMessage da fila de destino. Se a fila de destino estiver criptografada, também será necessário adicionar kms:GenerateDataKey e kms:Decrypt.

Como cancelar um redirecionamento de mensagem em andamento
  • Adicione sqs:CancelMessageMoveTasksqs:ReceiveMessagesqs:DeleteMessage e sqs:GetQueueAttributes da fila de mensagens não entregues. Se a fila de mensagens não entregues estiver criptografada (também conhecida como fila SSE), também será necessário adicionar kms:Decrypt.

Como exibir o status de movimentação de uma mensagem
  • Adicione sqs:ListMessageMoveTasks e sqs:GetQueueAttributes da fila de mensagens não entregues.

Para configurar permissões a um par de filas criptografadas (uma fila de origem com uma fila de mensagens não entregues)

Use as etapas a seguir para configurar as permissões mínimas para um redrive de fila de cartas mortas (DLQ):

  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, selecione Políticas.

  3. Crie uma nova política e adicione as seguintes permissões. Anexe a política ao usuário ou à função do IAM que executará a operação de recondução.

    • Permissões para o DLQ (fila de origem):

      • sqs:StartMessageMoveTask

      • sqs:CancelMessageMoveTask

      • sqs:ListMessageMoveTasks

      • sqs:ReceiveMessage

      • sqs:DeleteMessage

      • sqs:GetQueueAttributes

      • sqs:ListDeadLetterSourceQueues

      • Especifique o ARN do recurso da DLQ (fila de origem) (por exemplo, “arn:aws:sqs::: “). <DLQ_region> <DLQ_accountId> <DLQ_name>

    • Permissões para a fila de destino:

      • sqs:SendMessage

      • Especifique a fila Resource ARN de destino (por exemplo, “arn:aws:sqs: “). <DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>

    • Permissões para chaves KMS:

      • kms:Decrypt(Necessário para descriptografar mensagens no DLQ.)

      • kms:GenerateDataKey(Necessário para criptografar mensagens na fila de destino.)

        • Resource ARNs:

          • O ARN da chave KMS usada para criptografar mensagens na DLQ (fila de origem) (por exemplo, “arn:aws:kms: ::key/ “). <region> <accountId> <SourceQueueKeyId>

          • O ARN da chave KMS usada para criptografar mensagens na fila de destino (por exemplo, “arn:aws:kms: ::key/ “). <region> <accountId> <DestinationQueueKeyId>

    A política de acesso deve ser semelhante a:

    JSON
    { "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:us-west-1:123456789012:<DLQ_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "source" } } }, { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-1:123456789012:<DestQueue_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "destination" } } }, { "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-west-1:123456789012:key/<SourceQueueKeyId>", "arn:aws:kms:us-west-1:123456789012:key/<DestQueueKeyId>" ] } ] }
Para configurar permissões a um par de filas não criptografadas (uma fila de origem com uma fila de mensagens não entregues)

Siga estas etapas para configurar as permissões mínimas necessárias para lidar com uma fila de mensagens mortas (DLQ) padrão e não criptografada. As permissões mínimas necessárias são para receber, excluir e obter atributos da fila de mensagens não entregues e enviar atributos para a fila de origem.

  1. Abra o console do IAM em https://console.aws.amazon.com/iam/.

  2. No painel de navegação, selecione Políticas.

  3. Crie uma nova política e adicione as seguintes permissões. Anexe a política ao usuário ou à função do IAM que executará a operação de recondução.

    • Permissões para o DLQ (fila de origem):

      • sqs:StartMessageMoveTask

      • sqs:CancelMessageMoveTask

      • sqs:ListMessageMoveTasks

      • sqs:ReceiveMessage

      • sqs:DeleteMessage

      • sqs:ListDeadLetterSourceQueues

      • Especifique o ARN do recurso da DLQ (fila de origem) (por exemplo, “arn:aws:sqs::: “). <DLQ_region> <DLQ_accountId> <DLQ_name>

    • Permissões para a fila de destino:

      • sqs:SendMessage

      • Especifique a fila Resource ARN de destino (por exemplo, “arn:aws:sqs: “). <DestQueue_region>:<DestQueue_accountId>:<DestQueue_name>

    A política de acesso deve ser semelhante a:

    JSON
    { "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:us-west-1:111122223333:<DLQ_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "source" } } }, { "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-1:111122223333:<DestQueue_name>", "Condition": { "StringEquals": { "aws:ResourceTag/QueueRole": "destination" } } } ] }

Usando o redrive de fila de letras mortas com controle de acesso a endpoints VPC

Ao restringir o acesso à fila a um VPCs uso específico da aws:sourceVpc condição, você precisa abrir uma exceção para os AWS serviços para habilitar a funcionalidade de recondução da fila de cartas mortas (DLQ). Isso ocorre porque o serviço Amazon SQS opera fora da sua VPC ao mover mensagens.

Para permitir operações de recondução do DLQ, adicione a aws:CalledViaLast condição à sua política de filas. Isso permite que o Amazon SQS faça chamadas de API em seu nome, mantendo as restrições de VPC para acesso direto.

Para permitir o acesso restrito à VPC e o redrive de DLQ:

  1. Use a aws:CalledViaLast condição em sua política de filas.

  2. Aplique a política à fila de origem e ao DLQ

  3. Mantenha as restrições da VPC para acesso direto de outras fontes

Aqui está um exemplo de política que implementa esses requisitos:

{ "Version": "2012-10-17", "Id": "SQSRedriveWithVpcRestriction", "Statement": [ { "Sid": "DenyOutsideVPCUnlessAWSService_DestQueue", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:DestQueue", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "StringNotEqualsIfExists": { "aws:CalledViaLast": "sqs.amazonaws.com" } } }, { "Sid": "DenyOutsideVPCUnlessAWSService_DLQ", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:Dlq", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "StringNotEqualsIfExists": { "aws:CalledViaLast": "sqs.amazonaws.com" } } } ] }
  • Substitua os valores do espaço reservado por seus valores reais

  • Esta política usa uma declaração de “negar” com condições, que é mais segura do que usar declarações de “permitir”

  • O StringNotEqualsIfExists operador lida com casos em que a chave de condição pode não estar presente no contexto da solicitação.

Como alternativa, você pode usar a chave de aws:ViaAWSService condição para permitir o acesso baseado em serviços e, ao mesmo tempo, manter as restrições da VPC. Essa chave de condição indica se a solicitação vem de um AWS serviço. Aqui está um exemplo de política que usa aws:ViaAWSService em vez deaws:CalledViaLast:

{ "Version": "2012-10-17", "Id": "SQSRedriveWithVpcRestriction", "Statement": [ { "Sid": "DenyOutsideVPCUnlessAWSService_DestQueue", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:DestQueue", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } }, { "Sid": "DenyOutsideVPCUnlessAWSService_DLQ", "Effect": "Deny", "Principal": "*", "Action": "sqs:*", "Resource": "arn:aws:sqs:*:111122223333:Dlq", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1234567890abcdef0" }, "BoolIfExists": { "aws:ViaAWSService": "false" } } } ] }

O BoolIfExists operador com aws:ViaAWSService condição garante que as solicitações sejam permitidas quando elas vêm de serviços, mantendo as restrições de VPC para acesso direto. Isso pode ser mais simples de entender e manter, pois verifica diretamente se a solicitação foi feita por um AWS serviço, em vez de verificar qual serviço fez a última chamada.

Para obter mais informações sobre as chaves de condição usadas no IAM e nas políticas de recursos, consulte Elementos da política JSON do IAM: Condição.