Operadores de comparação para uso em padrões de eventos no Amazon EventBridge - Amazon EventBridge

Operadores de comparação para uso em padrões de eventos no Amazon EventBridge

Abaixo, há um resumo de todos os operadores de comparação disponíveis no EventBridge.

Os operadores de comparação só funcionam em nós folha, com exceção de $or e anything-but.

Comparação Exemplo Sintaxe da regra Compatível com barramento de eventos Compatível com pipe

E

Local é “Nova York” e o dia é “Segunda-feira”

"Location": [ "New York" ], "Day": ["Monday"]

Sim

Sim

Tudo, exceto Estado é qualquer valor além de “inicializar”.

"state": [ { "anything-but": "initializing" } ]

Sim

Sim

Tudo, exceto (começa com)

A região não é nos EUA.

"Region": [ { "anything-but": {"prefix": "us-" } } ]

Sim

Não

Tudo, exceto (termina com)

FileName não termina com uma extensão .png.

"FileName": [ { "anything-but": { "suffix": ".png" } } ]

Sim

Não

Tudo, exceto (ignorar maiúsculas e minúsculas)

Estado é qualquer valor além de “inicializar” ou qualquer outra variação de maiúsculas e minúsculas, como “INICIALIZAR”.

"state": : [{ "anything-but": { "equals-ignore-case": "initializing" }}]}

Sim

Não

Tudo, exceto usando um curinga

FileName não é um caminho de arquivo que inclui /lib/.

"FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}]

Sim

Não

Começa com

A região é nos EUA.

"Region": [ {"prefix": "us-" } ]

Sim

Sim

Começa com (ignorar maiúsculas e minúsculas)

O nome do serviço começa com as letras “eventb”, sem diferenciar maiúsculas e minúsculas.

{"service" : [{ "prefix": { "equals-ignore-case": "eventb" }}]}

Sim

Sim

Vazio

LastName está vazio.

"LastName": [""]

Sim

Sim

Igual

Name é “Alice”

"Name": [ "Alice" ]

Sim

Sim

É igual a (ignorar maiúsculas e minúsculas)

Name é “Alice”

"Name": [ { "equals-ignore-case": "alice" } ]

Sim

Sim

Termina com

FileName termina com uma extensão .png

"FileName": [ { "suffix": ".png" } ]

Sim

Sim

Termina com (ignorar maiúsculas e minúsculas)

O nome do serviço termina com as letras “tbridge” ou qualquer outra variação de maiúsculas e minúsculas, como “TBRIDGE”.

{"service" : [{ "suffix": { "equals-ignore-case": "tBridge" }}]}

Sim

Sim

Existe

ProductName existe

"ProductName": [ { "exists": true } ]

Sim

Sim

Não existe

ProductName não existe

"ProductName": [ { "exists": false } ]

Sim

Sim

Não

Weather é qualquer valor, exceto “Raining” (Chovendo)

"Weather": [ { "anything-but": [ "Raining" ] } ]

Sim

Sim

Nulo

UserID é null

"UserID": [ null ]

Sim

Sim

Numérico (é iguais a)

Price é 100

"Price": [ { "numeric": [ "=", 100 ] } ]

Sim

Sim

Numérico (intervalo)

Price é superior a 10 e menor que ou igual a 20

"Price": [ { "numeric": [ ">", 10, "<=", 20 ] } ]

Sim

Sim

Ou

PaymentType é “Credit” (Crédito) ou “Debit” (Débito)

"PaymentType": [ "Credit", "Debit"]

Sim

Sim

Ou (vários campos)

Location é “New York” ou Day é “Monday”.

"$or": [ { "Location": [ "New York" ] }, { "Day": [ "Monday" ] } ]

Sim

Sim

Curinga

Qualquer arquivo com extensão .png, localizado na pasta "dir"

"FileName": [ { "wildcard": "dir/*.png" } ]

Sim

Não

Correspondência de prefixo

