

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á.

# Filas de mensagens não entregues do Amazon SNS
<a name="sns-dead-letter-queues"></a>

Uma fila de mensagens mortas é uma fila do Amazon SQS para a qual uma assinatura do Amazon SNS pode enviar mensagens que não podem ser entregues aos assinantes com êxito. As mensagens que não podem ser entregues devido a erros do cliente ou erros do servidor são mantidas na fila de mensagens mortas para análise ou reprocessamento adicionais. Para obter mais informações, consulte [Configurar uma fila de mensagens não entregues do Amazon SNS para uma assinatura](sns-configure-dead-letter-queue.md) e [Novas tentativas de entrega de mensagens do Amazon SNS](sns-message-delivery-retries.md).

**nota**  
A assinatura do Amazon SNS e a fila do Amazon SQS devem estar na mesma conta e região AWS .
Em um [tópico FIFO](sns-fifo-topics.md), você pode usar uma fila do Amazon SQS como uma fila de mensagens não entregues para a assinatura do Amazon SNS. As assinaturas de tópicos FIFO usam filas FIFO e as de tópicos padrão usam filas padrão.
Para usar uma fila criptografada do Amazon SQS como fila de mensagens sem saída, você deve usar um KMS personalizado com uma política de chaves que conceda ao serviço Amazon SNS acesso principal às ações da API. AWS KMS Para obter mais informações, consulte [Segurança dos dados do Amazon SNS com a criptografia do lado do servidor](sns-server-side-encryption.md) neste guia e [Proteção de dados do Amazon SQS usando criptografia do lado do servidor (SSE) e AWS KMS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html) no *Guia do desenvolvedor do Amazon Simple Queue Service*.

## Por que há falha nas entregas de mensagens?
<a name="why-do-message-deliveries-fail"></a>

Em geral, há falha na entrega de mensagens quando o Amazon SNS não pode acessar um endpoint inscrito devido a um *erro do lado do cliente* ou um *erro do lado do servidor*. Quando o Amazon SNS recebe um erro do lado do cliente ou continua a receber um erro do lado do servidor para uma mensagem além do número de tentativas especificado pela política de novas tentativas correspondente, o Amazon SNS descarta a mensagem, a menos que uma fila de mensagens mortas esteja anexada à inscrição. Entregas com falha não alteram o status de suas inscrições. Para obter mais informações, consulte [Novas tentativas de entrega de mensagens do Amazon SNS](sns-message-delivery-retries.md).

### Erros no lado do cliente,
<a name="client-side-errors"></a>

Erros do lado do cliente podem ocorrer quando o Amazon SNS tem metadados de inscrição obsoletos. Esses erros geralmente ocorrem quando um proprietário exclui o endpoint (por exemplo, uma função do Lambda inscrita em um tópico do Amazon SNS) ou quando um proprietário altera a política anexada ao endpoint inscrito de uma forma que impede que o Amazon SNS entregue as mensagens para o ponto de endpoint. O Amazon SNS não tenta novamente a entrega da mensagem que falha como resultado de um erro do lado do cliente.

### Erros no lado do servidor
<a name="server-side-errors"></a>

Erros do lado do servidor podem ocorrer quando o sistema responsável pelo endpoint inscrito se torna indisponível ou retorna uma exceção que indica que ele não pode processar uma solicitação válida do Amazon SNS. Quando ocorrem erros do lado do servidor, o Amazon SNS tenta novamente as entregas com falha usando uma função de recuo exponencial ou linear. Para erros do lado do servidor causados por endpoints AWS gerenciados apoiados pelo Amazon SQS ou, o AWS Lambda Amazon SNS tenta novamente a entrega até 100.015 vezes, em 23 dias.

Os endpoints gerenciados pelo cliente (como HTTP, SMTP, SMS ou push em dispositivos móveis) também podem causar erros no lado do servidor. O Amazon SNS tenta novamente a entrega para esses tipos de endpoints também. Enquanto os endpoints HTTP oferecem suporte a políticas de novas tentativas definidas pelo cliente, o Amazon SNS define uma política de novas tentativas de entrega interna como 50 vezes ao longo de 6 horas, para SMTP, SMS e endpoints de push para dispositivos móveis.

