As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Use a lógica AND/OR em políticas de filtro para corresponder aos atributos da mensagem ou às propriedades do corpo da mensagem no Amazon SNS. Isso permite uma filtragem de mensagens mais precisa e flexível.
Lógica E
Aplique a lógica E usando vários nomes de propriedade.
Considere a seguinte política:
{
"customer_interests": ["rugby"],
"price_usd": [{"numeric": [">", 100]}]
}
Ela estabelece correspondência com qualquer propriedade de atributo ou corpo de mensagem com o valor de customer_interests
definido como rugby
e o valor de price_usd
definido como um número maior que 100.
nota
Não é possível aplicar a lógica AND aos valores do mesmo atributo.
Lógica OU
Aplique a lógica OU atribuindo vários valores a um nome de propriedade.
Considere a seguinte política:
{
"customer_interests": ["rugby", "football", "baseball"]
}
Ela estabelece correspondência com qualquer propriedade de atributo ou corpo de mensagem com o valor de customer_interests
definido como rugby
, football
ou baseball
.
Operador OU
Você pode usar o operador "$or"
para definir explicitamente uma política de filtro para expressar a relação OR entre vários atributos na política.
O Amazon SNS só reconhece uma relação "$or"
quando a política atende a todas as condições a seguir. Quando todas essas condições não são atendidas, "$or"
é tratado como um nome de atributo regular, o mesmo que qualquer outra string na política.
-
Há um atributo do campo
"$or"
na regra seguido por uma matriz, por exemplo“$or” : []
. -
Há pelo menos dois objetos na matriz
"$or"
:"$or": [{}, {}]
. -
Nenhum dos objetos na matriz
"$or"
tem nomes de campo que sejam palavras-chave reservadas.
Caso contrário, "$or"
é tratado como um nome de atributo normal, o mesmo que outras strings na política.
A política a seguir não é analisada como uma relação OR porque numérico e prefixo são palavras-chave reservadas.
{
"$or": [ {"numeric" : 123}, {"prefix": "abc"} ]
}
Exemplos de operador OR
OR
padrão:
{
"source": [ "aws.cloudwatch" ],
"$or": [
{ "metricName": [ "CPUUtilization" ] },
{ "namespace": [ "AWS/EC2" ] }
]
}
A lógica do filtro para essa política é:
"source" && ("metricName" || "namespace")
Ele corresponde a um dos seguintes atributos de mensagens:
"source": {"Type": "String", "Value": "aws.cloudwatch"},
"metricName": {"Type": "String", "Value": "CPUUtilization"}
or
"source": {"Type": "String", "Value": "aws.cloudwatch"},
"namespace": {"Type": "String", "Value": "AWS/EC2"}
Também estabelece correspondência com um dos seguintes corpos de mensagem:
{
"source": "aws.cloudwatch",
"metricName": "CPUUtilization"
}
or
{
"source": "aws.cloudwatch",
"namespace": "AWS/EC2"
}
Restrições de políticas que incluem relações OR
Considere a seguinte política:
{
"source": [ "aws.cloudwatch" ],
"$or": [
{ "metricName": [ "CPUUtilization", "ReadLatency" ] },
{
"metricType": [ "MetricType" ] ,
"$or" : [
{ "metricId": [ 1234, 4321 ] },
{ "spaceId": [ 1000, 2000, 3000 ] }
]
}
]
}
A lógica dessa política também pode ser simplificada como:
("source" AND "metricName")
OR
("source" AND "metricType" AND "metricId")
OR
("source" AND "metricType" AND "spaceId")
O cálculo da complexidade para políticas com relacionamentos OR pode ser simplificado como a soma das complexidades da combinação para cada declaração OR.
A combinação total é calculada da seguinte forma:
(source * metricName) + (source * metricType * metricId) + (source * metricType * spaceId)
= (1 * 2) + (1 * 1 * 2) + (1 * 1 * 3)
= 7
source
tem um valor, metricName
tem dois valores, metricType
tem um valor, metricId
tem dois valores e spaceId
tem três valores.
Considere a seguinte política de filtro aninhada:
{
"$or": [
{ "metricName": [ "CPUUtilization", "ReadLatency" ] },
{ "namespace": [ "AWS/EC2", "AWS/ES" ] }
],
"detail" : {
"scope" : [ "Service" ],
"$or": [
{ "source": [ "aws.cloudwatch" ] },
{ "type": [ "CloudWatch Alarm State Change"] }
]
}
}
A lógica dessa política pode ser simplificada como:
("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")
O cálculo das combinações totais é o mesmo para políticas não aninhadas, exceto que precisamos considerar o nível de aninhamento de uma chave.
A combinação total é calculada da seguinte forma:
(2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) = 32
metricName
tem dois valores, namespace
tem dois valores, scope
é uma chave aninhada de dois níveis com um valor, source
é uma chave aninhada de dois níveis com um valor e type
é uma chave aninhada de dois níveis com um valor.