Filtrado EventBridge de Amazon Pipes - 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 EventBridge de Amazon Pipes

Con EventBridge Pipes, puede filtrar los eventos de una fuente determinada y procesar solo un subconjunto de ellos. Este filtrado funciona de la misma manera que el filtrado en un bus de EventBridge eventos o en un mapeo de origen de eventos de Lambda, mediante patrones de eventos. Para obtener más información acerca de patrones de eventos, consulte Patrones de EventBridge eventos de Amazon.

Un objeto FilterCriteria de criterios de filtro es una estructura que consta de una lista de filtros (Filters). Cada filtro es una estructura que define un patrón de filtrado (Pattern). Un Pattern es una representación de cadenas de una regla de filtro de JSON. Un objeto FilterCriteria es similar al siguiente ejemplo:

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}" } ] }

Para mayor claridad, este es el valor del Pattern del filtro ampliado en JSON no cifrado:

{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }

Las partes principales de un objeto FilterCriteria son las propiedades de metadatos y las propiedades de datos.

  • Las propiedades de metadatos son los campos del objeto de eventos. En el ejemplo, FilterCriteria.Metadata1 hace referencia a una propiedad de metadatos.

  • Las propiedades de datos son los campos del cuerpo del evento. En el ejemplo, FilterCriteria.Data1 hace referencia a una propiedad de datos.

Por ejemplo, supongamos que su flujo de Kinesis contiene un evento como este:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }

Cuando el evento fluya por la canalización, tendrá el siguiente aspecto con el campo data codificado en base64:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987 "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" },

Las propiedades de metadatos del evento de Kinesis son cualquier campo fuera del objeto data, como partitionKey o sequenceNumber.

Las propiedades de datos del evento de Kinesis son cualquier campo dentro del objeto data, como City o Temperature.

Al filtrar para obtener coincidencias con este evento, puede usar filtros en los campos decodificados. Por ejemplo, para filtrar en partitionKey y City, usaría el siguiente filtro:

{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] }

Al crear filtros de eventos, EventBridge Pipes puede acceder al contenido del evento. Este contenido tiene un objeto JSON oculto, como el campo body de Amazon SQS, o codificado en base64, como el campo data de Kinesis. Si los datos son un objeto JSON válido, las plantillas de entrada o las rutas JSON de los parámetros de destino pueden hacer referencia al contenido directamente. Por ejemplo, si un origen de eventos de Kinesis es un objeto JSON válido, puede hacer referencia a una variable mediante <$.data.someKey>.

Al crear patrones de eventos, puede filtrar en función de los campos enviados por la API de origen y no de los campos agregados por la operación de sondeo. Los siguientes campos no se pueden usar en los patrones de eventos:

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

Campos de mensaje y datos

Cada fuente EventBridge de Pipe contiene un campo que contiene el mensaje o los datos principales. Los denominamos campos mensaje o campos datos. Estos campos son especiales porque su contenido puede tener un objeto JSON oculto o estar codificado en base64, pero cuando son objetos JSON válidos, se pueden filtrar con patrones JSON como si el cuerpo no estuviera oculto. El contenido de estos campos también se puede utilizar sin problemas en los transformadores de entrada.

Filtrar correctamente los mensajes de Amazon SQS

Si un mensaje de Amazon SQS no cumple los criterios de filtrado, lo elimina EventBridge automáticamente de la cola. No tiene que eliminar manualmente estos mensajes en Amazon SQS.

Para Amazon SQS, el body del mensaje puede ser cualquier cadena. Sin embargo, esto puede ser problemático si los FilterCriteria esperan que el formato JSON del body sea válido. El escenario inverso también es problemático: si el body del mensaje entrante está en un formato JSON válido pero los criterios de filtro esperan que el body sea una cadena sin formato, puede producirse un comportamiento no deseado.

Para evitar este problema, asegúrese de que el formato del body de los FilterCriteria coincida con el formato esperado del body de los mensajes que recibe de la cola. Antes de filtrar los mensajes, evalúa EventBridge automáticamente el formato del mensaje entrante body y el patrón de filtrado. body Si hay una discrepancia, borra el EventBridge mensaje. En la siguiente tabla se resume esta evaluación:

Formato del body del mensaje entrante Formato del body del patrón de filtro Acción resultante

Cadena sin formato

Cadena sin formato

EventBridge filtra en función de sus criterios de filtrado.

Cadena sin formato

