Logique AND/OR - Amazon Simple Notification Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Logique AND/OR

Vous pouvez utiliser les opérations qui incluent la logique AND/OR pour mettre en correspondance les attributs de message ou les propriétés de corps de message.

Logique AND

Vous pouvez appliquer une logique AND en utilisant plusieurs noms de propriété.

Examinons la politique suivante :

{ "customer_interests": ["rugby"], "price_usd": [{"numeric": [">", 100]}] }

Elle correspond à tous les attributs de message ou propriétés de corps de message ayant la valeur customer_interests définie sur rugby et la valeur price_usd définie sur un nombre supérieur à 100.

Note

Vous ne pouvez pas appliquer la logique AND à des valeurs d'un même attribut.

Logique OR

Vous pouvez appliquer une logique OR en affectant plusieurs valeurs à un nom de propriété.

Examinons la politique suivante :

{ "customer_interests": ["rugby", "football", "baseball"] }

Elle correspond à tous les attributs de message ou propriétés de corps de message ayant la valeur customer_interests définie sur rugby, football ou baseball.

Opérateur OR

Vous pouvez utiliser l'opérateur "$or" pour définir explicitement une politique de filtrage afin d'exprimer la relation OR entre plusieurs attributs de la politique.

Amazon SNS ne reconnaît une relation "$or" que lorsque la politique répond à toutes les conditions suivantes. Lorsque toutes ces conditions ne sont pas remplies, "$or" est traité comme un nom d'attribut normal, comme toute autre chaîne de la politique.

  • Il existe un attribut de champ "$or" dans la règle suivi d'un tableau, par exemple, “$or” : [].

  • Il existe au moins 2 objets dans le tableau "$or" : "$or": [{}, {}].

  • Aucun des objets du tableau "$or" ne possède de nom de champ correspondant à des mots clés réservés.

Sinon, "$or" est traité comme un nom d'attribut normal, comme les autres chaînes de la politique.

La politique suivante n'est pas analysée comme une relation OR, car le numérique et le préfixe sont des mots-clés réservés.

{ "$or": [ {"numeric" : 123}, {"prefix": "abc"} ] }

Exemples d'opérateurs OR

OR standard :

{ "source": [ "aws.cloudwatch" ], "$or": [ { "metricName": [ "CPUUtilization" ] }, { "namespace": [ "AWS/EC2" ] } ] }

La logique de filtrage pour cette politique est la suivante :

"source" && ("metricName" || "namespace")

Elle met en correspondance l'un ou l'autre des attributs de message suivants :

"source": {"Type": "String", "Value": "aws.cloudwatch"}, "metricName": {"Type": "String", "Value": "CPUUtilization"}

or

"source": {"Type": "String", "Value": "aws.cloudwatch"}, "namespace": {"Type": "String", "Value": "AWS/EC2"}

Elle correspond également à l'un des corps de message suivants :

{ "source": "aws.cloudwatch", "metricName": "CPUUtilization" }

or

{ "source": "aws.cloudwatch", "namespace": "AWS/EC2" }

Contraintes politiques qui incluent les relations OR

Examinons la politique suivante :

{ "source": [ "aws.cloudwatch" ], "$or": [ { "metricName": [ "CPUUtilization", "ReadLatency" ] }, { "metricType": [ "MetricType" ] , "$or" : [ { "metricId": [ 1234, 4321 ] }, { "spaceId": [ 1000, 2000, 3000 ] } ] } ] }

La logique de cette politique peut également être simplifiée comme suit :

("source" AND "metricName") OR ("source" AND "metricType" AND "metricId") OR ("source" AND "metricType" AND "spaceId")

Le calcul de la complexité des politiques comportant des relations OR peut être simplifié en additionnant les complexités des combinaisons pour chaque instruction OR.

La combinaison totale est calculée comme suit :

(source * metricName) + (source * metricType * metricId) + (source * metricType * spaceId) = (1 * 2) + (1 * 1 * 2) + (1 * 1 * 3) = 7

source possède une valeur, metricName deux valeurs, metricType une valeur, metricId deux valeurs et spaceId trois valeurs.

Examinons la politique de filtre imbriqué suivante :

{ "$or": [ { "metricName": [ "CPUUtilization", "ReadLatency" ] }, { "namespace": [ "AWS/EC2", "AWS/ES" ] } ], "detail" : { "scope" : [ "Service" ], "$or": [ { "source": [ "aws.cloudwatch" ] }, { "type": [ "CloudWatch Alarm State Change"] } ] } }

La logique de cette politique peut être simplifiée comme suit :

("metricName" AND ("detail"."scope" AND "detail"."source") OR ("metricName" AND ("detail"."scope" AND "detail"."type") OR ("namespace" AND ("detail"."scope" AND "detail"."source") OR ("namespace" AND ("detail"."scope" AND "detail"."type")

Le calcul du total des combinaisons est le même pour les politiques non imbriquées, mais nous devons prendre en compte le niveau d'imbrication d'une clé.

La combinaison totale est calculée comme suit :

(2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) = 32

metricName possède deux valeurs, namespace en possède deux, scope est une clé imbriquée à deux niveaux avec une valeur, source est une clé imbriquée à deux niveaux avec une valeur et type est une clé imbriquée à deux niveaux avec une valeur.