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á.
A filtragem de mensagens no Amazon SNS permite que você entregue mensagens seletivamente aos assinantes com base nas políticas de filtro. Essas políticas definem as condições que as mensagens devem atender para serem entregues a uma assinatura. Embora a entrega de mensagens brutas seja uma opção que possa afetar o processamento de mensagens, ela não é necessária para que os filtros de assinatura funcionem.
É possível aplicar uma política de filtro a uma assinatura do Amazon SNS usando o console do Amazon SNS. Ou, para aplicar políticas de forma programática, você pode usar a API do Amazon SNS, AWS Command Line Interface o AWS CLI() ou AWS qualquer SDK compatível com o Amazon SNS. Você também pode usar AWS CloudFormation.
Habilitação da entrega de mensagens brutas
A entrega de mensagens brutas garante que as cargas úteis de mensagens sejam entregues como estão aos assinantes, sem qualquer codificação ou transformação adicional. Isso pode ser útil quando os assinantes precisam do formato original da mensagem para processamento. No entanto, a entrega de mensagens brutas não está diretamente relacionada à funcionalidade dos filtros de assinatura.
Aplicação de filtros de assinatura
Para aplicar filtros de mensagens a uma assinatura, você define uma política de filtro usando a sintaxe JSON. Essa política especifica as condições que uma mensagem deve atender para ser entregue à assinatura. Os filtros podem ser baseados em atributos da mensagem, como atributos da mensagem, estrutura da mensagem ou até mesmo conteúdo da mensagem.
Relação entre entrega de mensagens brutas e filtros de assinatura
Embora a ativação da entrega de mensagens brutas possa afetar a forma como as mensagens são entregues e processadas pelos assinantes, não é um pré-requisito para o uso de filtros de assinatura. No entanto, em cenários em que os assinantes exigem o formato original da mensagem sem nenhuma modificação, habilitar a entrega de mensagens brutas pode ser benéfico junto com os filtros de assinatura.
Considerações para uma filtragem eficaz
Ao implementar a filtragem de mensagens, considere os requisitos específicos do seu aplicativo e dos assinantes. Defina políticas de filtro que correspondam com precisão aos critérios de entrega de mensagens para garantir uma distribuição eficiente e direcionada de mensagens.
Importante
AWS serviços como IAM e Amazon SNS usam um modelo de computação distribuída chamado consistência eventual. As adições ou alterações a uma política de filtro de assinatura podem levar até 15 minutos para entrarem em vigor.
AWS Management Console
Faça login no console do Amazon SNS
. -
No painel de navegação, escolha Subscriptions (Assinaturas).
-
Selecione uma assinatura e, em seguida, escolha Edit (Editar).
-
Na página Editar expanda a seção Política de filtros de assinatura.
-
Escolha entre filtragem baseada em atributo ou filtragem baseada em carga útil.
-
No campo Editor JSON, informe o Corpo do JSON de sua política de filtro.
-
Escolha Save changes (Salvar alterações).
O Amazon SNS aplica a política de filtro à assinatura.
AWS CLI
Para aplicar uma política de filtro com o AWS Command Line Interface (AWS CLI), use o set-subscription-attributes
comando, conforme mostrado no exemplo a seguir. Para a opção --attribute-name
, especifique FilterPolicy
. Em --attribute-value
, especifique sua política JSON.
$
aws sns set-subscription-attributes --subscription-arn
arn:aws:sns: ...
--attribute-name FilterPolicy --attribute-value'{"store":["example_corp"],"event":["order_placed"]}'
Para fornecer JSON válido para sua política, coloque os nomes e valores dos atributos entre aspas duplas. Também é necessário colocar o argumento completo da política entre aspas. Para evitar aspas de escape, você pode usar aspas simples para colocar a política e aspas duplas para os nomes e valores de JSON, como mostrado no exemplo.
Se você quiser alternar da filtragem de mensagens baseada em atributos (padrão) para a baseada em carga, você também pode usar o comando. set-subscription-attributes Para a opção --attribute-name
, especifique FilterPolicyScope
. Em --attribute-value
, especifique MessageBody
.
$
aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicyScope --attribute-value MessageBody
Para verificar se a política de filtro foi aplicada, use o comando get-subscription-attributes
. Os atributos na saída do terminal devem mostrar a política de filtro para a chave FilterPolicy
, conforme mostrado no exemplo a seguir:
$
aws sns get-subscription-attributes --subscription-arn arn:aws:sns: ...
{
"Attributes": {
"Endpoint": "endpoint . . .",
"Protocol": "https",
"RawMessageDelivery": "false",
"EffectiveDeliveryPolicy": "delivery policy . . .",
"ConfirmationWasAuthenticated": "true",
"FilterPolicy": "{\"store\": [\"example_corp\"], \"event\": [\"order_placed\"]}",
"FilterPolicyScope": "MessageAttributes",
"Owner": "111122223333",
"SubscriptionArn": "arn:aws:sns: . . .",
"TopicArn": "arn:aws:sns: . . ."
}
}
AWS SDKs
Os exemplos de código a seguir mostram como usar o SetSubscriptionAttributes
.
Importante
Se você estiver usando o exemplo do SDK para Java 2.x, a classe SNSMessageFilterPolicy
não estará disponível por padrão. Para obter instruções sobre como instalar essa classe, consulte o exemplo
- AWS CLI
-
Para definir atributos de assinatura
O exemplo
set-subscription-attributes
a seguir define o atributoRawMessageDelivery
para uma assinatura do SQS.aws sns set-subscription-attributes \ --subscription-arn
arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc
\ --attribute-nameRawMessageDelivery
\ --attribute-valuetrue
Este comando não produz saída.
O exemplo
set-subscription-attributes
a seguir define um atributoFilterPolicy
para uma assinatura do SQS.aws sns set-subscription-attributes \ --subscription-arn
arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc
\ --attribute-nameFilterPolicy
\ --attribute-value "{ \"anyMandatoryKey\": [\"any\", \"of\", \"these\"] }"Este comando não produz saída.
O exemplo
set-subscription-attributes
a seguir remove o atributoFilterPolicy
de uma assinatura do SQS.aws sns set-subscription-attributes \ --subscription-arn
arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc
\ --attribute-nameFilterPolicy
\ --attribute-value"{}"
Este comando não produz saída.
-
Para obter detalhes da API, consulte SetSubscriptionAttributes
em Referência de AWS CLI Comandos.
-
API do Amazon SNS
Para aplicar um política de filtro com a API do Amazon SNS, faça uma solicitação para a ação SetSubscriptionAttributes
. Defina o parâmetro AttributeName
como FilterPolicy
e defina o parâmetro AttributeValue
para a política de filtro JSON.
Se você quiser mudar da filtragem baseada em atributos (padrão) para a filtragem baseada em carga útil, também poderá usar a ação SetSubscriptionAttributes
. Defina o parâmetro AttributeName
como FilterPolicyScope
e defina o parâmetro AttributeValue
como MessageBody
.
AWS CloudFormation
Para aplicar uma política de filtro usando AWS CloudFormation, use um modelo JSON ou YAML para criar uma AWS CloudFormation
pilha. Para obter mais informações, consulte a FilterPolicy
propriedade do AWS::SNS::Subscription
recurso no Guia do AWS CloudFormation usuário e no AWS CloudFormation modelo de exemplo
-
Faça login no console do AWS CloudFormation
. -
Escolha Create Stack (Criar pilha).
-
Na página Select Template (Selecionar modelo), escolha Upload a template to Amazon S3 (Carregar um modelo no Amazon S3) e, em seguida, o arquivo e Next (Avançar).
-
Na página Especificar detalhes, faça o seguinte:
-
Em Nome da pilha, digite
MyFilterPolicyStack
. -
Para myHttpEndpoint, digite o endpoint HTTP a ser inscrito em seu tópico.
dica
Se você não tiver um endpoint HTTP, crie um.
-
-
Na página Options (Opções), escolha Next (Avançar).
-
Na página Review (Revisar), escolha Create (Criar).