Gerenciar notificações em tempo real em suas aplicações pode ser um grande desafio – pelo menos sem o serviço de mensagens certo.
O Amazon Simple Notification Service (SNS) está aqui para fornecer uma solução de mensagens totalmente gerenciada para desacoplar e dimensionar microsserviços, sistemas distribuídos e aplicações serverless. O SNS permite enviar mensagens para um grande número de assinantes por meio de vários protocolos de transporte, como HTTP/S, e-mail, SMS e notificações push em dispositivos móveis. O AWS SNS lida com todo o trabalho pesado de entrega de mensagens, incluindo entrega confiável, tentativas e funcionalidade de espera, dando a liberdade para focar na construção dos recursos principais de sua aplicação.
O AWS SNS segue um modelo de publicação-assinatura que é fácil de escalar e entender. Uma única mensagem publicada pode ser distribuída para vários pontos de extremidade simultaneamente, o que torna o SNS ideal para arquiteturas orientadas a eventos.
Neste tutorial, vou te guiar na configuração e uso do AWS SNS para enviar notificações em vários canais.
O que é o AWS SNS?
O Amazon Simple Notification Service (SNS) é o serviço de mensagens pub/sub gerenciado da AWS que permite que você desacople microsserviços, sistemas distribuídos e aplicações serverless.
O SNS funciona em um modelo simples de publicação-assinatura, onde publicadores enviam mensagens para tópicos e assinantes recebem essas mensagens. Pense em um tópico do SNS como um canal de comunicação – você publica mensagens neste canal, e qualquer pessoa que esteja inscrita é notificada imediatamente. A beleza deste sistema é que os publicadores não precisam saber quem está recebendo suas mensagens, e os assinantes não precisam saber quem as está enviando.
Você pode estar se perguntando como isso difere de outros serviços de mensagens da AWS, como Simple Queue Service (SQS). Simplificando, o SQS usa um modelo baseado em fila, projetado principalmente para processar tarefas de forma assíncrona, enquanto o SNS se concentra em transmitir mensagens para vários destinatários ao mesmo tempo. Isso torna o SNS perfeito para cenários onde você precisa notificar muitos sistemas sobre um evento que acabou de ocorrer. Você pode aprender mais sobre as diferenças no post do blog SQS vs SNS.
O SNS suporta múltiplos protocolos de entrega, o que lhe dá flexibilidade na forma como seus assinantes recebem notificações.
Recursos principais do AWS SNS
O SNS vem com recursos que o tornam o único serviço de notificação que você precisará. Vou listar alguns:
- Arquitetura de fan-out:O SNS pode entregar mensagens para milhares de pontos finais simultaneamente, o que por sua vez permite que você transmita atualizações em todo o ecossistema de sua aplicação com uma única chamada de API.
- Vários protocolos de transporte: Você não está limitado a apenas uma maneira de enviar mensagens. O SNS suporta endpoints HTTP/HTTPS, e-mail, SMS, notificações de push móvel e até mesmo filas SQS como endpoints de inscrição.
- Filtragem de mensagens: Nem todo assinante precisa de todas as mensagens. Com a filtragem de mensagens, seus assinantes podem criar políticas de filtro para receber apenas as mensagens que lhes interessam, o que reduz o ruído e a sobrecarga de processamento.
- Arquivamento de mensagens: Se você precisar manter um registro de todas as notificações enviadas, ficará satisfeito em saber que o SNS se integra ao Amazon S3 para arquivamento de mensagens e ao Amazon Redshift para análises.
- Rastreamento do status de entrega:Você pode monitorar o status de entrega de suas notificações para garantir que elas cheguem ao destino. Isso é especialmente útil para SMS e notificações push móveis onde a entrega não é garantida.
- Encriptação:Seus dados sensíveis ficam protegidos com o suporte do SNS para encriptação no lado do servidor, garantindo que suas mensagens permaneçam confidenciais durante a transmissão.
Mas a melhor parte do SNS tem que ser escalabilidade. O SNS se ajusta automaticamente de acordo com as necessidades da sua aplicação. Não importa se você está enviando dez ou dez milhões de notificações por dia, o serviço se ajusta sem a necessidade de intervenção manual.
Em seguida, vou te mostrar como configurar o SNS.
Configurando o AWS SNS
Antes de enviar sua primeira notificação com o SNS, você precisará seguir alguns passos de configuração para deixar tudo pronto.
Passo 1: Criando uma conta AWS
Se você ainda não tem uma conta AWS, será necessário criar uma antes de começar a usar o SNS.
Acesse a página inicial da AWS e clique no botão “Criar uma conta AWS” no canto superior direito. Você precisará fornecer seu endereço de e-mail, criar uma senha e inserir algumas informações básicas da conta. A AWS também solicitará os detalhes do seu cartão de crédito – não se preocupe, a AWS possui um plano gratuito bastante generoso e você não será cobrado a menos que exceda esses limites.
Uma vez que sua conta esteja configurada, você está pronto para avançar. No entanto, recomendo fortemente criar um usuário IAM dedicado em vez de usar sua conta root. Isso está fora do escopo do artigo de hoje, mas consulte as instruções oficiais para diretrizes detalhadas.
Passo 2: Configurando o SNS no console de gerenciamento da AWS
Agora que você tem uma conta AWS, é hora de acessar o serviço SNS.
Acesse o Console de Gerenciamento da AWS com suas credenciais e encontre o SNS. Você pode fazer isso de três maneiras:
- Digite “SNS” na barra de pesquisa no topo do console
- Clique em “Serviços” na barra de navegação superior e encontre o SNS na categoria “Integração de Aplicativos”
- Vá diretamente para o console do SNS
Independentemente do método, esta é a tela que você deve ver:
Imagem 1 – Página de serviço de SNS da AWS
Assim que você estiver no painel SNS, verá um menu no lado esquerdo com opções como “Tópicos”, “Inscrições” e “Móvel”. O painel oferece uma visão geral dos seus recursos SNS e atividades recentes.
Isso estará bem vazio para uma nova conta — isso é esperado. Agora, vamos criar nosso primeiro tópico SNS.
Passo 3: Criando um tópico SNS
Um tópico SNS é basicamente um canal de comunicação para o qual os publicadores enviam mensagens e os inscritos escutam.
Pense nele como uma estação de rádio – a estação transmite em uma frequência específica (o tópico), e qualquer pessoa sintonizada nessa frequência recebe a transmissão. Em termos de SNS, seu aplicativo publica mensagens em um tópico, e todos os pontos finais inscritos nesse tópico recebem essas mensagens.
Veja como criar seu primeiro tópico SNS:
- Na tela que você viu em Imagem 1, digite um nome para o tópico.
- Clique no botão “Próximo passo”.
- Selecione “Padrão” para o tipo (tópicos FIFO têm casos de uso diferentes que abordaremos mais tarde).
- (Opcional) Digite um nome de exibição. Isso será incluído nas mensagens enviadas para assinantes de SMS ou e-mail.
- Deixe todas as outras configurações como estão por enquanto.
- Clique em “Criar tópico”.
Se você prefere imagens em vez de texto, é assim que a sua tela deve parecer:
Imagem 2 – Criação de tópico SNS
Depois de estar satisfeito com os valores, role a página para baixo até encontrar o botão “Criar tópico”:
Imagem 3 – Criação de tópico SNS (2)
E é isso! Seu tópico SNS está agora pronto para uso. Você verá detalhes como o ARN do tópico (Amazon Resource Name), que identifica exclusivamente seu tópico:
Imagem 4 – Detalhes do tópico criado
Seu novo tópico está pronto para assinaturas, mas ainda não tem nenhuma, o que significa que qualquer mensagem que você publicar não irá a lugar nenhum. Não se preocupe, você resolverá isso na próxima seção quando adicionar assinantes.
Assinantes e Assinaturas SNS
Como eu disse anteriormente, seu tópico SNS é como uma estação de rádio. Atualmente, não tem ouvintes, mas isso mudará quando você adicionar assinantes para receber suas mensagens.
O que é um assinante SNS?
Um assinante é qualquer ponto final que recebe notificações do seu tópico SNS quando uma mensagem é publicada.
Considere a analogia de um boletim informativo. Toda vez que você publica uma nova edição (mensagem), ela é entregue a todos na sua lista de contatos. SNS torna esse processo automático e escalável, e ele lida com toda a logística de entrega para você.
A AWS suporta uma ampla variedade de tipos de assinantes, o que lhe dá flexibilidade na forma como suas mensagens são processadas. Vou listar os principais tipos abaixo:
- Endereços de e-mail: Envie notificações de texto simples diretamente para caixas de entrada de e-mail.
- Números de SMS: Envie notificações por mensagem de texto para telefones celulares.
- Filas SQS: Roteie mensagens para outros serviços da AWS para processamento adicional.
- Funções Lambda: Acione a execução de código serverless em resposta a notificações.
- Endpoints HTTP/HTTPS: Envie mensagens para aplicações web ou APIs.
- Notificação móvel:Envie notificações diretamente para aplicativos móveis.
Cada tipo de assinante tem suas próprias vantagens e casos de uso. Por exemplo, e-mail e SMS são ótimos para destinatários humanos, enquanto filas SQS e funções Lambda são melhores para comunicação sistema a sistema.
Passo 1: Adicionando um assinante
Agora que você entende o que são assinantes, vamos adicionar um ao seu tópico. Para este tutorial, vou usar o e-mail, pois é o mais simples de configurar.
Aqui está como adicionar um assinante de e-mail ao seu tópico SNS:
- Na página de detalhes do seu tópico (aquela mostrada na Imagem 4), clique no botão “Criar assinatura”.
- No menu suspenso “Protocolo”, selecione “E-mail”.
- No campo “Ponto de extremidade”, insira o endereço de e-mail que deve receber as notificações.
- Deixe todas as outras configurações com seus valores padrão.
- Clique em “Criar assinatura”.
Sua tela deve se parecer com isso:
Imagem 5 – Criando uma assinatura de e-mail
Ao clicar em “Criar assinatura”, a AWS adicionará a assinatura ao seu tópico, mas ela estará em estado de “confirmação pendente”:
Imagem 6 – Estado de confirmação pendente
Este é um recurso de segurança importante, pois a AWS quer garantir que o proprietário do endereço de e-mail realmente queira receber essas notificações.
Passo 2: Confirmando inscrições
Depois de adicionar um assinante, eles devem confirmar que desejam receber notificações do seu tópico SNS.
Para assinaturas por e-mail, a AWS envia automaticamente um e-mail de confirmação para o endereço que você especificou. O e-mail contém um link que o destinatário deve clicar para ativar a assinatura. Até que isso aconteça, nenhuma mensagem publicada no tópico será entregue a este endpoint.
Aqui está como se parece um e-mail de confirmação típico:
Imagem 7 – E-mail de confirmação do SNS
O destinatário só precisa clicar no link “Confirmar assinatura” no e-mail. Eles serão levados a uma página que confirma que sua assinatura está agora ativa:
Imagem 8 – Mensagem de confirmação de assinatura
O processo é semelhante para assinantes de SMS – A AWS envia uma mensagem de texto com um link de confirmação que o destinatário deve seguir. Os endpoints HTTP/HTTPS precisam responder a uma solicitação de confirmação da AWS, enquanto recursos da AWS como funções Lambda e filas SQS podem ser configurados para confirmação automática.
Você pode verificar o status de suas assinaturas clicando na seção “Assinaturas” na barra lateral esquerda do console SNS. Assinaturas confirmadas mostrarão um status de “Confirmado”, enquanto aquelas aguardando confirmação mostrarão “Aguardando confirmação.”
Imagem 9 – Status da assinatura
Uma vez que sua assinatura esteja confirmada, você está pronto para começar a enviar mensagens! Qualquer mensagem publicada no tópico será entregue a todos os assinantes confirmados usando seu protocolo especificado.
Isso é tudo que você precisa para configurar inscrições SNS. Na próxima seção, você aprenderá como publicar mensagens em seu tópico e testar se seus assinantes estão recebendo-as corretamente.
Publicando Mensagens em Tópicos SNS
Agora que você configurou seu tópico SNS e adicionou assinantes, é hora de enviar sua primeira notificação.
Passo 1: Publicando uma mensagem
Uma boa maneira de começar é publicando uma mensagem através do Console da AWS.
Para enviar sua primeira mensagem, acesse a página de detalhes do seu tópico e clique no botão “Publicar mensagem” no canto superior direito (veja Imagem 4). Isso abrirá o formulário de publicação de mensagem onde você pode redigir sua notificação. Você verá campos para o assunto da mensagem e o corpo. O assunto é opcional, mas útil para notificações por e-mail, pois se torna a linha de assunto do e-mail.
Para uma mensagem de teste simples, você pode inserir algo assim:
Imagem 10 – Conteúdo da primeira mensagem
Quando estiver satisfeito com sua mensagem, role para baixo e clique no botão “Publicar mensagem” na parte inferior do formulário:
Imagem 11 – Publicando uma mensagem via console
Ao clicar, o SNS distribui imediatamente sua mensagem para todos os assinantes confirmados. Se você configurou uma assinatura por e-mail, você deverá receber a mensagem de teste em sua caixa de entrada em segundos:
Imagem 12 – Mensagem recebida por e-mail
Simples, não foi? Vamos ver agora como personalizá-lo ainda mais.
Passo 2: Enviando notificações por SMS e e-mail
O SNS permite que você personalize como suas mensagens aparecem para diferentes tipos de assinantes.
Ao publicar uma mensagem, você notará a opção “Estrutura da mensagem”. Por padrão, está definido como “Carga útil idêntica para todos os protocolos de entrega”, o que significa que todos os assinantes recebem exatamente a mesma mensagem. No entanto, você também pode selecionar “Carga útil personalizada para cada protocolo de entrega”, o que permite personalizar o formato da mensagem para cada tipo de assinante.
Para notificações por e-mail, você tem duas opções de formato:
- Email-JSON: Envia a carga útil JSON bruta para o endpoint de e-mail.
- Email: Envia um e-mail formatado com o assunto e corpo da mensagem.
Imagem 13 – Personalização da carga útil
Para notificações por SMS, lembre-se de que há um limite de 160 caracteres. O SNS entregará mensagens mais longas, mas elas serão tratadas como mensagens múltiplas. Você também pode definir o tipo de mensagem SMS como “Promocional” ou “Transacional”, o que afeta a otimização da entrega:
Imagem 14 – Opções de SMS
Agora você sabe como enviar e personalizar notificações por e-mail através do Console da AWS. Em seguida, você aprenderá como fazer o mesmo através da CLI e Python.
Passo 3: Usando a CLI ou SDK da AWS para publicar mensagens
O console é ótimo para testes manuais, mas no mundo real, você vai querer publicar mensagens programaticamente.
A Interface de Linha de Comando da AWS (CLI) facilita o envio de mensagens SNS a partir do seu terminal ou scripts de automação.
Supondo que você tenha o AWS CLI instalado e configurado, execute este comando para publicar uma mensagem via CLI:
aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"
Imagem 15 – Publicação de mensagem através da AWS CLI
Em um instante, você verá uma mensagem semelhante na sua caixa de entrada:
Imagem 16 – Publicação de mensagem através do AWS CLI (2)
Para aplicações mais avançadas, os SDKs da AWS fornecem acesso programático ao SNS em várias linguagens de programação.
Aqui está um exemplo simples para publicar uma mensagem usando Python com a biblioteca boto3
:
import boto3 # Inicialize o cliente SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN do tópico (Amazon Resource Name) topic_arn = "sns-arn" # Publicar uma mensagem simples response = sns_client.publish( TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification" ) # Verificar se a mensagem foi enviada com sucesso if "MessageId" in response: print(f"Message published successfully! Message ID: {response['MessageId']}")
Imagem 17 – Publicação de mensagem através do Python SDK
Mais uma vez, a mensagem é entregue instantaneamente na minha caixa de entrada:
Imagem 18 – Publicação de mensagens através do SDK Python (2)
É isso que envolve a publicação de mensagens com o SNS! Agora você tem várias maneiras de enviar notificações, desde a simples interface do console até a publicação programática com o AWS CLI ou SDK.
> Novo no Boto da AWS em Python? Inscreva-se em nosso curso para se tornar proficiente em pouco tempo.
Na próxima seção, exploraremos algumas funcionalidades avançadas do SNS que levarão suas notificações para o próximo nível.
Funcionalidades Avançadas do SNS
Até agora, você aprendeu o básico do SNS. Nesta seção, você verá algumas funcionalidades avançadas que tornam o SNS verdadeiramente poderoso.
Filtragem de mensagens SNS
Enviar a mesma notificação para todos os assinantes muitas vezes resulta em endpoints recebendo mensagens que não são do seu interesse.
A filtragem de mensagens resolve esse problema permitindo que os assinantes filtrem quais mensagens desejam receber com base em atributos da mensagem. Pense nisso como configurar filtros de e-mail – você cria regras que determinam quais mensagens passam. Para o SNS, essas regras são chamadas de políticas de filtro.
Para começar, você pode configurar políticas de filtro em suas assinaturas para que elas recebam apenas mensagens relevantes:
Imagem 19 – Políticas de filtro de notificação
Neste exemplo, o assinante receberá notificações apenas para mensagens que possuam um atributo order_value
com um valor numérico de 1500 ou superior.
Agora, para enviar essa notificação, você pode usar o seguinte código Python:
import boto3 # Inicialize o cliente SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN do Tópico (Amazon Resource Name) topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic" response = sns_client.publish( TopicArn=topic_arn, Message="A new high-value order has been placed", Subject="New Order Notification", MessageAttributes={ "order_value": {"DataType": "Number", "StringValue": "2000"}, "region": {"DataType": "String", "StringValue": "EU"}, "category": {"DataType": "String", "StringValue": "Electronics"}, }, ) print(response)
Isso é o que você verá após executar o script Python:
Imagem 20 – Enviando uma notificação através do Python
Apenas se o valor de order_value
for 1500 ou mais, você receberá a notificação:
Imagem 21 – Conteúdo da notificação
Em resumo, políticas de filtragem permitem que você envie notificações direcionadas sem alterar seu código de publicação. A melhor parte é que a filtragem acontece do lado da AWS, não na sua aplicação, o que melhora a eficiência e reduz o tráfego desnecessário.
Filas de mensagens mortas SNS (DLQ)
A entrega de mensagens pode falhar às vezes, mesmo com os sistemas mais confiáveis.
Uma Fila de Mensagens Mortas (DLQ) é uma fila especial do Amazon SQS onde a SNS pode enviar mensagens que não puderam ser entregues aos seus assinantes. Isso geralmente acontece quando um assinante está indisponível ou retorna um erro. Em vez de perder essas mensagens falhadas para sempre, a SNS as redireciona para a DLQ, onde você pode analisá-las posteriormente ou tentar a entrega novamente.
Configurar uma DLQ envolve dois passos. Primeiro, crie uma fila SQS para servir como sua DLQ:
Imagem 22 – Criando uma fila SQS
Em seguida, configure sua assinatura SNS para usar essa fila para mensagens indesejadas:
Imagem 23 – Adicionando política de redirecionamento para a fila SQS
Essa configuração requer as permissões corretas, pois o SNS precisa poder enviar mensagens para a fila SQS. No console da AWS, você pode configurar isso através de uma simples caixa de seleção, mas se estiver usando o CloudFormation ou outras ferramentas de infraestrutura como código, será necessário adicionar as permissões IAM apropriadas.
Com uma DLQ em vigor, você pode monitorar falhas na entrega e agir quando necessário. Por exemplo, você pode configurar um alarme que dispara quando mensagens começam a aparecer em sua DLQ, alertando sobre possíveis problemas com seus inscritos, mas isso está fora do escopo desta seção.
Usando o AWS Lambda com o SNS
As funções Lambda abrem um mundo de possibilidades para processar mensagens do SNS.
Ao se inscrever em uma função Lambda para um tópico SNS, a função é acionada automaticamente sempre que uma mensagem é publicada. A abordagem serverless do Lambda significa que você não precisa gerenciar nenhuma infraestrutura para o processamento de mensagens, pois ele escala automaticamente com base no volume de mensagens.
Para começar, primeiro crie uma função Lambda:
Imagem 24 – Criando uma função Lambda
Em seguida, preencha com um código semelhante a este:
def lambda_handler(event, context): # As mensagens SNS estão no array 'Records' for record in event["Records"]: # Extrair a mensagem message = record["Sns"]["Message"] subject = record["Sns"]["Subject"] timestamp = record["Sns"]["Timestamp"] # Processar a mensagem print(f"Received message: {message}") print(f"Subject: {subject}") print(f"Timestamp: {timestamp}") # Sua lógica de negócios aqui # Por exemplo, armazenar a mensagem em um banco de dados # ou acionar outro serviço da AWS print("ALL DONE!") # Retornar sucesso return {"statusCode": 200, "body": "Message processed successfully"}
Imagem 25 – Código da função Lambda
Assim que seu código estiver pronto, clique no botão “Adicionar gatilho” para conectar a função Lambda ao SNS:
Imagem 26 – Conectando o SNS ao Lambda
A função está agora conectada à fila, o que significa que você pode enviar uma notificação de teste:
Imagem 27 – Teste de notificação
As funções Lambda permitem que você monitore logs, o que significa que você pode ver invocações recentes da função – o resultado do envio de uma notificação:
Imagem 28 – Logs da função Lambda
As funções Lambda podem fazer praticamente qualquer coisa com essas mensagens – armazená-las em um banco de dados, acionar outros serviços da AWS, enviar e-mails ou até mesmo chamar APIs externas. Isso torna SNS e Lambda uma combinação poderosa para a construção de arquiteturas orientadas a eventos. Você pode aprender mais sobre funções Lambda no tutorial Começando com o AWS Lambda.
Em seguida, você aprenderá o básico do monitoramento e logging do SNS.
Monitorando e Registrando Atividades do SNS
Manter o controle de sua atividade em SNS é essencial para manter um sistema de notificação confiável.
Usando o Amazon CloudWatch com SNS
O Amazon CloudWatch fornece monitoramento abrangente para todos os seus serviços da AWS, incluindo o SNS. Quando você configura o CloudWatch com o SNS, você obtém visibilidade sobre métricas operacionais importantes, como taxas de entrega de mensagens, falhas e padrões de uso da API.
Para começar a monitorar o CloudWatch para o SNS, acesse o console do CloudWatch em sua conta da AWS. A partir daí, você pode acessar as métricas pré-configuradas do SNS que a AWS coleta automaticamente para você.
As métricas mais valiosas do SNS para monitorar incluem:
- NúmeroDeMensagensPublicadas:Controla quantas mensagens são publicadas em seus tópicos.
- NúmeroDeNotificaçõesEntregues:Mostra entregas bem-sucedidas de mensagens para assinantes.
- NúmeroDeNotificaçõesFalhadas:Destaca tentativas de entrega malsucedidas, o que pode indicar problemas de configuração.
- TamanhoPublicação: Mede o tamanho das mensagens publicadas, ajudando você a permanecer dentro dos limites do serviço.
Imagem 29 – Painel padrão do Cloudwatch para SNS
Configurando alarmes do CloudWatch permite que você responda rapidamente a problemas potenciais antes que eles afetem seus usuários. Por exemplo, você pode querer criar um alarme que é acionado quando as falhas de entrega de mensagens excedem um determinado limite:
- No console do CloudWatch, navegue até a seção “Alarmes”.
- Clique em “Criar alarme” e selecione a métrica do SNS que deseja monitorar.
- Defina o seu limiar (por exemplo, mais de 5 entregas falhadas em 5 minutos).
- Configure ações de notificação, como enviar um alerta para uma equipe de operações.
Se preferir imagens em vez de instruções, comece criando um alarme para uma métrica de interesse, como NumberOfNotificationsFailed
. Configure os limiares que irão ativar o alarme:
Imagem 30 – Criação de alarme
E pronto – o alarme agora está criado e ativo:
Imagem 31 – Criação de alarme (2)
Esses alarmes podem ser a diferença entre lidar proativamente com um problema e descobrir sobre ele a partir de usuários insatisfeitos.
Revisão de logs do SNS
O AWS CloudTrail captura todas as atividades de API em sua conta da AWS, incluindo as ações realizadas no serviço SNS.
Cada operação realizada em seus tópicos do SNS – seja através do console, CLI ou SDK – gera uma entrada nos logs do CloudTrail. Esses logs fornecem informações valiosas para análise de segurança, rastreamento de alterações em recursos e auditoria de conformidade.
Para acessar os logs do SNS no CloudTrail:
- Abra o console do CloudTrail em sua conta AWS (provavelmente você terá que criar um novo trail).
- Navegue até “Histórico de eventos” para ver a atividade recente do SNS.
- Filtre os eventos selecionando “Fonte do evento” e digitando “sns.amazonaws.com”.
Novamente, se as instruções em texto não forem suficientes, consulte as imagens abaixo. Comece criando um novo trail:
Imagem 32 – Criando um novo trail
Em seguida, em “Histórico de eventos,” filtre os eventos para incluir apenas aqueles do SNS:
Imagem 33 – Filtragem de logs
Os logs são armazenados automaticamente em um bucket S3, o que significa que essa abordagem fornece armazenamento permanente para seus logs e permite capacidades de consulta mais avançadas.
> Como funciona o armazenamento na AWS? Leia nosso guia sobre S3 e EFS.
Para concluir, combinando métricas do CloudWatch com logs do CloudTrail, você cria um sistema de monitoramento abrangente que ajuda a garantir que sua infraestrutura do SNS opere de forma confiável.
Práticas recomendadas para usar o AWS SNS
Agora você conhece os recursos básicos e avançados do AWS SNS. Resta discutir as melhores práticas para criar tópicos e enviar mensagens.
Segurança de tópicos SNS
A segurança deve ser uma prioridade máxima ao configurar sua infraestrutura SNS. Sem controles adequados, seus tópicos podem estar vulneráveis a acessos não autorizados, o que representa um grande risco de segurança.
O AWS Identity and Access Management (IAM) fornece as ferramentas necessárias para proteger seus tópicos SNS. Comece criando políticas que sigam o princípio do menor privilégio – conceda apenas as permissões específicas necessárias para cada usuário ou serviço. Por exemplo, você pode querer que alguns aplicativos publiquem mensagens enquanto outros apenas precisam se inscrever nos tópicos.
Aqui está um exemplo de política IAM que restringe a publicação a um tópico específico:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "sns-arn" } ] }
Você também pode usar políticas de tópicos para controlar quais contas AWS podem se inscrever em seus tópicos. Isso é particularmente importante se você estiver compartilhando dados entre fronteiras organizacionais.
Não se esqueça de auditar regularmente as permissões usando o AWS CloudTrail e remover o acesso que não é mais necessário.
Gerenciando o volume de mensagens
Altos volumes de mensagens podem sobrecarregar os assinantes se não forem tratados adequadamente. É aqui que combinar SNS com outros serviços da AWS se torna essencial.
Um padrão popular é a arquitetura “fanout”, onde você publica mensagens em um tópico SNS que possui várias filas SQS assinadas. Cada fila pode então se integrar a diferentes sistemas de processamento em seu próprio ritmo. Isso desacopla seus publicadores de seus consumidores e fornece um buffer durante picos de tráfego.
Para necessidades de processamento em tempo real, considere assinar funções Lambda aos seus tópicos. O Lambda escala automaticamente com seu volume de mensagens, eliminando a necessidade de provisionar e gerenciar servidores.
Reduzindo custos
Embora o SNS seja econômico, as despesas podem se acumular rapidamente à medida que o volume de mensagens cresce. Algumas escolhas estratégicas podem ajudar a manter seus custos sob controle.
Primeiro, seja seletivo em relação aos seus protocolos de assinatura. Pontos finais HTTP/HTTPS são geralmente a opção mais econômica. Notificações por e-mail, embora convenientes, devem ser usadas com cautela, pois geram custos mais altos por mensagem.
A filtragem de mensagens é outra ferramenta poderosa para economizar custos. Ao implementar políticas de filtro em suas assinaturas, você garante que as mensagens sejam entregues apenas aos assinantes interessados. Por exemplo, se você tem um tópico para todos os alertas do sistema, pode querer que seus engenheiros de plantão recebam apenas alertas críticos durante seu turno, e não cada notificação:
# Assinar com uma política de filtro response = sns.subscribe( TopicArn="sns-arn", Protocol="email", Endpoint="[email protected]", Attributes={"FilterPolicy": '{"severity": ["critical"]}'}, )
Finalmente, revise regularmente o uso do SNS no AWS Cost Explorer e procure oportunidades para consolidar tópicos ou remover assinaturas não utilizadas. Recursos não utilizados ou duplicados não apenas adicionam custos desnecessários, mas também complicam sua arquitetura.
Seguindo essas melhores práticas, você criará uma implementação do SNS que é segura, escalável e econômica – tudo que você precisa para ter um serviço de notificação confiável sem despesas inesperadas ou preocupações de segurança.
Resumindo o AWS SNS
Se você precisa de notificação em tempo real em aplicativos distribuídos, não procure mais do que o AWS SNS. É fácil de usar, integra-se bem com outros serviços da AWS e escala infinitamente para atender às suas necessidades.
O modelo de publicação e inscrição na SNS torna simples a implementação de sistemas de notificação que podem alcançar vários canais simultaneamente. Desde a criação de tópicos e gerenciamento de assinantes até a implementação de recursos avançados como filtragem de mensagens e filas de mensagens mortas, agora você tem o conhecimento para construir uma infraestrutura de notificação robusta.
Você também aprendeu sobre os aspectos críticos de monitoramento, segurança e gerenciamento de custos que garantem que sua implementação da SNS permaneça confiável e eficiente em ambientes de produção.
À medida que as aplicações continuam a adotar arquiteturas orientadas a eventos, serviços como a SNS se tornam cada vez mais valiosos. Seja para construir um sistema de alerta simples ou microserviços complexos, os padrões deste tutorial fornecem uma base para comunicação eficaz entre os componentes do seu sistema.
Para saber mais sobre a AWS, siga estes cursos da DataCamp:
Você também pode usar o DataCamp para se preparar para os exames de certificação da AWS – Praticante de Nuvem da AWS (CLF-C02).