New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Como posso fazer com que minha assinatura do Amazon SQS receba com êxito uma notificação de um tópico do Amazon SNS?
Minha assinatura do Amazon Simple Queue Service (Amazon SQS) não recebe notificações de um tópico do Amazon Simple Notification Service (Amazon SNS).
Breve descrição
Antes de começar, configure o registro em log de status de entrega do Amazon CloudWatch para seu tópico do SNS. Para obter mais informações, consulte Monitorar tópicos do Amazon SNS usando o CloudWatch.
Observação:
- Para obter mais informações sobre alertas de violações de limites, consulte Definir alarmes do CloudWatch para métricas do Amazon SNS.
- Para obter informações sobre o status de entrega de mensagens aos endpoints, consulte Configurar registro em log do status de entrega usando o AWS Management Console.
- Para confirmar o status da entrega, acesse os logs de entrega do tópico no CloudWatch. Para verificar se a mensagem foi entregue à fila, compare as métricas NumberOfMessagesPublished e NumberOfNotificationsDelivered do tópico do SNS com a métrica NumberOfMessagesSent do CloudWatch da fila do Amazon SQS.
Resolução
Valide o status da assinatura
Verifique se a assinatura está no estado Confirmada e não no estado Confirmação pendente ou Excluída. Se o status for Confirmação pendente, confirme a assinatura. Se o status for Excluída, recrie a assinatura excluída.
Os motivos a seguir explicam por que uma assinatura está no estado Confirmada, mas as mensagens não são entregues às filas:
- Você não configurou a política de acesso da fila SQS ou a política de chaves do AWS Key Management Service (AWS KMS).
- As mensagens são filtradas.
- As mensagens são tópicos primeiro a entrar, primeiro a sair (FIFO) desduplicados.
- Você ativou a entrega de mensagens brutas para as assinaturas.
- As mensagens foram entregues, mas você não as vê no Amazon SQS.
Você recebe um erro de acesso negado
Configure a política de acesso da fila do SQS para permitir que o Amazon SNS envie mensagens
Para visualizar a política de acesso da fila do SQS, configure sua política de acesso.
Se a política de acesso da fila do SQS não incluir a ação de API SendMessage para o tópico do SNS, atualize a política com as permissões corretas. As permissões devem permitir que o Amazon SNS envie mensagens para a fila do SQS.
Configure sua política de chaves do AWS KMS para trabalhar com SSE em sua fila do SQS
Se a criptografia do lado do servidor (SSE) estiver ativada para sua fila SQS, siga estas etapas:
1. Certifique-se de que a chave do AWS KMS esteja ativada.
2. Verifique se sua fila do SQS está usando uma chave do KMS gerenciada pelo cliente. A política de chaves deve conceder permissões kms:Decrypt e kms:GenerateDataKey ao tópico do SNS.
Observação: você não pode usar chaves gerenciadas da AWS em assinaturas entre contas.
3. Para permitir que o serviço do Amazon SNS execute ações de API kms:GenerateDataKey e kms:Decrypt, adicione a seguinte declaração à política de chaves do KMS:
{ "Sid": "Allow Amazon SNS to use this key", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" }
Se a política de chaves do KMS não conceder acesso à entidade principal do Amazon SNS, os logs de status de entrega de mensagens mostrarão o erro KMS.AccessDeniedException:
{ "notification": { "messageMD5Sum": "9ecb1c62c0de86ac894c5fd6c447fe1f", "messageId": "f762cbcb-8643-5ef3-95c8-9739fe5f07f6", "topicArn": "arn:aws:sns:::", "timestamp": "2023-06-01 10:41:32.114" }, "delivery": { "deliveryId": "f7a48fb3-1d98-5fe8-ae45-d34165842b39", "destination": "arn:aws:sqs:::", "providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: 00df5c7d-1834-4cfb-bc05-e5a7fccfa816; Proxy: null)\",\"sqsRequestId\":\"Unrecoverable\"}", "dwellTimeMs": 59, "statusCode": 400 }, "status": "FAILURE" }
Para obter mais informações, consulte Why aren't messages that I publish to my Amazon SNS topic getting delivered to my subscribed Amazon SQS queue that has server-side encryption activated?
As mensagens são filtradas
No console do CloudWatch, verifique as métricas do CloudWatch para o Amazon SNS. Para confirmar se as mensagens foram filtradas, verifique a métrica NumberOfNotificationsFilteredOut. Se as mensagens forem filtradas, verifique a política de filtro de assinatura do tópico do SNS da sua fila do SQS.
Para verificar a política de assinatura de tópicos do SNS, conclua as seguintes etapas:
1. Abra o console do Amazon SNS.
2. No painel de navegação, escolha Assinaturas.
3. Selecione sua assinatura e, em seguida, escolha Editar.
4. Expanda a seção Política de filtro de assinatura. Verifique se os Atributos da mensagem ou o Corpo da mensagem correspondem ao ](https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering-scope.html)escopo da política do filtro de assinatura do SNS[. Se os atributos ou o corpo não corresponderem, atualize a política de filtro.
5. Escolha Salvar alterações.
Para obter mais informações, consulte Filtragem de mensagens do Amazon SNS.
As mensagens são desduplicadas
Com base no conteúdo da mensagem ou em um ID de desduplicação, os tópicos FIFO do Amazon SNS e as filas FIFO do Amazon SQS oferecem suporte à desduplicação de mensagens. Se o tópico tiver ContentBasedDeduplication definido, o sistema gerará um MessageDeduplicationId com base no conteúdo da mensagem. Se ContentBasedDeduplication não estiver definido, cada mensagem publicada no tópico deverá ter um MessageDeduplicationId exclusivo.
Use o parâmetro MessageDeduplicationId para desduplicar mensagens publicadas nos tópicos do SNS dentro do intervalo de desduplicação de 5 minutos. Para obter mais informações, consulte Desduplicação de mensagens para tópicos FIFO.
Você ativou a entrega de mensagens brutas para as assinaturas
Se você usar a entrega de mensagens brutas, verifique se não enviou mais do que 10 atributos de mensagem na notificação publicada. Para mensagens que você ativa com a entrega de mensagens brutas, o Amazon SNS mapeia os atributos das mensagens para atributos de mensagem do SQS.
O exemplo a seguir é um log de status de entrega com mais de 10 atributos de mensagem:
{ "notification": { "messageMD5Sum": "8fa14cdd754f91cc6554c9e71929cce7", "messageId": "22540375-973d-5c6d-8d9e-5f870de34c49", "topicArn": "arn:aws:sns:<region>:<account>:<topic name>", "timestamp": "2023-06-01 13:09:50.947" }, "delivery": { "deliveryId": "9ccf7066-19e5-5bbb-a973-2c94833bc5fc", "destination": "arn:aws:sqs:<region>:<account>:<queue name>", "providerResponse": "{\"ErrorCode\":\"InvalidParameterValue\",\"ErrorMessage\":\"Number of message attributes [13] exceeds the allowed maximum [10].\",\"sqsRequestId\":\"Unrecoverable\"}", "dwellTimeMs": 31, "statusCode": 400 }, "status": "FAILURE" }
As mensagens foram entregues, mas você não as vê no Amazon SQS
Uma mensagem pode ser entregue à fila, mas não estar disponível para pesquisa por esses motivos:
- No momento, ela está em andamento ou a mensagem está invisível porque um consumidor a recebeu e a processou. Para confirmar se o consumidor recebeu e processou a mensagem, use a métrica NumberOfMessagesReceived ou ApproximateNumberOfMessagesNotVisible do CloudWatch.
- Você configurou a mensagem com uma fila de atraso ou as mensagens foram enviadas com o temporizador de mensagens. Para verificar a mensagem, use a métrica ApproximateNumberOfMessagesDelayed do CloudWatch.
A assinatura do SNS não está visível no console do SQS
Se você criou a assinatura do SQS a partir da conta de tópico do SNS, não poderá ver a assinatura no console do SQS. Isso ocorre porque a conta do SNS é proprietária da assinatura, então você pode ver a assinatura somente no console do SNS.
Se você criou a assinatura do SNS a partir do console do Amazon SQS, a conta de tópico do SQS é proprietária da assinatura. Você poderá, então, ver a assinatura do SNS no console do SNS e no console do SQS.
A assinatura do SQS não está visível na assinatura de tópicos do SNS
Esse problema ocorre quando você exclui e recria o tópico do SNS com o mesmo nome e não exclui a assinatura do SQS. Você pode ver a assinatura do SQS no console do SNS na lista Assinaturas ou a partir da chamada de API ListSubscriptions do SNS. Para verificar o carimbo de data e hora em que as operações foram realizadas, examine os eventos do AWS CloudTrail relativos às chamadas de API DeleteTopic e CreateTopic do SNS.
Informações relacionadas
Como configuro meu endpoint do Amazon SQS em uma conta cruzada para o tópico do Amazon SNS?

Conteúdo relevante
- feita há um mêslg...
- feita há um mêslg...
- feita há um mêslg...
- Resposta aceitafeita há um mêslg...
- feita há 2 meseslg...
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 8 meses