É possível fazer uma correspondência de um evento com um valor na origem do evento no prefixo. É possível usar a correspondência de prefixos para valores de string.

Por exemplo, haveria correspondência do padrão de evento a seguir em qualquer evento em que o campo "time" começasse com "2017-10-02", como "time": "2017-10-02T18:43:48Z".

{ "time": [ { "prefix": "2017-10-02" } ] }

Correspondência de prefixo ignorando maiúsculas e minúsculas

Você também pode fazer a correspondência com um valor de prefixo, sem diferenciar maiúsculas e minúsculas dos caracteres que iniciam um valor, usando equals-ignore-case com prefix.

Por exemplo, haveria correspondência do padrão de eventos a seguir com qualquer evento em que o campo service começasse com a string de caracteres EventB, mas também EVENTB, eventb ou qualquer combinação de maiúsculas e minúsculas desses caracteres.

{ "detail": {"service" : [{ "prefix": { "equals-ignore-case": "EventB" }}]} }

Correspondência de sufixo

É possível combinar um evento dependendo do sufixo de um valor na origem do evento. É possível usar a correspondência de sufixos para valores de string.

Por exemplo, haveria correspondência do padrão de evento a seguir em qualquer evento em que o campo "FileName" terminasse com a extensão de arquivo .png.

{ "FileName": [ { "suffix": ".png" } ] }

Correspondência de sufixo ignorando maiúsculas e minúsculas

Você também pode fazer a correspondência com um valor de sufixo, sem diferenciar maiúsculas e minúsculas dos caracteres que terminam com um valor, usando equals-ignore-case com suffix.

Por exemplo, haveria correspondência do padrão de eventos a seguir com qualquer evento em que o campo FileName começasse com a string de caracteres .png, mas também .PNG ou qualquer outra combinação de maiúsculas e minúsculas desses caracteres.

{ "detail": {"FileName" : [{ "suffix": { "equals-ignore-case": ".png" }}]} }

Correspondência “tudo, exceto”

A correspondência tudo, exceto faz a correspondência com qualquer valor, exceto o que for especificado na regra.

É possível excluir correspondências com strings e valores numéricos, incluindo listas que contenham somente strings ou números.

O evento a seguir mostra tudo menos uma correspondência com uma lista de strings e números.

{ "detail": { "state": [ { "anything-but": "initializing" } ] } } { "detail": { "x-limit": [ { "anything-but": 123 } ] } }

O evento a seguir mostra tudo menos uma correspondência com uma lista de strings.

{ "detail": { "state": [ { "anything-but": [ "stopped", "overloaded" ] } ] } }

O evento a seguir mostra tudo menos uma correspondência com uma lista de números.

