Transformación EventBridge de entradas 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.

Transformación EventBridge de entradas de Amazon Pipes

Amazon EventBridge Pipes admite transformadores de entrada opcionales al pasar datos al enriquecimiento y al destino. Puede utilizar transformadores de entrada para cambiar la forma de la carga útil de entrada del JSON evento y adaptarla a las necesidades del servicio de enriquecimiento o de destino. Para Amazon API Gateway y API los destinos, así es como adaptas el evento de entrada al RESTful modelo de tuAPI. Los transformadores de entrada se modelan como un parámetro InputTemplate. Pueden ser texto libre, una JSON ruta a la carga útil del evento o un JSON objeto que incluya JSON rutas en línea a la carga útil del evento. Para el enriquecimiento, la carga del evento proviene del origen. En el caso de los destinos, la carga del evento es la que se devuelve desde el enriquecimiento, si hay alguna configurada en la canalización. Además de los datos específicos del servicio en la carga del evento, puede usar variables reservadas en su InputTemplate para hacer referencia a datos para la canalización.

Para acceder a los elementos de una matriz, use la notación entre corchetes.

nota

EventBridge no admite toda la sintaxis de JSON Path y la evalúa en tiempo de ejecución. La sintaxis admitida incluye:

  • notación de puntos (por ejemplo, $.detail)

  • guiones

  • guiones bajos

  • Caracteres alfanuméricos

  • índices de matrices

  • caracteres comodín (*)

Los siguientes son ejemplos de InputTemplate parámetros que hacen referencia a una carga útil de SQS eventos de Amazon:

Cadena estática

InputTemplate: "Hello, sender"

JSONRuta

InputTemplate: <$.attributes.SenderId>

Cadena dinámica

InputTemplate: "Hello, <$.attributes.SenderId>"

Estático JSON

InputTemplate: > { "key1": "value1", "key2": "value2", "key3": "value3", }

Dinámico JSON

InputTemplate: > { "key1": "value1" "key2": <$.body.key>, "d": <aws.pipes.event.ingestion-time> }

Uso de la notación entre corchetes para acceder a los elementos de una matriz:

InputTemplate: > { "key1": "value1" "key2": <$.body.Records[3]>, "d": <aws.pipes.event.ingestion-time> }
nota

EventBridge reemplaza los transformadores de entrada en tiempo de ejecución para garantizar una JSON salida válida. Por este motivo, coloque comillas alrededor de las variables que hagan referencia a los parámetros de JSON ruta, pero no ponga comillas alrededor de las variables que hagan referencia a JSON objetos o matrices.

Variables reservadas

Las plantillas de entrada pueden utilizar las siguientes variables reservadas:

  • <aws.pipes.pipe-arn>— El nombre del recurso de Amazon (ARN) de la tubería.

  • <aws.pipes.pipe-name>: el nombre de la canalización.

  • <aws.pipes.source-arn>— El origen ARN del evento de la tubería.

  • <aws.pipes.enrichment-arn>— El ARN del enriquecimiento de la pipa.

  • <aws.pipes.target-arn>— El ARN del objetivo de la tubería.

  • <aws.pipes.event.ingestion-time>: la hora a la que el transformador de entrada recibió el evento. Esta es una marca de tiempo ISO 8601. Esta hora es diferente para el transformador de entrada de enriquecimiento y el transformador de entrada de destino, según el momento en que el enriquecimiento haya completado el procesamiento del evento.

  • <aws.pipes.event>: el evento recibido pro el transformador de entrada.

    En el caso de un transformador de entrada de enriquecimiento, este es el evento del origen. Contiene la carga original del origen, además de metadatos específicos de los servicios adicionales. Consulte los temas en Fuentes de Amazon EventBridge Pipes para obtener ejemplos específicos de este servicio.

    En el caso de un transformador de entrada de destino, este es el evento devuelto por el enriquecimiento, si hay alguno configurado, sin metadatos adicionales. Como tal, una carga útil devuelta por el enriquecimiento puede no ser. JSON Si no se configura ningún enriquecimiento en la canalización, se trata del evento del origen con los metadatos.

  • <aws.pipes.event.json>— Igual queaws.pipes.event, pero la variable solo tiene un valor si lo es la carga útil original, ya sea de la fuente o devuelta por el enriquecimiento. JSON Si la canalización tiene un campo codificado, como el SQS body campo de Amazon o el de Kinesisdata, esos campos se decodifican y se convierten en válidos. JSON Como no se escapa, la variable solo se puede usar como valor para un JSON campo. Para obtener más información, consulte Análisis implícito de datos del cuerpo.

Ejemplos de transformación de entrada

El siguiente es un ejemplo de un EC2 evento de Amazon que podemos usar como nuestro evento de muestra.

