Lógica E/OU - Amazon Simple Notification Service

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á.

Lógica E/OU

Use as operações que incluem lógica E/OU para estabelecer correspondência com propriedades de atributos ou corpos de mensagens.

Lógica AND

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 OR

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 OR

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"}

ou

"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" }

ou

{ "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.