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

Transformación EventBridge de entradas de Amazon

Puede personalizar el texto de un evento antes de EventBridge pasar la información al objetivo de una regla. Con el transformador de entrada de la consola o elAPI, se definen variables que utilizan la JSON ruta para hacer referencia a los valores de la fuente de eventos 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 <variable-name>.

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

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 (*)

Variables predefinidas

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

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

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

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

  • aws.events.event— La carga útil del evento original es JSON (sin el detail campo). Solo se puede usar como valor para un JSON campo, ya que su contenido no se escapa.

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

Ejemplos de transformación de entradas

El siguiente es un ejemplo de un EC2 evento de Amazon.

{ "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 JSON ruta para hacer referencia a los elementos de su evento y almacene 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 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.

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

Amazon CloudWatch Logs y SSM los destinos no admiten el uso de Input ni 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 la EventBridge consola. La AWS CLI aplica barras diagonales como carácter de escape y el resultado es "instance "i-0123456789" is in RUNNING".

Sencillo JSON

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

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

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

Incluir 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 CloudWatch registros de Amazon

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

Transformar la entrada mediante el EventBridge API

Para obtener información sobre cómo usar la entrada EventBridge API para transformar, consulte Usar el transformador de entrada para extraer datos de un evento e ingresarlos en el destino.

Transformar la entrada mediante AWS CloudFormation

Para obtener información sobre AWS CloudFormation cómo transformar la entrada, consulte AWS: :Events: InputTransformer :Rule.

Problemas comunes con la transformación de entradas

Estos son algunos problemas comunes al transformar la entrada en: EventBridge

  • 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.events.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, en el caso de una variable <detail> señalada <detail>como «El detalle es»$.detail, 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, {"detail": <detail>}.

  • No se requieren comillas para las variables que representan cadenas. Están permitidos, pero añaden comillas EventBridge automáticamente 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 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:

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

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

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

    Por ejemplo, si comparas los eventos de Amazon Inspector Finding con el siguiente patrón de eventos:

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

    Puede usar la siguiente plantilla de entrada para generar una salida de cadena multilínea:

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