Filtrado de contenido en los 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.

Filtrado de contenido en los patrones de EventBridge eventos de Amazon

Amazon EventBridge admite el filtrado declarativo de contenido mediante patrones de eventos. Mediante el filtrado de contenido, puede crear patrones de eventos complejos que solo coinciden con eventos bajo condiciones muy específicas. Por ejemplo, puede crear un patrón de eventos que coincida con un evento cuando:

  • Un campo del evento está dentro de un intervalo numérico específico.

  • El evento proviene de una dirección IP específica.

  • No existe un campo específico en el JSON del evento.

importante

En EventBridge, es posible crear reglas que pueden provocar higher-than-expected cargos y restricciones. 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.

Coincidencia de prefijos

Puede hacer coincidir un evento dependiendo del prefijo de un valor en el origen del evento. Puede utilizar la coincidencia de prefijos para los valores de cadena.

Por ejemplo, el siguiente patrón de eventos coincidiría con cualquier evento en el que el campo "time" comenzara con "2017-10-02" como "time": "2017-10-02T18:43:48Z".

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

El prefijo coincide ignorando mayúsculas y minúsculas

También puede hacer coincidir el valor de un prefijo independientemente de las mayúsculas y minúsculas de los caracteres por los que comience un valor, utilizándolo equals-ignore-case junto con prefix.

Por ejemplo, el siguiente patrón de eventos coincidiría con cualquier evento en el que el service campo comience con la cadena de caracteresEventB, pero también EVENTB coincidiría con cualquier otro tipo de mayúscula de esos caracteres. eventb

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

Coincidencia de sufijos

Puede hacer coincidir un evento dependiendo del sufijo de un valor en el origen del evento. Puede utilizar la coincidencia de sufijos para los valores de cadena.

Por ejemplo, el siguiente patrón de eventos coincidiría con cualquier evento en el que el campo "FileName" terminara con la extensión de archivo .png.

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

El sufijo coincide sin incluir mayúsculas y minúsculas

También puede hacer coincidir el valor de un sufijo independientemente de las mayúsculas y minúsculas de los caracteres con los que termine un valor, utilizándolo equals-ignore-case junto con suffix.

Por ejemplo, el siguiente patrón de eventos coincidiría con cualquier evento en el que el FileName campo termine con la cadena de caracteres.png, pero también con cualquier .PNG otro tipo de mayúsculas de esos caracteres.

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

Coincidencia "anything-but"

La coincidencia anything-but coincide con cualquier cosa excepto lo que se proporciona en la regla.

Puede utilizar la coincidencia anything-but con cadenas y valores numéricos, incluidas listas que contienen solo cadenas o solo números.

El siguiente patrón de eventos muestra la coincidencia anything-but con cadenas y números.

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

El siguiente patrón de eventos muestra la coincidencia anything-but con una lista de cadenas.

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

El siguiente patrón de eventos muestra la coincidencia anything-but con una lista de números.

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

Cualquier cosa, excepto coincidir pero ignorando mayúsculas y minúsculas

También se puede utilizar equals-ignore-case junto conanything-but, para hacer coincidir los valores de las cadenas independientemente de las mayúsculas y minúsculas de los caracteres.

El siguiente patrón de eventos coincide con state los campos que contienen la cadena «inicialización», pero también «inicialización», «inicialización» o cualquier otro uso de mayúsculas de esos caracteres.

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

También puedes usarlo equals-ignore-case junto con anything-but para compararlo con una lista de valores:

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

Cualquier cosa, excepto los prefijos

El siguiente patrón de eventos muestra la coincidencia anything-but que coincide con cualquier evento que no tenga el prefijo "init" en el campo "state".

nota

La coincidencia anything-but solo funciona con prefijos individuales, no con una lista.

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

Cualquier cosa menos coincidir en los sufijos

Se puede utilizar junto con para hacer coincidir suffix los valores de las cadenas independientemente de anything-but las mayúsculas y minúsculas de los caracteres.

nota

Todo lo que no sea coincidir solo funciona con un único sufijo, no con una lista.

El siguiente patrón de eventos coincide con todos los valores del FileName campo que terminan en. .txt

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

Coincidencia numérica

La coincidencia numérica funciona con valores que son números JSON. Está limitada a valores entre -5.0e9 y +5.0e9 inclusive, con 15 dígitos de precisión o seis dígitos a la derecha del punto decimal.

A continuación, se muestra la coincidencia numérica de un patrón de eventos que solo coincide con los eventos que son verdaderos en todos los campos.

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

Coincidencia de direcciones IP

Puede utilizar la coincidencia de direcciones IP para direcciones IPv4 e IPv6. El siguiente patrón de eventos muestra las direcciones IP que coinciden con las direcciones IP que comienzan con 10.0.0 y terminan con un número entre 0 y 255.

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

Coincidencia exists

La coincidencia exists funciona en presencia o ausencia de un campo en la JSON del evento.

