Transformation des EventBridge entrées Amazon - Amazon EventBridge

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Transformation des EventBridge entrées Amazon

Vous pouvez personnaliser le texte d'un événement avant de EventBridge transmettre les informations à la cible d'une règle. À l'aide du transformateur d'entrée de la console ou duAPI, vous définissez des variables qui utilisent le JSON chemin pour référencer les valeurs de la source d'événements d'origine. L’événement transformé est envoyé à une cible plutôt qu’à l’événement d’origine. Toutefois, les paramètres de chemin dynamiques doivent faire référence à l’événement d’origine, et non à l’événement transformé. Vous pouvez définir jusqu’à 100 variables, en attribuant à chacune une valeur à partir de l’entrée. Vous pouvez ensuite utiliser ces variables dans le modèle d'entrée sous la forme <variable-name>.

Pour obtenir un didacticiel sur l’utilisation du transformateur d’entrée, consultez Tutoriel : Utiliser des transformateurs d'entrée pour transformer des événements en EventBridge.

Note

EventBridge ne prend pas en charge toutes les syntaxes JSON Path et ne l'évalue pas lors de l'exécution. La syntaxe prise en charge inclut :

  • notation par points (par exemple, $.detail)

  • tirets

  • traits de soulignement

  • caractères alphanumériques

  • index de tableau

  • caractères génériques (*)

Variables prédéfinies

Il existe des variables prédéfinies que vous pouvez utiliser sans définir de JSON chemin. Ces variables sont réservées et vous ne pouvez pas créer de variables avec ces noms :

  • aws.events.rule-arn— Le nom de la ressource Amazon (ARN) de la EventBridge règle.

  • aws.events.rule-name— Le nom de la EventBridge règle.

  • aws.events.event.ingestion-time— L'heure à laquelle l'événement a été reçu par EventBridge. Il s'agit d'un horodatage ISO 8601. Cette variable est générée par EventBridge et ne peut pas être remplacée.

  • aws.events.event— La charge utile de l'événement d'origine sous forme JSON (sans le detail champ). Ne peut être utilisé que comme valeur pour un JSON champ, car son contenu n'est pas échappé.

  • aws.events.event.json— La charge utile complète de l'événement d'origine sous forme JSON de. (avec le detail terrain). Ne peut être utilisé que comme valeur pour un JSON champ, car son contenu n'est pas échappé.

Exemples de transformation d’entrée

Voici un exemple d'EC2événement 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" } }

Lorsque vous définissez une règle dans la console, sélectionnez l'option Transformateur d'entrée sous Configurer l'entrée. Cette option affiche deux zones de texte : une pour Chemin d'entrée et l'autre pour Modèle d'entrée.

Chemin d'entrée

Le chemin d’entrée est utilisé pour définir des variables. Utilisez JSON path pour référencer les éléments de votre événement et stockez ces valeurs dans des variables. Par exemple, vous pouvez créer un chemin d'entrée pour référencer des valeurs dans l'exemple d'événement en entrant les informations suivantes dans la première zone de texte. Vous pouvez également utiliser des crochets et des index pour obtenir des éléments à partir de tableaux.

Note

EventBridge remplace les transformateurs d'entrée lors de l'exécution pour garantir une JSON sortie valide. Pour cette raison, placez des guillemets autour des variables qui font référence à des paramètres de JSON chemin, mais ne placez pas de guillemets autour de variables faisant référence à JSON des objets ou à des tableaux.

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

Cela permet de définir quatre variables : <timestamp>, <instance>, <state> et <resource>. Vous pouvez référencer ces variables lors de la création de votre modèle d’entrée.

Note

Amazon CloudWatch Logs et SSM Targets ne prennent pas en charge l'utilisation de Input et InputPath dans leurs transformateurs d'entrée.

Modèle de saisie

Le modèle d’entrée est un modèle pour les informations que vous souhaitez transmettre à votre cible. Vous pouvez créer un modèle qui transmet soit une chaîne, soit JSON à la cible. À l'aide de l'événement précédent et du chemin d'entrée, les exemples de modèle d’entrée suivants transformeront l'événement en l’exemple de sortie suivant avant de l’acheminer vers une cible.

Description Modèle Sortie
Chaîne simple
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

Chaîne avec guillemets échappés

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

Notez qu'il s'agit du comportement de la EventBridge console. L’ AWS CLI échappe les caractères de barre oblique et le résultat est "instance "i-0123456789" is in RUNNING".

Simple JSON

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

JSONavec des chaînes et des variables

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

JSONavec un mélange de variables et d'informations statiques

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

Inclusion de variables réservées dans 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 } }

Inclut des variables réservées dans une chaîne

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

Groupe de CloudWatch journaux Amazon

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

Transformation des entrées à l'aide du EventBridge API

Pour plus d'informations sur l'utilisation de l'entrée EventBridge API pour transformer l'entrée, voir Utiliser le transformateur d'entrée pour extraire les données d'un événement et les saisir dans la cible.

Transformation des données en utilisant AWS CloudFormation

Pour plus d'informations sur l'utilisation AWS CloudFormation pour transformer les entrées, voir AWS: :Events : InputTransformer :Rule.

Problèmes courants liés à la transformation d’entrée

Voici quelques problèmes courants lors de la transformation des entrées en EventBridge :

  • Pour les chaînes, des guillemets sont requis.

  • Il n'y a aucune validation lors de la création du JSON chemin pour votre modèle.

  • Si vous spécifiez une variable correspondant à un JSON chemin qui n'existe pas dans l'événement, cette variable n'est pas créée et n'apparaîtra pas dans la sortie.

  • JSONdes propriétés telles que celles-ci ne aws.events.event.json peuvent être utilisées que comme valeur d'un JSON champ, et non en ligne dans d'autres chaînes.

  • EventBridge n'échappe pas aux valeurs extraites par Input Path, lors du remplissage du modèle d'entrée pour une cible.

  • Si un JSON chemin fait référence à un JSON objet ou à un tableau, mais que la variable est référencée dans une chaîne, EventBridge supprime tous les guillemets internes pour garantir la validité de la chaîne. Par exemple, pour une variable <detail> pointée$.detail, « Detail is <detail>» entraînerait la EventBridge suppression des guillemets de l'objet.

    Par conséquent, si vous souhaitez générer un JSON objet basé sur une variable de JSON chemin unique, vous devez le placer sous forme de clé. Dans cet exemple, {"detail": <detail>}.

  • Les guillemets ne sont pas obligatoires pour les variables qui représentent des chaînes. Ils sont autorisés, mais ajoutent EventBridge automatiquement des guillemets aux valeurs des variables de chaîne pendant la transformation, afin de garantir la validité du résultat de la transformationJSON. EventBridge n'ajoute pas de guillemets aux variables qui représentent JSON des objets ou des tableaux. N'ajoutez pas de guillemets pour les variables qui représentent JSON des objets ou des tableaux.

    Par exemple, le modèle de saisie suivant inclut des variables qui représentent à la fois des chaînes et JSON des objets :

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

    Résultat : valide JSON avec une citation appropriée :

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Pour une sortie (nonJSON) textuelle sous forme de chaînes multilignes, placez chaque ligne distincte de votre modèle de saisie entre guillemets doubles.

    Par exemple, si vous faisiez correspondre les événements de Amazon Inspector recherche au modèle d'événements suivant :

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

    Et en utilisant le chemin d'entrée suivant :

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

    Vous pouvez utiliser le modèle de saisie ci-dessous pour générer une sortie de chaîne multiligne :

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