## Como as filas de mensagens não entregues funcionam?
<a name="how-do-dead-letter-queues-work"></a>

Uma fila de mensagens não entregues é anexada a uma inscrição do Amazon SNS (em vez de um tópico) porque as entregas de mensagens acontecem no nível de inscrição. Isso permite identificar o endpoint de destino original para cada mensagem com mais facilidade.

Uma fila de mensagens mortas associada a uma inscrição do Amazon SNS é uma fila comum do Amazon SQS. Para obter mais informações sobre o período de retenção de mensagens, consulte [Quotas Related to Messages](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-quotas.html#quotas-messages) (“Cotas relacionadas a mensagens”) no *Guia do desenvolvedor do Amazon Simple Queue Service*. É possível alterar o período de retenção de mensagens usando a ação da API `[SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` do Amazon SQS. Para tornar seus aplicativos mais resilientes, recomendamos definir o período máximo de retenção para filas de mensagens não entregues como 14 dias.

## Como as mensagens são movidas para uma fila de mensagens não entregues?
<a name="how-messages-moved-into-dead-letter-queue"></a>

As mensagens são movidas para uma fila de mensagens não entregues por meio de uma *política de redirecionamento*. Uma política de redirecionamento é um objeto JSON que se refere ao ARN da fila de mensagens não entregues. O atributo `deadLetterTargetArn` especifica o ARN. O ARN deve apontar para uma fila do Amazon SQS na Conta da AWS mesma região da sua assinatura do Amazon SNS. Para obter mais informações, consulte [Configurar uma fila de mensagens não entregues do Amazon SNS para uma assinatura](sns-configure-dead-letter-queue.md). 

O objeto JSON a seguir é uma política de redirecionamento de exemplo, anexada a uma assinatura SNS.

```
{
  "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
}
```

## Como posso mover mensagens de uma fila de mensagens não entregues?
<a name="how-to-move-messages-out-of-dead-letter-queue"></a>

É possível mover mensagens para fora de uma fila de mensagens não entregues de duas maneiras:
+ **Evitar escrever lógica do consumidor do Amazon SQS**: defina sua fila de mensagens mortas como uma fonte de evento para a função do Lambda drenar sua fila de mensagens mortas.
+ **Escreva a lógica de consumo do Amazon SQS** — Use a API AWS , o SDK do Amazon SQS AWS CLI ou para escrever uma lógica de consumidor personalizada para pesquisar, processar e excluir as mensagens na fila de mensagens mortas.

## Como posso monitorar e registrar em log filas de mensagens não entregues?
<a name="how-to-monitor-log-dead-letter-queues"></a>

Você pode usar CloudWatch as métricas da Amazon para monitorar filas de cartas mortas associadas às suas assinaturas do Amazon SNS. Todas as filas do Amazon SQS emitem CloudWatch métricas em intervalos de um minuto. Para obter mais informações, consulte [ CloudWatch Métricas disponíveis para o Amazon SQS no Guia](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-available-cloudwatch-metrics.html) do desenvolvedor do *Amazon Simple Queue Service*. Todas as assinaturas do Amazon SNS com filas de mensagens sem saída também emitem métricas. CloudWatch Para obter mais informações, consulte [Monitorando tópicos do Amazon SNS usando CloudWatch](sns-monitoring-using-cloudwatch.md).

Para ser notificado sobre atividades em suas filas de cartas mortas, você pode usar CloudWatch métricas e alarmes. Configurar um alarme para a métrica `NumberOfMessagesSent` não é adequado porque essa métrica não captura mensagens enviadas para uma DLQ como resultado de tentativas de processamento malsucedidas. Em vez disso, use a métrica `ApproximateNumberOfMessagesVisible`, que captura todas as mensagens atualmente disponíveis no DLQ, incluindo aquelas movidas devido a falhas de processamento.

**Exemplo de configuração CloudWatch de alarme**

1. Crie um [CloudWatchalarme](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html) para a `ApproximateNumberOfMessagesVisible` métrica.

1. Defina o limite de alarme como **1** (ou outro valor apropriado com base em suas expectativas e tráfego de DLQ).

1. Especifique um **tópico** a ser notificado quando o alarme desligar. Esse tópico do Amazon SNS pode entregar sua notificação de alarme a qualquer tipo de ponto de endpoint (como um endereço de e-mail, número de telefone ou aplicativo de pager móvel).

Você pode usar o CloudWatch Logs para investigar as exceções que fazem com que qualquer entrega do Amazon SNS falhe e para que as mensagens sejam enviadas para filas de cartas mortas. O Amazon SNS pode registrar entregas bem-sucedidas e malsucedidas. CloudWatch Para obter mais informações, consulte [Atributos de aplicativo móvel do Amazon SNS](sns-msg-status.md).

# Configurar uma fila de mensagens não entregues do Amazon SNS para uma assinatura
<a name="sns-configure-dead-letter-queue"></a>

Uma fila de mensagens mortas é uma fila do Amazon SQS para a qual uma assinatura do Amazon SNS pode enviar mensagens que não podem ser entregues aos assinantes com êxito. As mensagens que não podem ser entregues devido a erros do cliente ou erros do servidor são mantidas na fila de mensagens mortas para análise ou reprocessamento adicionais. Para obter mais informações, consulte [Filas de mensagens não entregues do Amazon SNS](sns-dead-letter-queues.md) e [Novas tentativas de entrega de mensagens do Amazon SNS](sns-message-delivery-retries.md).

Esta página mostra como você pode usar o Console de gerenciamento da AWS, um AWS SDK AWS CLI, o e CloudFormation para configurar uma fila de mensagens mortas para uma assinatura do Amazon SNS.

**nota**  
Em um [tópico FIFO](sns-fifo-topics.md), você pode usar uma fila do Amazon SQS como uma fila de mensagens não entregues para a assinatura do Amazon SNS. As assinaturas de tópicos FIFO usam filas FIFO e as de tópicos padrão usam filas padrão.

## Pré-requisitos
<a name="dead-letter-queue-prerequisites"></a>

Antes de configurar uma fila de mensagens não entregues, complete os seguintes pré-requisitos:

1. [Crie um tópico do Amazon SNS](sns-create-topic.md) chamado `MyTopic`.

1. [Crie uma fila do Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) chamada `MyEndpoint`, para ser usada como endpoint para a assinatura do Amazon SNS.

1. (Ignorar para CloudFormation) [Inscreva-se na fila do tópico](sns-sqs-as-subscriber.md).

1. [Crie outra fila do Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) chamada `MyDeadLetterQueue`, para ser usada como a fila de mensagens mortas para a assinatura do Amazon SNS.

1. Para conceder à entidade principal do Amazon SNS acesso à ação da API do Amazon SQS, defina a seguinte política de fila para `MyDeadLetterQueue`.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "sns.amazonaws.com"
         },
         "Action": "SQS:SendMessage",
         "Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue",
         "Condition": {
           "ArnEquals": {
             "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic"
           }
         }
       }
     ]
   }
   ```

------

## Para configurar uma fila de mensagens mortas para uma assinatura do Amazon SNS usando o Console de gerenciamento da AWS
<a name="configure-dead-letter-queue-aws-console"></a>

Verifique os [pré-requisitos](#dead-letter-queue-prerequisites) antes de começar este tutorial.

1. Faça login no [console do Amazon SQS](https://console.aws.amazon.com/sqs/).

1. [Crie uma fila do Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) ou use uma fila existente e anote o ARN da fila na guia **Detalhes** da fila, por exemplo:

   ```
   arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
   ```

1. Faça login no [console do Amazon SNS](https://console.aws.amazon.com/sns/home).

1. No painel de navegação, escolha **Subscriptions (Assinaturas)**.

1. Na página **Assinaturas** selecione uma inscrição existente e escolha **Editar**.

1. Na *1234a567-bc89-012d-3e45-6fg7h890123i* página **Editar**, expanda a seção **Política do Redrive (fila de mensagens mortas)** e faça o seguinte:

   1. Selecione **Ativado**.

   1. Especifique o ARN de uma fila do Amazon SQS.

1. Escolha **Salvar alterações**.

   A inscrição estará configurada para usar uma fila de mensagens não entregues.

## Para configurar uma fila de mensagens mortas para uma assinatura do Amazon SNS usando um SDK AWS
<a name="configure-dead-letter-queue-aws-sdk"></a>

Antes de executar este exemplo, verifique se você preencheu os [pré-requisitos](#dead-letter-queue-prerequisites).

Para usar um AWS SDK, você deve configurá-lo com suas credenciais. Para obter mais informações, consulte [Os arquivos compartilhados de configuração e credenciais no Guia](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) de *referência de ferramentas AWS SDKs e ferramentas*.

O código de exemplo a seguir mostra como usar `SetSubscriptionAttributesRedrivePolicy`.

------
#### [ Java ]

**SDK para Java 1.x**  
 Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no [AWS Code Examples Repository](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/java/example_code/sns#code-examples). 

```
// Specify the ARN of the Amazon SNS subscription.
String subscriptionArn =
    "arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i";