La coincidencia exists solo funciona en nodos secundarios. No funciona en nodos intermedios.

El siguiente patrón de eventos coincide con cualquier evento que tenga un campo detail.state.

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

El patrón de eventos precedente coincide con el siguiente evento.

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

El patrón de eventos anterior NO coincide con el evento siguiente porque no tiene un 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 } } }

E: quals-ignore-case coincidencia.

La quals-ignore-case coincidencia E funciona con valores de cadena independientemente de las mayúsculas y minúsculas.

El siguiente patrón de eventos coincide con cualquier evento que tenga un campo detail-type que coincida con la cadena especificada, independientemente de las mayúsculas y minúsculas.

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

El patrón de eventos precedente coincide con el siguiente evento.

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

Coincidencia con comodines

Puede utilizar el carácter comodín (*) para hacer coincidir los valores de cadena en patrones de eventos.

nota

Actualmente, el carácter comodín solo se admite en las reglas del bus de eventos.

Consideraciones a la hora de utilizar caracteres comodín en los patrones de eventos:

  • Puede especificar cualquier número de caracteres comodín en un valor de cadena determinado; sin embargo, no se admiten caracteres comodín consecutivos.

  • EventBridge admite el uso del carácter de barra invertida (\) para especificar los caracteres literales * y\ en los filtros comodín:

    • La cadena \* representa el carácter * literal

    • La cadena \\ representa el carácter \ literal

    No se admite el uso de la barra invertida para escapar de otros caracteres.

Complejidad de caracteres comodín y patrones de eventos

Existe un límite en cuanto a la complejidad de una regla que utilice caracteres comodín. Si una regla es demasiado compleja, EventBridge devuelve un InvalidEventPatternException al intentar crearla. Si la regla genera un error de este tipo, considere la posibilidad de utilizar las siguientes instrucciones para reducir la complejidad del patrón de eventos:

  • Reduzca el número de caracteres comodín utilizados

    Utilice caracteres comodín solo cuando realmente necesite hacer coincidir varios valores posibles. Por ejemplo, considere el siguiente patrón de eventos, en el que desea hacer coincidir los buses de evento de la misma región:

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

    En el caso anterior, muchas de las secciones de la ARN se basarán directamente en la región en la que residan los buses de evento. Por lo tanto, si utiliza la región us-east-1, el siguiente ejemplo podría ser un patrón menos complejo que aún coincida con los valores deseados:

    { "EventBusArn": [ { "wildcard": "arn:aws:events:us-east-1:*:event-bus/*" } ] }
  • Reduzca las secuencias de caracteres que se repiten después de un carácter comodín

    Si la misma secuencia de caracteres aparece varias veces después de usar un comodín, aumenta la complejidad del procesamiento del patrón de eventos. Rediseñe el patrón de eventos para minimizar las secuencias repetidas. Por ejemplo, considere el siguiente ejemplo, que coincide con el nombre de archivo doc.txt de cualquier usuario:

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

    Si supiera que el archivo doc.txt solo aparecería en la ruta especificada, podría reducir la secuencia de caracteres repetidos de la siguiente manera:

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

Ejemplo complejo con coincidencia múltiple

Puede combinar varias reglas de coincidencia en un patrón de eventos más complejo. Por ejemplo, la siguiente regla combina los patrones de eventos anything-but y 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

Al crear patrones de eventos, si incluye una clave más de una vez, la última referencia será la que se utilice para evaluar los eventos. Por ejemplo, para el siguiente patrón:

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

solo se tendrá en cuenta { "anything-but": "us-east" } a la hora de evaluar la location.

Ejemplo complejo con coincidencia $or

También puede crear patrones de eventos complejos que comprueben si alguno de los valores de los campos coinciden en varios campos. Utilice $or para crear un patrón de eventos que coincida si alguno de los valores de varios campos coincide.

Tenga en cuenta que puede incluir otros tipos de filtros, como coincidencia numérica y matrices, en la coincidencia de patrones para los campos individuales del constructo $or.

El siguiente patrón de eventos coincide si se cumple alguna de las siguientes condiciones:

  • El campo c-count es mayor que 0 o menor o igual que 5.

  • El campo d-count tiene menos de 10.

  • El campo x-limit es igual a 3.018e2.

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

Las API que aceptan un patrón de eventos (comoPutRule, CreateArchive, UpdateArchive y TestEventPattern) arrojarán un valor InvalidEventPatternException si el uso de $or da lugar a más de 1000 combinaciones de reglas.

Para determinar el número de combinaciones de reglas en un patrón de eventos, multiplique el número total de argumentos de cada matriz $or del patrón de eventos. Por ejemplo, el patrón anterior contiene una sola matriz $or con tres argumentos, por lo que el número total de combinaciones de reglas también es tres. Si agrega otra matriz $or con dos argumentos, el total de combinaciones de reglas sería seis.