{ "detail": { "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }

Correspondência “tudo, exceto” ignorando maiúsculas e minúsculas

Você também pode usar equals-ignore-case com anything-but para fazer a correspondência com valores de string sem diferenciar maiúsculas e minúsculas.

O padrão de eventos a seguir faz a correspondência com os campos state que não contêm a string “inicializar”, “INICIALIZAR”, “Inicializar” ou qualquer outra combinação de maiúsculas e minúsculas desses caracteres.

{ "detail": {"state" : [{ "anything-but": { "equals-ignore-case": "initializing" }}]} }

Você também pode usar equals-ignore-case com anything-but para fazer a correspondência com uma lista de valores:

{ "detail": {"state" : [{ "anything-but": { "equals-ignore-case": ["initializing", "stopped"] }}]} }

Correspondência “tudo, exceto” em prefixos

Você pode usar prefix com anything-but para fazer a correspondência com valores de string que não iniciam com o valor especificado. Isso inclui valores únicos ou uma lista de valores.

O padrão de eventos a seguir mostra a correspondência “tudo, exceto” que faz a correspondência com qualquer evento que não tenha o prefixo "init" no campo "state".

{ "detail": { "state": [ { "anything-but": { "prefix": "init" } } ] } }

O padrão de eventos a seguir mostra a correspondência “tudo, exceto” com uma lista de valores de prefixos. Esse padrão de eventos faz a correspondência com qualquer evento que não tenha os prefixos "init" ou "stop" no campo "state".

{ "detail": { "state" : [{ "anything-but": { "prefix": ["init", "stop"] } } ] } } }

Correspondência “tudo, exceto” em sufixos

Você pode usar suffix com anything-but para fazer a correspondência com valores de string que não terminam com o valor especificado. Isso inclui valores únicos ou uma lista de valores.

O padrão de eventos a seguir faz a correspondência com a qualquer valor do campo FileName que não termina com .txt.

{ "detail": { "FileName": [ { "anything-but": { "suffix": ".txt" } } ] } }

O padrão de eventos a seguir mostra a correspondência “tudo, exceto” com uma lista de valores de sufixos. Este padrão de eventos faz a correspondência com qualquer valor do campo FileName que não termina com .txt ou .rtf.

{ "detail": { "FileName": [ { "anything-but": { "suffix": [".txt", ".rtf"] } } ] } }

Correspondência “tudo, exceto” usando curingas

É possível usar o caractere curinga (*) dentro dos valores que você especificar para a correspondência “tudo, exceto”. Isso inclui valores únicos ou uma lista de valores.

O padrão de eventos a seguir faz a correspondência com qualquer valor do campo FileName que não contém /lib/.

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": "*/lib/*" }}] } }

O padrão de eventos a seguir mostra a correspondência “tudo, exceto” com uma lista de valores que inclui curingas. Este padrão de eventos faz a correspondência com qualquer valor do campo FileName que não contém /lib/ ou /bin/.

{ "detail": { "FilePath" : [{ "anything-but": { "wildcard": ["*/lib/*", "*/bin/*"] }}] } }

Para ter mais informações, consulte Como corresponder usando curingas.

Correspondência numérica

A correspondência numérica funciona com valores que são números JSON. Está limitada a valores entre -5.0e9 e +5.0e9 inclusive, com 15 dígitos de precisão ou seis dígitos à direita do ponto decimal.

O exemplo a seguir mostra a correspondência numérica para um padrão de evento que corresponde somente aos eventos que são verdadeiros para todos os campos.

{ "detail": { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } }

Correspondência de endereço IP

É possível usar a correspondência de endereços IP para endereços IPv4 e IPv6. O padrão de eventos a seguir mostra o endereço IP correspondente aos endereços IP que começam com 10.0.0 e terminam com um número entre 0 e 255.

{ "detail": { "sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ] } }

Existe correspondência

A correspondência existe funciona na presença ou ausência de um campo no JSON do evento.

A correspondência “existe” funciona somente em nós folha. Ela não funciona em nós intermediários.

O padrão de evento a seguir corresponde a qualquer evento que tenha um campo detail.state.

{ "detail": { "state": [ { "exists": true } ] } }

Os padrões de evento anterior seriam correspondentes ao evento de exemplo a seguir.

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "instance-id": "i-abcd1111", "state": "pending" } }

O padrão do evento anterior NÃO corresponde ao evento seguinte porque não tem um campo detail.state.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

Correspondência igual-ignorar-capitalização

A correspondência de igual para ignorar maiúsculas e minúsculas funciona em valores de string, independentemente de maiúsculas e minúsculas.

O padrão de evento a seguir corresponde a qualquer evento que tenha um campo detail-type que corresponda à string especificada, independentemente do caso.

{ "detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ] }

Os padrões de evento anterior seriam correspondentes ao evento de exemplo a seguir.

{ "detail-type": [ "EC2 Instance State-change Notification" ], "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ], "detail": { "c-count" : { "c1" : 100 } } }

Como corresponder usando curingas

É possível usar o caractere curinga (*) para encontrar o valor correspondente a valores de string em padrões de eventos.

nota

No momento, o caractere curinga é compatível somente com as regras do barramento de eventos.

Considerações ao usar curingas em seus padrões de eventos:

  • É possível especificar qualquer número de caracteres curinga em um determinado valor de cadeia de caracteres; no entanto, caracteres curinga consecutivos não são compatíveis.

  • O EventBridge é compatível com o uso do caractere de barra invertida (\) para especificar os caracteres literais * e\ em filtros curinga:

    • A string \* representa o caractere literal *

    • A string \\ representa o caractere literal \

    Não há compatibilidade para usar a barra invertida no escape de outros caracteres.

Curingas e complexidade do padrão de eventos

Há um limite para a complexidade de uma regra que usa curingas. Se uma regra for muito complexa, o EventBridge retornará um InvalidEventPatternException ao tentar criar a regra. Se sua regra gerar esse erro, considere usar a orientação abaixo para reduzir a complexidade do padrão do evento:

  • Reduza o número de caracteres curinga usados

    Use somente caracteres curinga quando realmente precisar comparar com vários valores possíveis. Por exemplo, considere o seguinte padrão de eventos, em que deseja comparar com os barramentos de eventos na mesma região:

    { "EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ] }

    No caso acima, muitas das seções do ARN serão baseadas diretamente na região em que seus barramentos de eventos residem. Portanto, se estiver usando a região us-east-1, um padrão menos complexo que ainda corresponda aos valores desejados pode ser o seguinte exemplo:

    { "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
  • Reduza as sequências de caracteres repetidas que ocorrem após um caractere curinga

    Ter a mesma sequência de caracteres aparecendo várias vezes após o uso de um curinga aumenta a complexidade do processamento do padrão do evento. Reformule seu padrão de eventos para minimizar sequências repetidas. Por exemplo, considere o seguinte exemplo, que corresponde ao arquivo de nome doc.txt de arquivo de qualquer usuário:

    { "FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ] }

    Se soubesse que o arquivo doc.txt só ocorreria no caminho especificado, poderia reduzir a sequência de caracteres repetidos desta forma:

    { "FileName": [ { "wildcard": "/Users/*/doc.txt" } ] }

Exemplo complexo com correspondência múltipla

Você pode combinar vários critérios de correspondência em um padrão de eventos mais complexo. Por exemplo, o padrão de evento a seguir combina anything-but e numeric.

{ "time": [ { "prefix": "2017-10-02" } ], "detail": { "state": [ { "anything-but": "initializing" } ], "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "anything-but": [ 100, 200, 300 ] } ] } }
nota

Ao criar padrões de eventos, se incluir uma chave mais de uma vez, a última referência será aquela usada para avaliar eventos. Por exemplo, para o seguinte padrão:

{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }

somente { "anything-but": "us-east" } serão levados em consideração ao avaliar a location.

Exemplo complexo com correspondências de $or

Também é possível criar padrões de eventos complexos que verificam se os valores de algum campo coincidem em vários campos. Use $or para criar um padrão de evento que corresponda se algum dos valores de vários campos for correspondido.

Observe que pode incluir outros tipos de filtro, como correspondência numérica e matrizes, na correspondência de padrões para campos individuais em sua estrutura $or.

O seguinte padrão de evento corresponderá se alguma das condições a seguir for atendida:

  • O campo c-count é maior que 0 ou menor que ou igual a 5.

  • O campo d-count é inferior a 10.

  • O campo x-limit é igual a 3.018e2.

{ "detail": { "$or": [ { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ] }, { "d-count": [ { "numeric": [ "<", 10 ] } ] }, { "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } ] } }
nota

As APIs que aceitam um padrão de evento (como PutRule, CreateArchive, UpdateArchive eTestEventPattern) lançarão uma InvalidEventPatternException se o uso de resultados $or em mais de mil combinações de regras.

Para determinar o número de combinações de regras em um padrão de evento, multiplique o número total de argumentos de cada matriz $or no padrão de evento. Por exemplo, o padrão acima contém uma única matriz $or com três argumentos, então o número total de combinações de regras também é três. Se adicionasse outra matriz $or com dois argumentos, o total de combinações de regras seria então seis.