Applicazione di una politica di filtro degli abbonamenti in Amazon SNS - Amazon Simple Notification Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Applicazione di una politica di filtro degli abbonamenti in Amazon SNS

Il filtraggio dei messaggi in Amazon ti SNS consente di recapitare messaggi in modo selettivo agli abbonati in base a politiche di filtro. Queste politiche definiscono le condizioni che i messaggi devono soddisfare per essere recapitati a un abbonamento. Sebbene l'invio di messaggi non elaborati sia un'opzione che può influire sull'elaborazione dei messaggi, non è necessario che i filtri di abbonamento funzionino.

Puoi applicare una politica di filtro a un SNS abbonamento Amazon utilizzando la SNS console Amazon. Oppure, per applicare le politiche a livello di codice, puoi utilizzare Amazon SNSAPI, il AWS Command Line Interface (AWS CLI) o qualsiasi altro AWS SDK che supporti Amazon. SNS Puoi anche usare. AWS CloudFormation

Abilitazione del recapito di messaggi non elaborati

La consegna non elaborata dei messaggi garantisce che i payload dei messaggi vengano consegnati così come sono agli abbonati senza alcuna codifica o trasformazione aggiuntiva. Ciò può essere utile quando gli abbonati richiedono il formato originale dei messaggi per l'elaborazione. Tuttavia, il recapito dei messaggi non elaborati non è direttamente correlato alla funzionalità dei filtri di abbonamento.

Applicazione dei filtri di abbonamento

Per applicare i filtri dei messaggi a un abbonamento, è necessario definire una politica di filtro utilizzando la JSON sintassi. Questa politica specifica le condizioni che un messaggio deve soddisfare per essere recapitato all'abbonamento. I filtri possono essere basati sugli attributi del messaggio, come gli attributi del messaggio, la struttura del messaggio o persino il contenuto del messaggio.

Relazione tra i filtri di invio di messaggi non elaborati e di sottoscrizione

Sebbene l'attivazione del recapito dei messaggi non elaborati possa influire sul modo in cui i messaggi vengono recapitati ed elaborati dagli abbonati, non è un prerequisito per l'utilizzo dei filtri di abbonamento. Tuttavia, negli scenari in cui gli abbonati richiedono il formato originale dei messaggi senza alcuna modifica, l'attivazione del recapito dei messaggi non elaborati potrebbe essere utile oltre ai filtri di abbonamento.

Considerazioni per un filtraggio efficace

Quando implementate il filtraggio dei messaggi, tenete conto dei requisiti specifici dell'applicazione e degli abbonati. Definite politiche di filtro che soddisfino accuratamente i criteri di recapito dei messaggi per garantire una distribuzione efficiente e mirata dei messaggi.

Importante

AWS servizi come Amazon IAM e Amazon SNS utilizzano un modello di calcolo distribuito chiamato eventuale coerenza. Le aggiunte o le modifiche a una policy di filtro sottoscrizione richiedono fino a 15 minuti per essere pienamente effettive.

AWS Management Console

  1. Accedi alla SNSconsole Amazon.

  2. Nel riquadro di navigazione, scegli Sottoscrizioni.

  3. Seleziona una sottoscrizione e quindi scegli Edit (Modifica).

  4. Nella pagina Edit (Modifica), espandi la sezione Policy di filtro per sottoscrizione.

  5. Scegli tra il filtro basato sugli attributi o sul payload.

  6. Nel campo dell'JSONeditor, fornisci il JSONcorpo della tua politica di filtro.

  7. Seleziona Salvataggio delle modifiche.

    Amazon SNS applica la tua politica di filtro all'abbonamento.

AWS CLI

Per applicare una politica di filtro con AWS Command Line Interface (AWS CLI), usa il set-subscription-attributescomando, come mostrato nell'esempio seguente. Per l'opzione --attribute-name specifica FilterPolicy. Per--attribute-value, specifica la tua JSONpolitica.

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicy --attribute-value '{"store":["example_corp"],"event":["order_placed"]}'

Per fornire una politica validaJSON, racchiudi i nomi e i valori degli attributi tra virgolette doppie. Devi inoltre racchiudere l'intero argomento della policy tra virgolette. Per evitare virgolette errate, è possibile utilizzare le virgolette singole per racchiudere la politica e le virgolette doppie per racchiudere i JSON nomi e i valori, come illustrato nell'esempio precedente.

Se desideri passare dal filtraggio dei messaggi basato sugli attributi (impostazione predefinita) a quello basato sul payload, puoi utilizzare anche il comando. set-subscription-attributes Per l'opzione --attribute-name specifica FilterPolicyScope. Per --attribute-value, specificare MessageBody.

$ aws sns set-subscription-attributes --subscription-arn arn:aws:sns: ... --attribute-name FilterPolicyScope --attribute-value MessageBody

Per verificare l'applicazione della policy di filtro, usa il comando get-subscription-attributes. Gli attributi nell'output su terminale devono mostrare la policy di filtro per la chiave FilterPolicy, come mostrato nell'esempio seguente:

$ 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

I seguenti esempi di codice mostrano come utilizzareSetSubscriptionAttributes.

Importante

Se si utilizza l'esempio SDK per Java 2.x, la classe non SNSMessageFilterPolicy è disponibile immediatamente. Per istruzioni su come installare questa classe, consultate l'esempio dal GitHub sito Web.