{ "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-0123456789", "state": "RUNNING" } }

Usemos lo siguiente JSON como nuestro transformador.

{ "instance" : <$.detail.instance-id>, "state": <$.detail.state>, "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }

Se generará la siguiente salida:

{ "instance" : "i-0123456789", "state": "RUNNING", "pipeArn" : "arn:aws:pipe:us-east-1:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }

Análisis implícito de datos del cuerpo

Los siguientes campos de la carga útil entrante pueden estar en modo de JSON escape, como el objeto de Amazon, o codificados en base64, como el SQS body objeto de Kinesis. data Tanto para el filtrado como para la transformación de entradas, EventBridge transforma estos campos en campos válidos para que se JSON pueda hacer referencia directamente a los subvalores. Por ejemplo, <$.data.someKey> para Kinesis.

Para que el destino reciba la carga original sin ningún metadato adicional, utilice un transformador de entrada con estos datos del cuerpo, específicos del origen. Por ejemplo, <$.body> para Amazon SQS o <$.data> Kinesis. Si la carga útil original es una JSON cadena válida (por ejemplo{"key": "value"}), el uso del transformador de entrada con datos del cuerpo específicos de la fuente hará que se eliminen las comillas de la carga útil de origen original. Por ejemplo, {"key": "value"} se convertirá en "{key: value}" cuando se entregue al destino. Si su destino requiere JSON cargas útiles válidas (por ejemplo, EventBridge Lambda o Step Functions), se producirá un error en la entrega. Para que el destino reciba los datos de origen originales sin generar datos no válidosJSON, inserte el transformador de entrada de los datos del cuerpo de la fuente. JSON Por ejemplo, {"data": <$.data>}.

El análisis del cuerpo implícito también se puede utilizar para rellenar dinámicamente los valores de la mayoría de los parámetros de enriquecimiento o de destino de la canalización. Para obtener más información, consulte Parámetros de ruta dinámicos

nota

Si la carga útil original es válidaJSON, este campo contendrá los datos sin escape ni codificados en base64. JSON Sin embargo, si la carga útil no es válidaJSON, se EventBridge codifica en base64 para los campos que se indican a continuación, con la excepción de Amazon. SQS

  • Active MQdata

  • Kinesisdata

  • Amazon MSKkey y value

  • Rabbit MQ — data

  • Apache Kafka autoadministrado;key y value

  • Amazon SQSbody

Problemas comunes con la transformación de entradas

Estos son algunos de los problemas más comunes al transformar la entrada en EventBridge tuberías:

  • Para cadenas, se requieren comillas.

  • No hay validación al crear la JSON ruta para la plantilla.

  • Si especificas una variable para que coincida con una JSON ruta que no existe en el evento, esa variable no se crea y no aparecerá en la salida.

  • JSONpropiedades como aws.pipes.event.json estas solo se pueden usar como el valor de un JSON campo, no en línea en otras cadenas.

  • EventBridge no escapa a los valores extraídos por la ruta de entrada al rellenar la plantilla de entrada de un objetivo.

  • Si una JSON ruta hace referencia a un JSON objeto o matriz, pero se hace referencia a la variable en una cadena, EventBridge elimina las comillas internas para garantizar que la cadena sea válida. Por ejemplo, si «El cuerpo es <$.body>», se EventBridge eliminarían las comillas del objeto.

    Por lo tanto, si desea generar un JSON objeto en función de una única variable de JSON ruta, debe colocarlo como clave. En este ejemplo, {"body": <$.body>}.

  • No se requieren comillas para las variables que representan cadenas. Están permitidas, pero EventBridge Pipes añade automáticamente comillas a los valores de las variables de cadena durante la transformación, para garantizar que el resultado de la transformación sea válidoJSON. EventBridge Pipes no añade comillas a las variables que representan JSON objetos o matrices. No añada comillas a las variables que representen JSON objetos o matrices.

    Por ejemplo, la siguiente plantilla de entrada incluye variables que representan tanto cadenas como JSON objetos:

    { "pipeArn" : <aws.pipes.pipe-arn>, "pipeName" : <aws.pipes.pipe-name>, "originalEvent" : <aws.pipes.event.json> }

    El resultado es válido JSON con la cotización adecuada:

    { "pipeArn" : "arn:aws:events:us-east-2:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Para los objetivos o enriquecimientos de Lambda o Step Functions, los lotes se entregan al destino como JSON matrices, incluso si el tamaño del lote es 1. Sin embargo, los transformadores de entrada se seguirán aplicando a los registros individuales de la JSON matriz, no a la matriz en su conjunto. Para obtener más información, consulte Procesamiento por lotes y simultaneidad de Amazon EventBridge Pipes.