Filtragem de mensagens do SQS e integração SNS + SQS
Aplique políticas de filtragem de assinaturas do SNS para que cada consumidor do SQS receba apenas as mensagens relevantes, reduzindo o processamento desnecessário.
Filtragem de mensagens do SQS e integração SNS + SQS é uma aula grátis de AWS Solutions Architect no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AWS Solutions Architect, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AWS Solutions Architect inclui 4 aulas no total.
O problema sem filtragem
Em uma arquitetura de distribuição sem filtragem, todo assinante do SQS recebe todas as mensagens do SNS. Se o seu tópico publicar eventos de pedidos para 10 categorias diferentes de produtos, mas um assinante processar apenas pedidos de produtos eletrônicos, ele ainda receberá e terá de descartar mensagens de alimentos e roupas. Isso desperdiça recursos computacionais, aumenta os custos e adiciona carga desnecessária aos consumidores. As políticas de filtragem de assinaturas do SNS resolvem esse problema fazendo com que o próprio SNS encaminhe as mensagens apenas aos assinantes apropriados.
Como funcionam as políticas de filtragem do SNS
Uma política de filtragem é um objeto JSON aplicado a uma assinatura do SQS ou do Lambda. O SNS avalia a política em relação aos atributos da mensagem antes de fazer a entrega. Se os atributos da mensagem corresponderem à política de filtragem, a mensagem será entregue; caso contrário, o SNS ignorará silenciosamente esse assinante. As políticas de filtragem oferecem suporte à correspondência de strings, a intervalos numéricos, à correspondência por prefixo e ao operador exists para verificar a presença ou ausência de um atributo.
# Filter policy: only deliver ELECTRONICS orders from US or EU
{
'category': ['ELECTRONICS'],
'region': ['US', 'EU'],
'amount': [{'numeric': ['>=', 100]}]
}Escopo da política de filtragem: atributos da mensagem ou corpo
Por padrão, as políticas de filtragem fazem a correspondência com base nos atributos da mensagem (metadados). Desde 2023, o SNS também oferece suporte à filtragem baseada na carga útil (corpo), definindo o escopo da política de filtragem como MessageBody. Isso permite filtrar com base em caminhos JSON diretamente no corpo da mensagem, sem exigir que os publicadores adicionem atributos. A filtragem do corpo é mais flexível, mas exige que o corpo da mensagem seja um JSON válido. Confirme sempre qual escopo corresponde ao formato de saída do seu publicador.
# Set filter scope to MessageBody
aws sns set-subscription-attributes \
--subscription-arn 'arn:aws:sns:...' \
--attribute-name FilterPolicyScope \
--attribute-value MessageBody
aws sns set-subscription-attributes \
--subscription-arn 'arn:aws:sns:...' \
--attribute-name FilterPolicy \
--attribute-value '{"category": ["ELECTRONICS"]}'Condições numéricas e de prefixo para filtragem
As políticas de filtragem oferecem suporte a vários operadores de correspondência além da simples igualdade de strings:
- Numérico:
{"numeric": ["=", 100]},{"numeric": [">", 50, "<=", 200]} - Prefixo:
{"prefix": "order-"}corresponde a qualquer string que comece com esse prefixo - Qualquer valor, exceto:
{"anything-but": ["CANCELLED"]}corresponde a qualquer valor, exceto os listados - Existência:
{"exists": true}corresponde quando o atributo está presente;falsequando está ausente
Publicação de mensagens com atributos para filtragem
Para que a filtragem funcione, o publicador deve incluir atributos da mensagem ao publicar no SNS. Os atributos são pares de chave e valor com um tipo de dados (String, Number, Binary). O publicador não precisa saber quais assinantes têm quais políticas de filtragem; basta enriquecer a mensagem com atributos que descrevam o evento. O SNS gerencia o roteamento automaticamente. Isso mantém os publicadores totalmente desacoplados da lógica específica dos assinantes.
aws sns publish \
--topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderTopic' \
--message '{"orderId": "789", "total": 250.00}' \
--message-attributes '{
"category": {"DataType": "String", "StringValue": "ELECTRONICS"},
"region": {"DataType": "String", "StringValue": "US"},
"amount": {"DataType": "Number", "StringValue": "250"}
}'Distribuição em várias camadas: SNS + vários SQS
Uma topologia sofisticada de distribuição pode ter o SNS encaminhando mensagens para filas do SQS em vários níveis de especificidade: uma fila recebe todos os pedidos (sem filtro) para auditoria, outra recebe apenas pedidos HIGH_VALUE (amount >= 1000) para análise de fraude, e uma terceira recebe apenas pedidos ELECTRONICS para o armazém de produtos eletrônicos. Cada fila do SQS tem seu próprio consumidor do Lambda. Esse padrão permite escalar cada camada de processamento de forma independente e adicionar novos consumidores sem alterar os existentes nem o publicador.
Entrega entre contas do SNS para o SQS
O SNS pode entregar mensagens a filas do SQS em uma conta da AWS diferente. A política baseada em recursos da fila do SQS deve permitir que a entidade principal de serviço do SNS chame sqs:SendMessage a partir do ARN do tópico do SNS da conta publicadora. Isso permite a publicação centralizada de eventos (uma conta publica e várias equipes de contas assinam) sem compartilhar credenciais. A distribuição entre contas é um padrão comum em configurações do AWS Organizations com várias contas.
# SQS queue policy to allow cross-account SNS delivery
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {'Service': 'sns.amazonaws.com'},
'Action': 'sqs:SendMessage',
'Resource': 'arn:aws:sqs:us-east-1:CONSUMER_ACCOUNT:MyQueue',
'Condition': {
'ArnEquals': {'aws:SourceArn': 'arn:aws:sns:us-east-1:PUBLISHER_ACCOUNT:MyTopic'}
}
}]
}SQS como buffer antes do Lambda
Quando o volume de eventos aumenta repentinamente, as invocações diretas do SNS para o Lambda fazem o Lambda escalar imediatamente, podendo sobrecarregar bancos de dados ou APIs downstream. Adicionar o SQS entre o SNS e o Lambda cria um buffer: o SNS entrega as mensagens ao SQS, e o Lambda consulta o SQS em um tamanho de lote controlado. Isso permite que o Lambda processe as mensagens a uma taxa sustentável enquanto o SQS absorve os picos de tráfego. A profundidade da fila funciona como um mecanismo de contrapressão: você pode monitorá-la e gerar um alerta quando crescer além de um limite que indique atraso do consumidor.
Comparação entre distribuição direta para o Lambda e distribuição com buffer do SQS
SNS → Lambda (direto): menor latência, sem buffer, o Lambda escala imediatamente. É ideal para alertas em tempo real ou notificações urgentes em que uma latência inferior a um segundo é importante. SNS → SQS → Lambda: adiciona suporte a DLQ, taxa de processamento controlada, novas tentativas com tempo limite de visibilidade e monitoramento da profundidade da fila. É ideal para processamento de transações, atualizações de inventário e qualquer cenário em que seja necessário respeitar os limites dos sistemas downstream. Em questões de exame, escolha o armazenamento intermediário do SQS sempre que forem mencionados durabilidade e controle de taxa.
Testando políticas de filtragem
Use o editor de políticas de filtragem do console do SNS para testar se uma mensagem de exemplo corresponderia à sua política de filtragem antes da implantação. Também é possível usar o ambiente de testes do SNS para simular a entrega de mensagens e verificar o roteamento. No código, valide as políticas de filtragem publicando mensagens de teste com atributos conhecidos e verificando as métricas do CloudWatch para cada assinatura: a métrica NumberOfMessagesFiltered mostra quantas mensagens foram bloqueadas pelo filtro, ajudando a ajustar as políticas sem esperar por eventos de produção.
Resumo da integração de ponta a ponta
Uma integração completa entre SNS e SQS funciona assim: (1) a aplicação publica um evento em um tópico Standard do SNS com atributos de mensagem; (2) o SNS avalia a política de filtragem de cada assinatura e entrega apenas as mensagens correspondentes a cada fila do SQS; (3) o Lambda consulta cada fila do SQS em lotes de tamanho configurado e processa as mensagens; (4) as mensagens com falha chegam à DLQ após maxReceiveCount; (5) um alarme do CloudWatch sobre a quantidade de mensagens na DLQ alerta a equipe. Esse padrão totalmente desacoplado e resiliente é um modelo de arquitetura SAA-C03.
Verificação rápida
Teste sua compreensão dos conceitos do AWS Solutions Architect (SAA-C03) abordados nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu que: as políticas de filtragem do SNS roteiam mensagens com base nos atributos da mensagem ou no conteúdo do corpo no nível do SNS, eliminando o processamento desnecessário pelos consumidores posteriores; o padrão SNS→SQS→Lambda adiciona armazenamento em buffer durável e controle de taxa entre a transmissão para vários destinos e o processamento; e a entrega do SQS entre contas permite uma publicação/assinatura centralizada em ambientes com várias contas usando políticas de recursos da fila. A seguir, exploraremos as APIs REST, HTTP e WebSocket do Amazon API Gateway.
Perguntas Frequentes
A aula “Filtragem de mensagens do SQS e integração SNS + SQS” é grátis?
Sim — o texto completo de “Filtragem de mensagens do SQS e integração SNS + SQS” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AWS Solutions Architect, atualize para CoddyKit PRO. O curso de AWS Solutions Architect inclui 4 aulas no total.
O que vou aprender em “Filtragem de mensagens do SQS e integração SNS + SQS”?
Aplique políticas de filtragem de assinaturas do SNS para que cada consumidor do SQS receba apenas as mensagens relevantes, reduzindo o processamento desnecessário. Você pratica AWS Solutions Architect com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar AWS Solutions Architect?
Nenhuma experiência prévia é necessária. AWS Solutions Architect no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Filtragem de mensagens do SQS e integração SNS + SQS”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de AWS Solutions Architect?
Sim. Cada aula de AWS Solutions Architect inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Filas SQS Standard versus FIFO
- Tempo limite de visibilidade, DLQ e sondagem longa
- Tópicos do SNS e arquitetura de distribuição
- Filtragem de mensagens do SQS e integração SNS + SQS