CLI
AWS CLI

Impostazione degli attributi della sottoscrizione

L'set-subscription-attributesesempio seguente imposta l'RawMessageDeliveryattributo su un SQS abbonamento.

aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc \ --attribute-name RawMessageDelivery \ --attribute-value true

Questo comando non produce alcun output.

L'set-subscription-attributesesempio seguente imposta un FilterPolicy attributo a un SQS abbonamento.

aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc \ --attribute-name FilterPolicy \ --attribute-value "{ \"anyMandatoryKey\": [\"any\", \"of\", \"these\"] }"

Questo comando non produce alcun output.

L'set-subscription-attributesesempio seguente rimuove l'FilterPolicyattributo da una SQS sottoscrizione.

aws sns set-subscription-attributes \ --subscription-arn arn:aws:sns:us-east-1:123456789012:mytopic:f248de18-2cf6-578c-8592-b6f1eaa877dc \ --attribute-name FilterPolicy \ --attribute-value "{}"

Questo comando non produce alcun output.

Java
SDKper Java 2.x
Nota

C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice AWS.

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.sns.SnsClient; import software.amazon.awssdk.services.sns.model.SnsException; import java.util.ArrayList; /** * Before running this Java V2 code example, set up your development * environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class UseMessageFilterPolicy { public static void main(String[] args) { final String usage = """ Usage: <subscriptionArn> Where: subscriptionArn - The ARN of a subscription. """; if (args.length != 1) { System.out.println(usage); System.exit(1); } String subscriptionArn = args[0]; SnsClient snsClient = SnsClient.builder() .region(Region.US_EAST_1) .build(); usePolicy(snsClient, subscriptionArn); snsClient.close(); } public static void usePolicy(SnsClient snsClient, String subscriptionArn) { try { SNSMessageFilterPolicy fp = new SNSMessageFilterPolicy(); // Add a filter policy attribute with a single value fp.addAttribute("store", "example_corp"); fp.addAttribute("event", "order_placed"); // Add a prefix attribute fp.addAttributePrefix("customer_interests", "bas"); // Add an anything-but attribute fp.addAttributeAnythingBut("customer_interests", "baseball"); // Add a filter policy attribute with a list of values ArrayList<String> attributeValues = new ArrayList<>(); attributeValues.add("rugby"); attributeValues.add("soccer"); attributeValues.add("hockey"); fp.addAttribute("customer_interests", attributeValues); // Add a numeric attribute fp.addAttribute("price_usd", "=", 0); // Add a numeric attribute with a range fp.addAttributeRange("price_usd", ">", 0, "<=", 100); // Apply the filter policy attributes to an Amazon SNS subscription fp.apply(snsClient, subscriptionArn); } catch (SnsException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } } }
Python
SDKper Python (Boto3)
Nota

C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice AWS.

class SnsWrapper: """Encapsulates Amazon SNS topic and subscription functions.""" def __init__(self, sns_resource): """ :param sns_resource: A Boto3 Amazon SNS resource. """ self.sns_resource = sns_resource @staticmethod def add_subscription_filter(subscription, attributes): """ Adds a filter policy to a subscription. A filter policy is a key and a list of values that are allowed. When a message is published, it must have an attribute that passes the filter or it will not be sent to the subscription. :param subscription: The subscription the filter policy is attached to. :param attributes: A dictionary of key-value pairs that define the filter. """ try: att_policy = {key: [value] for key, value in attributes.items()} subscription.set_attributes( AttributeName="FilterPolicy", AttributeValue=json.dumps(att_policy) ) logger.info("Added filter to subscription %s.", subscription.arn) except ClientError: logger.exception( "Couldn't add filter to subscription %s.", subscription.arn ) raise

Amazon SNS API

Per applicare una politica di filtro con Amazon SNSAPI, invia una richiesta all'SetSubscriptionAttributesazione. Imposta il AttributeName parametro su FilterPolicy e imposta il AttributeValue parametro sulla tua politica di filtroJSON.

Se desideri passare dal filtro dei messaggi basato sugli attributi (opzione predefinita) a quello basato sul payload, puoi utilizzare anche l'azione SetSubscriptionAttributes . Imposta il parametro AttributeName su FilterPolicyScope e il parametro AttributeValue su MessageBody.

AWS CloudFormation

Per applicare una politica di filtro utilizzando AWS CloudFormation, utilizzate un YAML modello JSON or per creare uno AWS CloudFormation stack. Per ulteriori informazioni, consultate la FilterPolicyproprietà della AWS::SNS::Subscription risorsa nella Guida per l'AWS CloudFormation utente e il AWS CloudFormation modello di esempio.

  1. Accedere alla console AWS CloudFormation.

  2. Scegli Create Stack (Crea stack).

  3. Nella pagina Select Template (Scegli modello), scegli Upload a template to Amazon S3 (Carica un modello in Amazon S3), scegli il file, quindi scegli Next (Avanti).

  4. Nella pagina Specify Details (Specifica dettagli), procedi come segue:

    1. Per Nome stack, digita MyFilterPolicyStack.

    2. Per myHttpEndpoint, digita l'HTTPendpoint a cui iscriverti al tuo argomento.

      Suggerimento

      Se non disponi di un HTTP endpoint, creane uno.

  5. Nella pagina Opzioni, scegli Next (Avanti).

  6. Nella pagina Revisione scegli Create (Crea).