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

Padrões de EventBridge eventos da Amazon

Os padrões de eventos têm a mesma estrutura que os eventos aos quais correspondem. As regras usam padrões de evento para selecionar eventos e enviá-los para os destinos. Um padrão de evento corresponde a um evento ou não corresponde.

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.

O seguinte vídeo aborda os princípios básicos dos padrões de eventos:

O evento a seguir mostra um AWS evento simples do Amazon EC2.

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0" ], "detail": { "instance-id": "i-1234567890abcdef0", "state": "terminated" } }

O padrão de eventos a seguir processa todos os eventos instance-termination do Amazon EC2.

{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["terminated"] } }

Como criar padrões de eventos

Para criar um padrão de evento, especifique os campos aos quais o padrão de evento deve corresponder. Especifique somente os campos usados para fazer a correspondência. O exemplo anterior do padrão de evento fornece valores somente para três campos: os campos de nível superior "source" e"detail-type", e o "state" campo dentro do campo do "detail" objeto. EventBridge ignora todos os outros campos do evento ao aplicar a regra.

Para que um padrão de evento corresponda a um evento, o evento deve conter todos os nomes de campos listados no padrão do evento. Os nomes de campos também devem aparecer no evento com a mesma estrutura de aninhamento.

Ao gravar padrões de regras para corresponder, pode usar a API TestEventPattern ou o comando test-event-pattern da CLI para garantir que o padrão corresponda ao JSON correto. Para obter mais informações, consulte TestEventPattern.

Valores de eventos correspondentes

Em um padrão de evento, o valor correspondente está em uma matriz JSON, entre colchetes ("[", "]") para que possa fornecer vários valores. Por exemplo, para combinar eventos do Amazon EC2 ou AWS Fargate, você pode usar o seguinte padrão, que corresponde a eventos em que o valor do "source" campo é ou"aws.ec2". "aws.fargate"

{ "source": ["aws.ec2", "aws.fargate"] }

Considerações ao criar padrões de eventos

A seguir, algumas considerações ao criar seus padrões de eventos:

  • EventBridge ignora os campos do evento que não estão incluídos no padrão do evento. O efeito é que há um curinga "*": "*" para campos que não aparecem no padrão do evento.

  • Os valores de correspondência nos padrões de evento seguem regras JSON. Você pode incluir strings entre aspas (“), números e as palavras-chave true, false e null.

  • Para strings, EventBridge usa a character-by-character correspondência exata sem dobrar maiúsculas e minúsculas ou qualquer outra normalização de string.

  • Para números, EventBridge usa representação de string. Por exemplo, 300, 300.0 e 3.0e2 não são considerados iguais.

  • Se vários padrões forem especificados para o mesmo campo JSON, usará EventBridge somente o último.

  • Lembre-se de que, ao EventBridge compilar padrões de eventos para uso, ele usa ponto (.) como caractere de junção.

    Isso significa que EventBridge tratará os seguintes padrões de eventos como idênticos:

    ## has no dots in keys { "detail" : { "state": { "status": [ "running" ] } } } ## has dots in keys { "detail" : { "state.status": [ "running" ] } }

    E que os dois padrões de eventos corresponderão aos dois seguintes eventos:

    ## has no dots in keys { "detail" : { "state": { "status": "running" } } } ## has dots in keys { "detail" : { "state.status": "running" } }
    nota

    Isso descreve EventBridge o comportamento atual e não se deve confiar que não mude.

  • Os padrões de eventos contendo campos duplicados são inválidos. Se um padrão contiver campos duplicados, considerará EventBridge apenas o valor final do campo.

    Por exemplo, os seguintes padrões de eventos corresponderão ao mesmo evento:

    ## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["sns.amazonaws.com"] } }

    E EventBridge trata os dois eventos a seguir como idênticos:

    ## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } ] } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["sns.amazonaws.com"] } ] }
    nota

    Isso descreve EventBridge o comportamento atual e não se deve confiar que não mude.

Operações de comparação para uso em padrões de eventos

Abaixo, um resumo de todos os operadores de comparação disponíveis em 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

E

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

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

Qualquer coisa, menos Estado é qualquer valor além de “inicializar”.

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

Tudo menos (começa com)

A região não está nos EUA.

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

Tudo menos (termina com)

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

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

Tudo menos (ignore o caso)

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

Começa com

A região está nos EUA.

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

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

O nome do serviço começa com as letras “eventb”, independentemente do caso.

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

Vazio

LastName está vazio.

"LastName": [""]

Igual

Name é “Alice”

"Name": [ "Alice" ]

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

Name é “Alice”

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

Termina com

FileName termina com uma extensão.png

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

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

O nome do serviço termina com as letras “tbridge” ou qualquer outra variação de caixa, como “TBRIDGE”.

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

Existe

ProductName existe

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

Não existe

ProductName não existe

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

Não

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

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

Nulo

UserID é null

"UserID": [ null ]

Numérico (é iguais a)

Price é 100

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

Numérico (intervalo)

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

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

Ou

PaymentType é “Crédito” ou “Débito”

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

Ou (vários campos)

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

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

Curinga

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

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

Eventos de exemplo e padrões de eventos

É possível usar todos os tipos e valores de dados JSON para combinar eventos. Os exemplos a seguir mostram eventos e os padrões de eventos que correspondem a eles.

Correspondência de campos

É possível combinar o valor de um campo. Considere o evento do Amazon EC2 Auto Scaling a seguir.

{ "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "", "responseElements": null } }

Para o evento anterior, é possível usar o campo "responseElements" para corresponder.

{ "source": ["aws.autoscaling"], "detail-type": ["EC2 Instance Launch Successful"], "detail": { "responseElements": [null] } }

Valor para corresponder

Considere o evento do Amazon Macie, que está truncado, a seguir.

{ "version": "0", "id": "0948ba87-d3b8-c6d4-f2da-732a1example", "detail-type": "Macie Finding", "source": "aws.macie", "account": "123456789012", "time": "2021-04-29T23:12:15Z", "region":"us-east-1", "resources": [ ], "detail": { "schemaVersion": "1.0", "id": "64b917aa-3843-014c-91d8-937ffexample", "accountId": "123456789012", "partition": "aws", "region": "us-east-1", "type": "Policy:IAMUser/S3BucketEncryptionDisabled", "title": "Encryption is disabled for the S3 bucket", "description": "Encryption is disabled for the Amazon S3 bucket. The data in the bucket isn’t encrypted using server-side encryption.", "severity": { "score": 1, "description": "Low" }, "createdAt": "2021-04-29T15:46:02Z", "updatedAt": "2021-04-29T23:12:15Z", "count": 2, . . .

O padrão de evento a seguir corresponde a qualquer evento que tenha uma pontuação de gravidade de 1 e uma contagem de 2.

{ "source": ["aws.macie"], "detail-type": ["Macie Finding"], "detail": { "severity": { "score": [1] }, "count":[2] } }