Transformación de entradas de Amazon EventBridge - Amazon EventBridge

Transformación de entradas de Amazon EventBridge

Puede personalizar el texto de un evento antes de que EventBridge transfiera la información al destino de una regla. Con el transformador de entrada de la consola o la API, se definen variables que utilizan la ruta JSON para hacer referencia a los valores del origen del evento original. El evento transformado se envía a un destino en lugar del evento original. Sin embargo, los parámetros de ruta dinámicos deben hacer referencia al evento original, no al evento transformado. Puede definir hasta 100 variables asignando a cada una un valor desde la entrada. A continuación, puede utilizar esas variables en la Plantilla de entrada como <nombre-variable>.

Para ver un tutorial sobre el uso del transformador de entrada, consulte Tutorial: Uso de transformadores de entrada para transformar eventos en EventBridge.

nota

EventBridge no admite toda la sintaxis de ruta JSON 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 (*)

Variables predefinidas

Hay variables predefinidas que puede usar sin definir una ruta JSON. Estas variables están reservadas y no se pueden crear variables con estos nombres:

  • aws.events.rule-arn — El nombre de recurso de Amazon (ARN) de la regla de EventBridge.

  • aws.events.rule-name — El nombre de la regla de EventBridge.

  • aws.events.event.ingestion-time — La hora en la que EventBridge recibió el evento. Se trata de una marca de tiempo ISO 8601. EventBridge genera esta variable y no se puede sobrescribir.

  • aws.events.event — La carga del evento original en formato JSON (sin el campo detail). Solo se puede usar como valor para un campo JSON, ya que su contenido no está oculto.

  • aws.events.event.json — La carga del evento original en formato JSON (con el campo detail). Solo se puede usar como valor para un campo JSON, ya que su contenido no está oculto.

Ejemplos de transformación de entradas

A continuación se muestra un evento de Amazon EC2 de ejemplo.

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

Cuando defina una regla en la consola, seleccione la opción Transformador de entrada en Configurar entrada. Esta opción muestra dos cuadros de texto: Ruta de entrada y Plantilla de entrada.

Ruta de entrada

El cuadro de texto Ruta de entrada se utiliza para definir variables. Utilice la ruta JSON para hacer referencia a los elementos en su evento y almacenar esos valores en variables. Por ejemplo, puede crear una ruta de entrada para hacer referencia a valores en el evento de ejemplo escribiendo lo siguiente en el primer cuadro de texto. También puede usar paréntesis e índices para obtener elementos de las matrices.

nota

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

{ "timestamp" : "$.time", "instance" : "$.detail.instance-id", "state" : "$.detail.state", "resource" : "$.resources[0]" }

Esto define cuatro variables: <timestamp>, <instance>, <state> y <resource>. Puede hacer referencia a estas variables al crear su plantilla de entrada.

nota

Los destinos de Registros de Amazon CloudWatch y de SSM no admiten el uso de Input y InputPath en sus transformadores de entrada.

Plantilla de entrada

La plantilla de entrada es una plantilla para la información que desea pasar a su destino. Puede crear una plantilla que pase una cadena o JSON al destino. Con el evento anterior y la ruta de entrada, los siguientes ejemplos de plantilla de entrada transformarán el evento en la salida de ejemplo antes de enrutarlo a un destino.

Descripción Plantilla Salida
Cadena simple
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

Cadena con comillas ocultas

"instance \"<instance>\" is in <state>"
"instance \"i-0123456789\" is in RUNNING"

Tenga en cuenta que este es el comportamiento de EventBridge. La AWS CLI aplica barras diagonales como carácter de escape y el resultado es "instance "i-0123456789" is in RUNNING".

JSON simple

{ "instance" : <instance>, "state": <state> }
{ "instance" : "i-0123456789", "state": "RUNNING" }

JSON con cadenas y variables

