Transformation EventBridge des entrées Amazon Pipes - 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 EventBridge des entrées Amazon Pipes

Amazon EventBridge Pipes prend en charge les transformateurs d'entrée facultatifs lors du transfert de données à l'enrichissement et à la cible. Vous pouvez utiliser des transformateurs d'entrée pour remodeler la charge utile d'entrée des JSON événements afin de répondre aux besoins du service d'enrichissement ou du service cible. Pour Amazon API Gateway et les API destinations, voici comment vous adaptez l'événement d'entrée au RESTful modèle de votreAPI. Les transformateurs d’entrée sont modélisés sous forme de paramètre InputTemplate. Il peut s'agir de texte libre, d'un JSON chemin vers la charge utile de l'événement ou d'un JSON objet incluant des JSON chemins intégrés vers la charge utile de l'événement. Pour l’enrichissement, la charge utile de l’événement provient de la source. Pour les cibles, la charge utile de l’événement correspond à ce qui est renvoyé par l’enrichissement, si une telle charge est configurée sur le canal. Outre les données propres au service incluses dans la charge utile de l’événement, vous pouvez utiliser des variables réservées dans InputTemplate pour référencer les données de votre canal.

Pour accéder aux éléments d’un tableau, utilisez la notation entre crochets.

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

Voici des exemples de InputTemplate paramètres faisant référence à la charge utile d'un SQS événement Amazon :

Chaîne statique

InputTemplate: "Hello, sender"

JSONParcours

InputTemplate: <$.attributes.SenderId>

Chaîne dynamique

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

Statique JSON

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

Dynamique JSON

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

Utilisation de la notation entre crochets pour accéder à un élément dans un tableau :

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

Variables réservées

Les modèles d’entrée peuvent utiliser les variables réservées suivantes :

  • <aws.pipes.pipe-arn>— Le nom de ressource Amazon (ARN) du canal.

  • <aws.pipes.pipe-name> : nom du canal.

  • <aws.pipes.source-arn>— La source ARN de l'événement du canal.

  • <aws.pipes.enrichment-arn>— Le ARN de l'enrichissement de la tuyauterie.

  • <aws.pipes.target-arn>— Celui ARN de la cible du tuyau.

  • <aws.pipes.event.ingestion-time> : heure à laquelle l’événement a été reçu par le transformateur d’entrée. Il s'agit d'un horodatage ISO 8601. Cette durée est différente pour le transformateur d’entrée de l’enrichissement et le transformateur d’entrée de la cible, selon le moment où l’enrichissement a terminé de traiter l’événement.

  • <aws.pipes.event> : événement tel qu’il a été reçu par le transformateur d’entrée.

    Pour un transformateur d’entrée d’enrichissement, il s’agit de l’événement provenant de la source. Il contient la charge utile d’origine de la source, ainsi que des métadonnées supplémentaires propres au service. Pour obtenir des exemples propres à un service, consultez Sources d'Amazon EventBridge Pipes.

    Pour un transformateur d’entrée de cible, il s’agit de l’événement renvoyé par l’enrichissement, s’il est configuré, sans métadonnées supplémentaires. En tant que telle, une charge utile renvoyée par un enrichissement peut ne pas être nulle. JSON Si aucun enrichissement n’est configuré sur le canal, il s’agit de l’événement provenant de la source avec des métadonnées.

  • <aws.pipes.event.json>— Identiqueaws.pipes.event, mais la variable n'a de valeur que si la charge utile d'origine, provenant de la source ou renvoyée par l'enrichissement, l'estJSON. Si le canal contient un champ codé, tel que le SQS body champ Amazon ou le champ Kinesisdata, ces champs sont décodés et convertis en champs valides. JSON Comme elle n'est pas échappée, la variable ne peut être utilisée que comme valeur pour un JSON champ. Pour de plus amples informations, veuillez consulter Analyse implicite des données de corps.

Exemple de transformation d’entrée

Voici un exemple d'EC2événement Amazon que nous pouvons utiliser comme exemple d'événement.

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

Utilisons ce qui suit JSON comme transformateur.

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

La sortie générée est la suivante :

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

Analyse implicite des données de corps

Les champs suivants de la charge utile entrante peuvent être JSON échappés, tels que l'SQSbodyobjet Amazon, ou codés en base64, comme l'objet Kinesis. data Pour le filtrage et la transformation des entrées, EventBridge transforme ces champs en champs valides JSON afin que les sous-valeurs puissent être référencées directement. Par exemple, <$.data.someKey> pour Kinesis.

Pour que la cible reçoive la charge utile d’origine sans aucune métadonnée supplémentaire, utilisez un transformateur d’entrée avec ces données de corps, propres à la source. Par exemple, <$.body> pour Amazon SQS ou <$.data> pour Kinesis. Si la charge utile d'origine est une JSON chaîne valide (par exemple{"key": "value"}), l'utilisation du transformateur d'entrée avec des données corporelles spécifiques à la source entraînera la suppression des guillemets contenus dans la charge utile source d'origine. Par exemple, {"key": "value"} deviendra "{key: value}" une fois livré à la cible. Si votre cible a besoin de JSON charges utiles valides (par exemple, EventBridge Lambda ou Step Functions), cela entraînera un échec de livraison. Pour que la cible reçoive les données source d'origine sans générer de données invalidesJSON, insérez le transformateur d'entrée des données du corps sourceJSON. Par exemple, {"data": <$.data>}.

L’analyse implicite du corps peut également être utilisée pour renseigner dynamiquement les valeurs de la plupart des paramètres de cible ou d’enrichissement du canal. Pour plus d’informations, consultez Paramètres de chemin dynamiques.

Note

Si la charge utile d'origine est valideJSON, ce champ contiendra la charge non échappée, non codée en base64. JSON Toutefois, si la charge utile n'est pas valideJSON, les champs répertoriés ci-dessous sont EventBridge codés en base64, à l'exception d'Amazon. SQS

  • Active MQ : data

  • Kinesis : data

  • Amazon MSKkey et value

  • Rabbit MQ : data

  • Apache Kafka autogéré : key et value

  • Amazon SQSbody

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

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

  • 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.pipes.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, « Body is <$.body> » 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, {"body": <$.body>}.

  • Les guillemets ne sont pas obligatoires pour les variables qui représentent des chaînes. Ils sont autorisés, mais EventBridge Pipes ajoute 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 Pipes 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 :

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

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

    { "pipeArn" : "arn:aws:events:us-east-2:123456789012:pipe/example", "pipeName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Pour les enrichissements ou les cibles Lambda ou Step Functions, les lots sont livrés à la cible sous forme de JSON tableaux, même si la taille du lot est de 1. Cependant, les transformateurs d'entrée seront toujours appliqués aux enregistrements individuels du JSON réseau, et non au tableau dans son ensemble. Pour de plus amples informations, veuillez consulter Traitement par lots et simultanéité d'Amazon EventBridge Pipes.