Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Utilice la lógica ANDOR en las políticas de filtrado para hacer coincidir los atributos de los mensajes o las propiedades del cuerpo del mensaje en Amazon SNS. Esto permite un filtrado de mensajes más preciso y flexible.
Lógica AND
Puede aplicar la lógica AND utilizando varios nombres de propiedad.
Considere la siguiente política:
{
"customer_interests": ["rugby"],
"price_usd": [{"numeric": [">", 100]}]
}
Coincide con cualquier atributo de mensaje o propiedad de cuerpo de mensaje con el valor de customer_interests
establecido en rugby
y el valor de price_usd
establecido en un número mayor de 100.
nota
No puede aplicar la lógica AND a los valores del mismo atributo.
Lógica OR
Puede aplicar la lógica OR asignando varios valores a un nombre de propiedad.
Considere la siguiente política:
{
"customer_interests": ["rugby", "football", "baseball"]
}
Coincide con cualquier atributo de mensaje o propiedad de cuerpo de mensaje con el valor de customer_interests
establecido en rugby
, football
o baseball
.
Operador OR
Puede utilizar el operador "$or"
para definir de forma explícita una política de filtrado que exprese la relación OR entre varios atributos de la política.
Amazon SNS solo reconoce una relación "$or"
cuando la política ha cumplido todas las condiciones siguientes. Cuando no se cumplen todas estas condiciones, "$or"
se trata como un nombre de atributo normal, igual que cualquier otra cadena de la política.
-
Hay un atributo de campo
"$or"
en la regla seguido de una matriz, por ejemplo“$or” : []
. -
Hay al menos 2 objetos en la matriz de
"$or"
:"$or": [{}, {}]
. -
Ninguno de los objetos de la matriz de
"$or"
tiene nombres de campo que sean palabras clave reservadas.
De lo contrario, "$or"
se trata como un nombre de atributo normal, igual que otras cadenas de la política.
La siguiente política no se analiza como una relación OR porque el número y el prefijo son palabras clave reservadas.
{
"$or": [ {"numeric" : 123}, {"prefix": "abc"} ]
}
Ejemplos de operadores OR
OR
estándar:
{
"source": [ "aws.cloudwatch" ],
"$or": [
{ "metricName": [ "CPUUtilization" ] },
{ "namespace": [ "AWS/EC2" ] }
]
}
La lógica de filtrado de esta política es:
"source" && ("metricName" || "namespace")
Coincide con cualquiera de los siguientes conjuntos de atributos de mensaje:
"source": {"Type": "String", "Value": "aws.cloudwatch"},
"metricName": {"Type": "String", "Value": "CPUUtilization"}
o
"source": {"Type": "String", "Value": "aws.cloudwatch"},
"namespace": {"Type": "String", "Value": "AWS/EC2"}
También coincide con los siguientes cuerpos de mensaje:
{
"source": "aws.cloudwatch",
"metricName": "CPUUtilization"
}
o
{
"source": "aws.cloudwatch",
"namespace": "AWS/EC2"
}
Restricciones de políticas que incluyen relaciones OR
Considere la siguiente política:
{
"source": [ "aws.cloudwatch" ],
"$or": [
{ "metricName": [ "CPUUtilization", "ReadLatency" ] },
{
"metricType": [ "MetricType" ] ,
"$or" : [
{ "metricId": [ 1234, 4321 ] },
{ "spaceId": [ 1000, 2000, 3000 ] }
]
}
]
}
La lógica de esta política también se puede simplificar de la siguiente manera:
("source" AND "metricName")
OR
("source" AND "metricType" AND "metricId")
OR
("source" AND "metricType" AND "spaceId")
El cálculo de la complejidad de las políticas con relaciones OR se puede simplificar como la suma de las complejidades combinadas de cada declaración OR.
La combinación total se calcula del siguiente modo:
(source * metricName) + (source * metricType * metricId) + (source * metricType * spaceId)
= (1 * 2) + (1 * 1 * 2) + (1 * 1 * 3)
= 7
source
tiene un valor, metricName
tiene dos valores, metricType
tiene un valor, metricId
tiene dos valores y spaceId
tiene tres valores.
Tenga en cuenta la siguiente política de filtrado anidado:
{
"$or": [
{ "metricName": [ "CPUUtilization", "ReadLatency" ] },
{ "namespace": [ "AWS/EC2", "AWS/ES" ] }
],
"detail" : {
"scope" : [ "Service" ],
"$or": [
{ "source": [ "aws.cloudwatch" ] },
{ "type": [ "CloudWatch Alarm State Change"] }
]
}
}
La lógica de esta política se puede simplificar de la siguiente manera:
("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")
El cálculo para las combinaciones totales es el mismo para las políticas no anidadas, excepto que debemos tener en cuenta el nivel de anidación de una clave.
La combinación total se calcula del siguiente modo:
(2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) = 32
metricName
tiene dos valores, namespace
tiene dos valores, scope
es una clave anidada de dos niveles con un valor, source
es una clave anidada de dos niveles con un valor y type
es una clave anidada de dos niveles con un valor.