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á.
Enviar mensagens do Amazon SNS para uma fila do SQS em uma conta diferente
Este documento descreve como publicar uma notificação em um tópico do Amazon SNS com uma ou mais inscrições em filas do Amazon SQS em outra conta. Você pode configurar o tópico e as filas da mesma forma que faria se eles estivessem na mesma conta (consulte Fanout para filas do Amazon SQS). A maior diferença é a forma de lidar com a confirmação de inscrição, e isso depende de como você inscreve a fila no tópico.
É prática recomendada seguir as etapas mencionadas na seção Proprietário da fila cria a assinatura quando possível, porque a confirmação é automática quando o proprietário da fila cria a inscrição.
nota
Se a fila do Amazon SQS tiver um grande volume de mensagens, recomendamos que o proprietário da fila crie a assinatura.
Tópicos
Proprietário da fila cria a assinatura
A conta que criou a fila do Amazon SQS é proprietária da fila. Quando o proprietário da fila cria uma assinatura, ela não requer confirmação. A fila começa a receber notificações do tópico assim que a ação Subscribe
é concluída. Para permitir que o proprietário da fila assine o tópico do proprietário, este último deve conceder à conta do proprietário da fila permissão para chamar a ação Subscribe
no tópico.
Etapa 1: Definir a política de tópico usando o AWS Management Console
Faça login no console do Amazon SNS
. -
No painel de navegação, escolha Topics (Tópicos).
-
Selecione um tópico e escolha Edit (Editar).
-
Na página Edit
MyTopic
(Editar MyTopic), expanda a seção Access policy (Política de acesso). -
Insira a seguinte política:
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": "sns:Subscribe", "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic" } ] }
Essa política concede à conta
111122223333
permissão para chamarsns:Subscribe
emMyTopic
na conta123456789012
.Um usuário com as credenciais da conta
111122223333
pode assinarMyTopic
. Essa permissão possibilita que o ID da conta delegue a permissão ao usuário ou à função do IAM. Somente os usuários da conta raiz ou administrador terão permissão para chamarsns:Subscribe
. O usuário ou a função do IAM também precisará tersns:subscribe
para permitir a assinatura da respectiva fila. -
Escolha Save changes (Salvar alterações).
Um usuário com as credenciais da conta
111122223333
pode assinar MyTopic.
Etapa 2: adicionar uma assinatura de fila do Amazon SQS a um tópico em outra Conta da AWS usando o AWS Management Console
Antes de começar, verifique se você tem os ARNs do tópico e da fila e se concedeu permissão ao tópico para enviar mensagens à fila.
Faça login no console do Amazon SQS
. -
No painel de navegação, escolha Queues (Filas).
-
Na lista de filas, escolha a fila que você deseja assinar em um tópico do Amazon SNS.
-
Escolha Subscribe to Amazon SNS topic (Inscrever-se no tópico do Amazon SNS).
-
No menu Specify an Amazon SNS topic available for this queue (Especificar um tópico do Amazon SNS disponível para esta fila), escolha o Amazon SNS topic (Tópico do Amazon SNS) para a fila.
-
Selecione Enter Amazon SNS topic ARN (Inserir o ARN do tópico do Amazon SNS) e insira o Amazon Resource Name (ARN) (Nome do recurso da Amazon (ARN)) do tópico.
-
Escolha Save (Salvar).
nota
-
Para poder se comunicar com o serviço, a fila deve ter permissões para o Amazon SNS.
-
Como você é o proprietário da fila, você não precisa confirmar a assinatura.
-
Um usuário que não é proprietário da fila cria uma assinatura
Qualquer usuário que criar uma assinatura, mas não for o proprietário da fila, deverá confirmar a assinatura.
Quando você usa a ação Subscribe
, o Amazon SNS envia uma confirmação de assinatura para a fila. A assinatura é exibida no console do Amazon SNS, com seu ID de assinatura definido como Pending Confirmation (Confirmação pendente).
Para confirmar a inscrição, o usuário com permissão para ler mensagens da fila precisa recuperar o URL de confirmação da inscrição e o proprietário da inscrição precisa confirmá-la usando o URL de confirmação. Até que a inscrição seja confirmada, nenhuma notificação publicada no tópico é enviada para a fila. Para confirmar a assinatura, você pode usar o console do Amazon SQS ou a ação ReceiveMessage
.
nota
Antes de inscrever um endpoint no tópico, certifique-se de que a fila possa receber mensagens do tópico definindo a permissão sqs:SendMessage
para a fila. Para obter mais informações, consulte Etapa 2: Conceder permissão ao tópico do Amazon SNS para enviar mensagens à fila do Amazon SQS.
Etapa 2: adicionar uma assinatura de fila do Amazon SQS a um tópico em outra Conta da AWS usando o AWS Management Console
Antes de começar, verifique se você tem os ARNs do tópico e da fila e se concedeu permissão ao tópico para enviar mensagens à fila.
Faça login no console do Amazon SNS
. -
No painel de navegação, escolha Subscriptions (Assinaturas).
-
Na página Subscriptions (Assinaturas), escolha Create subscription (Criar assinatura).
-
Na página Create subscription (Criar inscrição), na seção Details (detalhes), faça o seguinte:
-
Para Topic ARN (ARN de tópico), insira o ARN do tópico.
-
Em Protocol (Protocolo), escolha Amazon SQS.
-
Em Endpoint, insira o ARN de uma fila.
-
Selecione Create subscription.
nota
-
Para poder se comunicar com o serviço, a fila deve ter permissões para o Amazon SNS.
-
-
Veja a seguir um exemplo de instrução de política que permite ao tópico do Amazon SNS enviar mensagem à fila do Amazon SQS.
{ "Sid": "Stmt1234", "Effect": "Allow", "Principal": "*", "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:111111111111:QueueName", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-west-2:555555555555:TopicName" } } }
Etapa 2: Como confirmar uma assinatura com o uso do AWS Management Console
-
Faça login no console do Amazon SQS
. -
Selecione a fila que tem uma inscrição pendente no tópico.
-
Escolha Send and receive messages (Enviar e receber mensagens), depois escolha Poll for messages (Pesquisar mensagens).
Uma mensagem com a confirmação de assinatura é recebida na fila.
-
Na coluna Body (Corpo), faça o seguinte:
-
Escolha More Details (Mais detalhes).
-
Na caixa de diálogo Message Details (Detalhes da mensagem), localize e anote o valor SubscribeURL. Este é seu link de assinatura (exemplo abaixo). Para obter detalhes adicionais sobre a validação de token de API, consulte
ConfirmSubscription
na Referência da API do Amazon SNS.https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
-
Anote o link de confirmação da inscrição. O URL deve ser transmitido do proprietário da fila para o proprietário da assinatura. O proprietário da assinatura precisa inserir o URL no console do Amazon SNS
.
-
-
Faça login como o proprietário da assinatura no console do Amazon SNS
. O proprietário da assinatura executa a confirmação. -
Escolha o tópico pertinente.
-
Escolha a inscrição pertinente na tabela de listas de assinatura do tópico. Ela é identificada como “Confirmação pendente”.
-
Clique em Confirm subscription (Confirmar assinatura).
-
Uma janela modal é exibida solicitando o link de confirmação da assinatura. Cole o link de confirmação da inscrição.
-
Selecione Confirm subscription (Confirmar assinatura) na janela modal.
Uma resposta em XML é exibida, por exemplo:
<ConfirmSubscriptionResponse> <ConfirmSubscriptionResult> <SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-bc89-012d-3e45-6fg7h890123i</SubscriptionArn> </ConfirmSubscriptionResult> <ResponseMetadata> <RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId> </ResponseMetadata> </ConfirmSubscriptionResponse>
A fila inscrita está pronta para receber mensagens do tópico.
-
(Opcional) Se você exibir a assinatura do tópico no console do Amazon SNS, poderá ver que a mensagem Pending Confirmation (Confirmação pendente) foi substituída pelo ARN da assinatura na coluna Subscription ID (ID da assinatura).
Como faço para forçar uma assinatura a exigir autenticação em solicitações de cancelamento de assinatura?
O proprietário da assinatura precisa definir o sinalizador AuthenticateOnUnsubscribe
como true na confirmação de assinatura.
-
AuthenticateOnUnsubscribe
é definido automaticamente como true quando o proprietário da fila cria a inscrição. -
AuthenticateOnUnsubscribe
não pode ser definido como true quando o link de confirmação da assinatura é acessado sem autenticação.