// Specify the ARN of the Amazon SQS queue to use as a dead-letter queue.
String redrivePolicy =
    "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}";

// Set the specified Amazon SQS queue as a dead-letter queue
// of the specified Amazon SNS subscription by setting the RedrivePolicy attribute.
SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest()
    .withSubscriptionArn(subscriptionArn)
    .withAttributeName("RedrivePolicy")
    .withAttributeValue(redrivePolicy);
sns.setSubscriptionAttributes(request);
```

------

## Para configurar uma fila de mensagens mortas para uma assinatura do Amazon SNS usando o AWS CLI
<a name="configure-dead-letter-queue-aws-cli"></a>

Verifique os [pré-requisitos](#dead-letter-queue-prerequisites) antes de começar este tutorial.

1. Instale e configure a AWS CLI. Para obter mais informações, consulte o [Guia do usuário do *AWS Command Line Interface *](https://docs.aws.amazon.com/cli/latest/userguide/).

1. Use o seguinte comando.

   ```
   aws sns set-subscription-attributes \
   --subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i
   --attribute-name RedrivePolicy
   --attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"
   ```

## Para configurar uma fila de mensagens mortas para uma assinatura do Amazon SNS usando CloudFormation
<a name="configure-dead-letter-queue-aws-cloudformation"></a>

Verifique os [pré-requisitos](#dead-letter-queue-prerequisites) antes de começar este tutorial.

1. Copie o seguinte código JSON em um arquivo denominado `MyDeadLetterQueue.json`.

   ```
   {
     "Resources": {
       "mySubscription": {
         "Type" : "AWS::SNS::Subscription",
         "Properties" : {
           "Protocol": "sqs",
           "Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint",
           "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
           "RedrivePolicy": {
             "deadLetterTargetArn":
               "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
           }
         }
       }
     }
   }
   ```

1. Faça login no [console do CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Na página **Selecionar modelo**, selecione **Fazer upload de um modelo no Amazon S3**, selecione o arquivo `MyDeadLetterQueue.json` e escolha **Próximo**. 

1. Na página **Especificar detalhes**, digite `MyDeadLetterQueue` em **Nome da pilha** e escolha **Próximo**. 

1. Na página **Options (Opções)**, escolha **Next (Avançar)**.

1. Na página **Revisar**, escolha **Criar**.

   CloudFormation começa a criar a `MyDeadLetterQueue` pilha e exibe o status **CREATE\$1IN\$1PROGRESS**. Quando o processo estiver concluído, CloudFormation exibirá o status **CREATE\$1COMPLETE**.