Patrones de EventBridge eventos de Amazon - Amazon EventBridge

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Patrones de EventBridge eventos de Amazon

Los patrones de eventos tienen la misma estructura que los eventos con los que coinciden. Las reglas utilizan patrones de eventos para seleccionar eventos y dirigirlos a los destinos. Un patrón de eventos coincide con un evento o no lo hace.

importante

En EventBridge, es posible crear reglas que pueden provocar higher-than-expected cargos y estrangulamientos. Por ejemplo, puede crear inadvertidamente una regla que conduzca a un bucle infinito, en el que una regla se active de forma recursiva sin fin. Imagine que creó una regla puede detectar que las ACL han cambiado en un bucket de Amazon S3 y activar software para cambiarlas al estado deseado. Si la regla no se ha escrito minuciosamente, un nuevo cambio de las ACL vuelve a activar la regla, lo que crea un bucle infinito.

Para obtener orientación sobre cómo escribir reglas y patrones de eventos precisos para minimizar estos resultados inesperados, consulte Prácticas recomendadas a la hora de definir reglas de Amazon EventBridge y Mejores prácticas a la hora de definir los patrones de EventBridge eventos de Amazon.

En el siguiente vídeo se repasan los aspectos básicos de los patrones de eventos:

En el siguiente evento se muestra un evento de AWS de 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" } }

El siguiente patrón de eventos procesa todos los eventos instance-termination de Amazon EC2.

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

Creación de patrones de eventos

Para crear un patrón de eventos, especifique los campos con los que desea que coincida el patrón del evento. Especifique únicamente los campos que utilice para la coincidencia. El ejemplo de patrón de eventos anterior solo proporciona valores para tres campos: los campos de nivel superior "source" y"detail-type", y el "state" campo dentro del "detail" campo objeto. EventBridge ignora todos los demás campos del evento al aplicar la regla.

Para que un patrón de eventos coincida con un evento, el evento debe contener todos los nombres de campos enumerados en el patrón. Los nombres de los campos también deben aparecer en el evento con la misma estructura de anidación.

Al escribir patrones de evento para buscar eventos, puede utilizar la API de TestEventPattern o el comando de la CLI test-event-pattern para probar si el patrón coincide con los eventos correctos. Para obtener más información, consulte TestEventPattern.

Coincidencias de valores de eventos

En un patrón de eventos, el valor que debe coincidir está en una matriz JSON, entre corchetes ("[", "]") para que pueda proporcionar varios valores. Por ejemplo, para hacer coincidir los eventos de Amazon EC2 o AWS Fargate, puede utilizar el siguiente patrón, que hace coincidir eventos en los que el valor del campo "source" es "aws.ec2" o "aws.fargate".

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

Consideraciones sobre la creación de patrones de eventos

A continuación, se muestran algunos aspectos que debe considerar a la hora de crear sus patrones de eventos:

  • EventBridge ignora los campos del evento que no están incluidos en el patrón del evento. El efecto es que hay un comodín "*": "*" para los campos que no aparecen en el patrón de eventos.

  • Los valores que coinciden con patrones de eventos siguen las reglas JSON. Puede incluir cadenas entre comillas (“), números y palabras clave true, false y null.

  • En el caso de las cadenas, EventBridge utiliza la character-by-character coincidencia exacta sin doblar mayúsculas y minúsculas ni normalizar ninguna otra cadena.

  • En el caso de los números, EventBridge utiliza la representación de cadenas. Por ejemplo, 300, 300.0 y 3.0e2 no se consideran iguales.

  • Si se especifican varios patrones para el mismo campo JSON, EventBridge solo usa el último.

  • Tenga en cuenta que cuando EventBridge compila patrones de eventos para su uso, utiliza un punto (.) como carácter de unión.

    Esto significa que EventBridge tratará los siguientes patrones de eventos como idénticos:

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

    Y que ambos patrones de eventos coincidirán con los dos eventos siguientes:

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

    Esto describe EventBridge el comportamiento actual y no se debe confiar en él para que no cambie.

  • Los patrones de eventos que contienen campos duplicados no son válidos. Si un patrón contiene campos duplicados, EventBridge solo tiene en cuenta el valor final del campo.

    Por ejemplo, los siguientes patrones de eventos coincidirán con el mismo 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"] } }

    Y EventBridge trata los dos eventos siguientes 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

    Esto describe EventBridge el comportamiento actual y no se debe confiar en él para que no cambie.

Operaciones de comparación para su uso en patrones de eventos

A continuación, se muestra un resumen de todos los operadores de comparación disponibles en EventBridge.

Los operadores de comparación solo funcionan en los nodos secundarios, con la excepción de $or y anything-but.

Comparación Ejemplo Sintaxis de reglas

Y

El valor de Location (Ubicación) es “New York” y el de Day (Día) es “Monday”

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

Cualquier cosa, pero El estado es cualquier valor además de «inicializar».

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

Cualquier cosa, pero (comienza con)

La región no está en los EE. UU.

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

Cualquier cosa, pero (termina con)

FileName no termina con la extensión.png.

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

Cualquier cosa menos (ignore mayúsculas y minúsculas)

El estado es cualquier valor que no sea «inicializar» o cualquier otra variación entre mayúsculas y minúsculas, como «INICIALIZAR».

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

Comienza por

La región se encuentra en EE. UU.

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

Empieza por (ignora mayúsculas y minúsculas)

El nombre del servicio comienza con las letras «eventb», independientemente de las mayúsculas y minúsculas.

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

Vacío

LastName está vacío.

"LastName": [""]

Igual a

El valor de Name (Nombre) es “Alice”

"Name": [ "Alice" ]

Igual a (omitir mayúsculas y minúsculas)

El valor de Name (Nombre) es “Alice”

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

Acaba con

FileName termina con una extensión.png

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

Termina con (ignorar mayúsculas y minúsculas)

El nombre del servicio termina con las letras «tbridge» o cualquier otra variante de mayúsculas y minúsculas, como «TBRIDGE».

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

Existe

ProductName existe

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

No existe

ProductName no existe

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

No

El valor de Weather (Tiempo) es cualquier valor menos “Raining” (Lluvia)

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

Nulo

El valor de UserID (ID de usuario) es nulo

"UserID": [ null ]

Valor numérico (igual a)

El valor de Price (Precio) es 100

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

Valor numérico (rango)

El valor de Price (Precio) es superior a 10 e inferior o igual a 20

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

Or (Disyunción)

PaymentType es «crédito» o «débito»

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

O (varios campos)

El valor de Location (Ubicación) es “New York” o el de Day (Día) es “Monday”.

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

Comodín

Cualquier archivo con la extensión.png, ubicado dentro de la carpeta "dir"

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

Ejemplos de eventos y patrones de eventos

Puede usar todos los tipos de datos y valores JSON para hacer coincidir los eventos. A continuación, se muestran los eventos y los patrones de eventos que se corresponden con ellos.

Coincidencia de campo

Puede hacer coincidir el valor de un campo. Considere el siguiente evento de Amazon EC2Auto Scaling.

{ "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 el evento anterior, puede utilizar el campo "responseElements" para que coincida.

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

Coincidencia de valor

Considere el siguiente evento de Amazon Macie, que está truncado.

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

El siguiente patrón de eventos coincide con cualquier evento que tenga una puntuación de gravedad de 1 y un recuento de 2.

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