Application d'une politique de filtrage d'abonnement - Amazon Simple Notification Service

Application d'une politique de filtrage d'abonnement

Vous pouvez appliquer une politique de filtrage à un abonnement Amazon SNS à l'aide de la console Amazon SNS. Par ailleurs, pour appliquer des politiques par programmation, une alternative consiste à utiliser l'API Amazon SNS, la AWS Command Line Interface (AWS CLI) ou un kit SDK AWS qui prend en charge Amazon SNS.

Important

Les services AWS tels qu'IAM et Amazon SNS utilisent un modèle de calcul distribué appelé cohérence éventuelle. Les ajouts ou modifications de politique de filtrage d'abonnement nécessitent jusqu'à 15 minutes pour prendre effet.

AWS Management Console

  1. Connectez-vous à la console Amazon SNS.

  2. Dans le panneau de navigation, choisissez Abonnements.

  3. Sélectionnez un abonnement, puis choisissez Edit (Modifier).

  4. Sur la page Edit (Modifier), développez la section Subscription filter policy (Stratégie de filtrage d'abonnement).

  5. Dans le champ JSON editor (Éditeur JSON), indiquez le corps JSON de votre stratégie de filtrage.

  6. Choisissez Enregistrer les modifications.

    Amazon SNS applique votre politique de filtrage à l'abonnement.

AWS CLI

Pour appliquer une politique de filtre avec l'AWS Command Line Interface (AWS CLI), utilisez la commande set-subscription-attributes, comme illustré dans l'exemple suivant :

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

Pour l'option --attribute-name, spécifiez FilterPolicy. Pour --attribute-value, spécifiez votre politique JSON.

Pour fournir un code JSON valide pour votre politique, placez les noms et les valeurs d'attributs entre guillemets. Vous devez également placer la totalité de l'argument de la politique entre guillemets. Pour éviter l'échappement des guillemets, vous pouvez utiliser des apostrophes pour entourer la politique et des guillemets pour entourer les noms et les valeurs JSON, comme illustré dans l'exemple ci-dessus.

Pour vérifier que votre politique de filtre a été appliquée, utilisez la commande get-subscription-attributes. Les attributs dans la sortie du terminal doivent afficher votre politique de filtre pour la clé FilterPolicy, comme illustré dans l'exemple suivant:

$ 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\"]}", "Owner": "111122223333", "SubscriptionArn": "arn:aws:sns: . . .", "TopicArn": "arn:aws:sns: . . ." } }

Kits de développement logiciel (SDK) AWS

Les exemples de code suivants montrent comment définir une politique de filtrage Amazon SNS.

Important

Si vous utilisez l'exemple SDK for Java 2.x, la classe SNSMessageFilterPolicy n'est pas disponible dès le départ. Pour obtenir des instructions sur la façon d'installer cette classe, veuillez consulter l'exemple sur le site web GitHub.

Java
Kit SDK pour Java 2.x
Astuce

Pour découvrir comment configurer et exécuter cet exemple, consultez GitHub.

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); } }
  • Pour de plus amples informations sur l’API, consultez SetSubscriptionAttributes dans AWS SDK for Java 2.x Référence de l’API.

Python
Kit SDK pour Python (Boto3)
Astuce

Pour découvrir comment configurer et exécuter cet exemple, consultez GitHub.

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 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
  • Pour de plus amples informations sur l’API, consultez SetSubscriptionAttributes dans AWS Référence de l’API du kit SDK for Python (Boto3).

API Amazon SNS

Pour appliquer une politique de filtrage à l'API Amazon SNS, effectuez une demande d'action SetSubscriptionAttributes. Définissez le paramètre AttributeName sur FilterPolicy et définissez le paramètre AttributeValue sur votre politique de filtre JSON.

AWS CloudFormation

Pour appliquer une politique de filtre à l'aide de AWS CloudFormation, utilisez un modèle JSON ou YAML pour créer une pile AWS CloudFormation. Pour plus d'informations, consultez la propriété FilterPolicy de la ressource AWS::SNS::Subscription dans le Guide de l'utilisateur AWS CloudFormation et l'exemple de modèle AWS CloudFormation.

  1. Connectez-vous à la console AWS CloudFormation.

  2. Sélectionnez Create Stack (Créer une pile).

  3. Sur la page Select Template (Sélectionner un modèle), choisissez Upload a template to Amazon S3 (Charger un modèle dans Amazon S3), sélectionnez le fichier, puis Next (Suivant).

  4. Sur la page Spécification de détails de base de données, procédez comme suit :

    1. Pour le Nom de la pile, tapez MyFilterPolicyStack.

    2. Pour myHttpEndpoint, tapez le point de terminaison HTTP à abonner à votre rubrique.

      Astuce

      Si vous n'avez pas de point de terminaison HTTP, vous pouvez créer en.

  5. Dans la page Options, choisissez Next (Suivant).

  6. Sur la page Review (Vérification), choisissez Create (Créer).