Sin patrón de filtro para las propiedades de datos

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

Cadena sin formato

JSON válido

EventBridge elimina el mensaje.

JSON válido

Cadena sin formato

EventBridge deja caer el mensaje.

JSON válido

Sin patrón de filtro para las propiedades de datos

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

JSON válido

JSON válido

EventBridge filtra en función de sus criterios de filtrado.

Si no los incluyes body como parte de tu listaFilterCriteria, EventBridge omite esta verificación.

Filtrar correctamente mensajes de Kinesis y DynamoDB

Una vez que los criterios de filtro procesan un registro de Kinesis o DynamoDB, el iterador de flujos supera este registro. Si el registro no cumple los criterios de filtro, no tiene que eliminarlo manualmente del origen de eventos. Tras el periodo de retención, Kinesis y DynamoDB eliminan automáticamente estos registros antiguos. Si quiere que los registros se eliminen antes, consulte Changing the Data Retention Period (Cambiar el periodo de retención de datos).

Para filtrar correctamente los eventos de los orígenes de eventos de flujos, el formato JSON del campo de datos y de los criterios de filtro del campo de datos debe ser válido. (Para Kinesis, el campo de datos es data. Para DynamoDB, el campo de datos es dynamodb). Si alguno de los campos no tiene un formato JSON válido, borra EventBridge el mensaje o genera una excepción. En la siguiente tabla se resume el comportamiento específico:

Formato de los datos entrantes (data o dynamodb) Formato del patrón de filtro para las propiedades de datos Acción resultante

JSON válido

JSON válido

EventBridge filtra en función de tus criterios de filtrado.

JSON válido

Sin patrón de filtro para las propiedades de datos

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

JSON válido

No JSON

EventBridge genera una excepción en el momento de la canalización o actualización. El formato JSON del patrón de filtro de las propiedades de datos debe ser válido.

No JSON

JSON válido

EventBridge elimina el registro.

No JSON

Sin patrón de filtro para las propiedades de datos

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

No JSON

No JSON

EventBridge genera una excepción en el momento de la creación o actualización de la tubería. El formato JSON del patrón de filtro de las propiedades de datos debe ser válido.

Filtrado correcto de mensajes de Amazon Managed Streaming para Apache Kafka, Apache Kafka autoadministrado y Amazon MQ

En el caso de los orígenes de Amazon MQ, el campo de mensaje es data. En el caso de los orígenes de Apache Kafka (Amazon MSK y Apache Kafka autoadministrado), hay dos campos de mensaje: key y value.

EventBridge elimina los mensajes que no coinciden con todos los campos incluidos en el filtro. En el caso de Apache Kafka, EventBridge compila las compensaciones de los mensajes coincidentes y no coincidentes después de invocar correctamente la función. En Amazon MQ, EventBridge reconoce los mensajes coincidentes después de invocar correctamente la función y reconoce los mensajes no coincidentes al filtrarlos.

Los mensajes de Apache Kafka y Amazon MQ deben ser cadenas codificadas en UTF-8, cadenas simples o en formato JSON. Esto se debe a que EventBridge decodifica las matrices de bytes de Apache Kafka y Amazon MQ en UTF-8 antes de aplicar los criterios de filtrado. Si sus mensajes utilizan otra codificación, como UTF-16 o ASCII, o si el formato del mensaje no coincide con el formato, procesa únicamente los filtros de metadatos. FilterCriteria EventBridge En la siguiente tabla se resume el comportamiento específico:

Formato del mensaje entrante (data o key y value) Formato del patrón de filtro para las propiedades del mensaje Acción resultante

Cadena sin formato

Cadena sin formato

EventBridge filtra en función de sus criterios de filtrado.

Cadena sin formato

Sin patrón de filtro para las propiedades de datos

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

Cadena sin formato

JSON válido

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

JSON válido

Cadena sin formato

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

JSON válido

Sin patrón de filtro para las propiedades de datos

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

JSON válido

JSON válido

EventBridge filtra en función de sus criterios de filtrado.

Cadena no codificada con UTF-8

JSON, cadena sin formato o sin patrón

EventBridge filtra (solo en las demás propiedades de los metadatos) en función de sus criterios de filtrado.

Diferencias entre Lambda ESM y Pipes EventBridge

Al filtrar eventos, Lambda ESM y EventBridge Pipes funcionan generalmente de la misma manera. La principal diferencia es que el campo eventSourceKey no está presente en las cargas de ESM.