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.
Utilisez la logique ET/OU dans les politiques de filtrage pour faire correspondre les attributs des messages ou les propriétés du corps des messages sur Amazon SNS. Cela permet un filtrage des messages plus précis et plus flexible.
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.