Operadores de comparación para su uso en patrones de eventos en Amazon EventBridge - 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.

Operadores de comparación para su uso en patrones de eventos en Amazon EventBridge

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 Soporte para buses de eventos Soporte para canalizaciones

Y

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

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

Anything-but El valor de Estado es cualquier valor que no sea “inicializando”.

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

Anything-but (comienza por)

El valor de Región no se encuentra en EE. UU.

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

No

Anything-but (termina con)

El valor de FileName no termina con la extensión .png.

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

No

Anything-but (omitir mayúsculas y minúsculas)

El estado es cualquier valor que no sea “inicializando” o cualquier otra variación entre mayúsculas y minúsculas, como “INICIALIZANDO”.

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

No

Anything-but con un carácter comodín

El valor de FileName no es una ruta de archivo que incluya /lib/.

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

No

Comienza por

El valor de Región se encuentra en EE. UU.

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

Comienza por (omitir mayúsculas y minúsculas)

El nombre del servicio comienza por las letras “eventb”, independientemente del uso de las mayúsculas y minúsculas.

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

Vacío

El valor de 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 la extensión .png

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

Termina con (omitir 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 (Nombre de producto) existe

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

No existe

El valor de ProductName (Nombre de producto) 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)

El valor de PaymentType (Tipo de pago) es “Credit” (Crédito) o “Debit” (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" } ]

No

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 y omite 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, utilizando equals-ignore-case junto con prefix.

Por ejemplo, el siguiente patrón de eventos coincidiría con cualquier evento en el que el campo service comenzara por la cadena de caracteres EventB, pero también coincidiría con EVENTB, eventb o cualquier otra combinación de mayúsculas y minúsculas de esos caracteres.

{ "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 y omite 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, utilizando equals-ignore-case junto con suffix.

Por ejemplo, el siguiente patrón de eventos coincidiría con cualquier evento en el que el campo FileName terminara con la cadena de caracteres .png, pero también .PNG o cualquier otra combinación de mayúsculas y minú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 ] } ] } }

Coincidencia anything-but y omite mayúsculas y minúsculas

También se puede utilizar equals-ignore-case junto con anything-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 los campos state que no contienen la cadena “inicializando”, “INICIALIZANDO”, “Inicializando” o cualquier otra combinación de mayúsculas y minúsculas de esos caracteres.

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

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

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

Coincidencia anything-but en prefijos

Puede usar prefix junto con anything-but para hacer coincidir valores de cadena que no comiencen por el valor especificado. Esto incluye valores únicos o una lista de valores.

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

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

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

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

Coincidencia anything-but en sufijos

Puede usar suffix junto con anything-but para hacer coincidir valores de cadena que no terminen con el valor especificado. Esto incluye valores únicos o una lista de valores.

El siguiente patrón de eventos coincide con cualquier valor del campo FileName que no termine con .txt.

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

El siguiente patrón de eventos muestra la coincidencia anything-but con una lista de valores de sufijos. Este patrón de eventos coincide con cualquier valor del campo FileName que no termine con .txt o .rtf.

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

Coincidencia anything-but con caracteres comodín

Puede utilizar el carácter comodín (*) en los valores que especifique para la coincidencia anything-but. Esto incluye valores únicos o una lista de valores.

El siguiente patrón de eventos coincide con cualquier valor del campo FileName que no contenga /lib/.

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

El siguiente patrón de eventos muestra la coincidencia anything-but con una lista de valores que incluye caracteres comodín. Este patrón de eventos coincide con cualquier valor del campo FileName que no contenga /lib/ o /bin/.

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

Para obtener más información, consulte Coincidencia con comodines.

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

Coincidencia Equals-ignore-case

La coincidencia Equals-ignore-case 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 una InvalidEventPatternException al intentar crear la regla. 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 varios criterios 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.