Filtragem de conteúdo nos padrões de EventBridge eventos da Amazon - Amazon EventBridge

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

Filtragem de conteúdo nos padrões de EventBridge eventos da Amazon

A Amazon EventBridge oferece suporte à filtragem declarativa de conteúdo usando padrões de eventos. Com a filtragem de conteúdo, é possível escrever padrões de eventos complexos que só são acionados sob condições muito específicas. Por exemplo, é possível criar um padrão de evento que corresponda a um evento quando:

  • Um campo do evento está dentro de um intervalo numérico específico.

  • O evento vem de um endereço IP específico.

  • Não existe um campo específico no JSON do evento.

Importante

Em EventBridge, é possível criar regras que podem gerar higher-than-expected cobranças e estrangulamentos. Por exemplo, é possível criar, por engano, uma regra que leva a um loop infinito, em que uma regra é acionada recursivamente sem fim. Supõe-se que uma regra possa detectar que as ACLs foram alteradas em um bucket do Amazon S3 e acionar o software para alterá-las para o estado desejado. Se a regra não for gravada cuidadosamente, a alteração subsequente às ACLs disparará a regra novamente, criando um loop infinito.

Para obter orientação sobre como escrever regras precisas e padrões de eventos para minimizar esses resultados inesperados, consulte Práticas recomendadas ao definir regras do Amazon EventBridge e Melhores práticas ao definir padrões de EventBridge eventos da Amazon.

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 ao ignorar maiúsculas e minús

Você também pode combinar um valor de prefixo, independentemente da maiúscula dos caracteres com os quais um valor começa, usando equals-ignore-case em conjunto com prefix.

Por exemplo, o padrão de evento a seguir corresponderia a qualquer evento em que o service campo começasse com a cadeia de caracteresEventB, mas também com EVENTBeventb,, ou com qualquer outra capitalização 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 sufixos ao ignorar maiúsculas e min

Você também pode combinar um valor de sufixo, independentemente da maiúscula dos caracteres com os quais um valor termina, usando equals-ignore-case em conjunto com suffix.

Por exemplo, o padrão de evento a seguir corresponderia a qualquer evento em que o FileName campo terminasse com a cadeia de caracteres.png, mas também .PNG a qualquer outra capitalização desses caracteres.

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

Correspondência anything-but

Qualquer coisa, exceto a correspondência, corresponde a qualquer coisa, exceto o que está 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 ] } ] } }

Tudo menos combinar, ignorando maiúsculas e minúsculas

Você também pode usar equals-ignore-case em conjunto comanything-but, para combinar valores de string, independentemente da maiúscula dos caracteres.

O padrão de evento a seguir corresponde aos state campos que não contêm a string “initializing”, “INITIALIZING”, “Initializing” ou qualquer outra capitalização desses caracteres.

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

Você também pode usar equals-ignore-case em conjunto com anything-but para comparar com uma lista de valores:

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

Tudo menos correspondência em prefixos

Você pode usar prefix em conjunto com anything-but para combinar valores de string que não começam com o valor especificado. Isso inclui valores únicos ou uma lista de valores.

O padrão de evento a seguir mostra tudo, exceto a correspondência, que corresponde a 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 tudo menos a correspondência usada com uma lista de valores de prefixo. Esse padrão de evento corresponde a qualquer evento que não tenha o prefixo "init" nem o "stop" "state" campo.

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

Tudo menos correspondência em sufixos

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

O padrão de evento a seguir corresponde a todos os valores do FileName campo que não terminam com.txt.

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

O padrão de evento a seguir mostra tudo menos a correspondência usada com uma lista de valores de sufixo. Esse padrão de evento corresponde a todos os valores do FileName campo que não terminam com .txt ou.rtf.

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

Tudo menos combinar usando curingas

Você pode usar o caractere curinga (*) nos valores especificados para qualquer coisa, exceto a correspondência. Isso inclui valores únicos ou uma lista de valores.

O padrão de evento a seguir corresponde a todos os valores do FileName campo que não contêm/lib/.

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

O padrão de eventos a seguir mostra tudo menos a correspondência usada com uma lista de valores, incluindo curingas. Esse padrão de evento corresponde a todos os valores do FileName campo que não contêm /lib/ nem/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

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

A correspondência de existênciafunciona 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 } } }

quals-ignore-caseCombinação E

A quals-ignore-case correspondência E funciona em valores de string, independentemente do caso.

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.

  • EventBridge suporta 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, 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 várias correspondências

É possível combinar várias regras de correspondência em um padrão de evento 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.