{ "instance" : <instance>, "state": "<state>", "instanceStatus": "instance \"<instance>\" is in <state>" }
{ "instance" : "i-0123456789", "state": "RUNNING", "instanceStatus": "instance \"i-0123456789\" is in RUNNING" }

JSON con una mezcla de variables e información estática

{ "instance" : <instance>, "state": [ 9, <state>, true ], "Transformed" : "Yes" }
{ "instance" : "i-0123456789", "state": [ 9, "RUNNING", true ], "Transformed" : "Yes" }

Inclusión de variables reservadas en JSON

{ "instance" : <instance>, "state": <state>, "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }
{ "instance" : "i-0123456789", "state": "RUNNING", "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }

Inclusión de variables reservadas en una cadena

"<aws.events.rule-name> triggered"
"example triggered"

Grupo de registro de Amazon CloudWatch

{ "timestamp" : <timestamp>, "message": "instance \"<instance>\" is in <state>" }
{ "timestamp" : 2015-11-11T21:29:54Z, "message": "instance "i-0123456789" is in RUNNING }

Transformación de entradas mediante la API de EventBridge

Para obtener información y ejemplos sobre el uso de la API de EventBridge para transformar la entrada, consulte Usar el transformador de entrada para extraer datos de un evento y especificar esos datos en el destino.

Transformación de entradas mediante AWS CloudFormation

Para obtener información sobre el uso de AWS CloudFormation para transformar la entrada, consulte AWS::Events::Rule InputTransformer.

Problemas comunes con la transformación de entradas

Estos son algunos problemas comunes cuando se transforma la entrada en EventBridge:

  • Para cadenas, se requieren comillas.

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

  • Si especifica una variable que coincida con una ruta JSON que no existe en el evento, dicha variable no se crea ni aparece en la salida.

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

  • EventBridge no oculta valores extraídos por la ruta de entrada al rellenar la plantilla de entrada para un destino.

  • Si una ruta JSON hace referencia a un objeto o matriz JSON, pero se hace referencia a la variable en una cadena, EventBridge elimina las comillas internas para garantizar la validez de la cadena. Por ejemplo, en el caso de una variable <detail> apuntada a $.detail, "El detalle es<detail>", EventBridge eliminaría las comillas del objeto.

    Por lo tanto, si quiere generar un objeto JSON basado en una única variable de ruta JSON, debe colocarlo como clave. En este ejemplo, {"detail": <detail>}.

  • No se requieren comillas para las variables que representan cadenas. Están permitidas, pero EventBridge 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 tenga un formato JSON válido. EventBridge no añade comillas a las variables que representan objetos o matrices JSON. No añada comillas a las variables que representan objetos o matrices JSON.

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

    { "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }

    El resultado es un formato JSON válido con las comillas adecuadas:

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Para la salida de texto (que no sea JSON) como cadenas de varias líneas, escriba cada línea independiente de la plantilla de entrada entre comillas dobles.

    Por ejemplo, si quisiera que el siguiente patrón de eventos coincidiera con eventos para resultados de Amazon Inspector:

    { "detail": { "severity": ["HIGH"], "status": ["ACTIVE"] }, "detail-type": ["Inspector2 Finding"], "source": ["inspector2"] }

    Y usando la siguiente ruta de entrada:

    { "account": "$.detail.awsAccountId", "ami": "$.detail.resources[0].details.awsEc2Instance.imageId", "arn": "$.detail.findingArn", "description": "$.detail.description", "instance": "$.detail.resources[0].id", "platform": "$.detail.resources[0].details.awsEc2Instance.platform", "region": "$.detail.resources[0].region", "severity": "$.detail.severity", "time": "$.time", "title": "$.detail.title", "type": "$.detail.type" }

    Podría usar la siguiente plantilla de entrada para generar una salida de cadena de varias líneas:

    "<severity> severity finding <title>" "Description: <description>" "ARN: \"<arn>\"" "Type: <type>" "AWS Account: <account>" "Region: <region>" "EC2 Instance: <instance>" "Platform: <platform>" "AMI: <ami>"