Les cibles d'événements attendent souvent une structure de charge utile différente du format standard CloudEvents 1.0 utilisé en interne par EventBridge. La transformation d'événements remodèle la charge utile avant qu'EventBridge ne l'achemine vers la cible via un flux d'événements. Vous pouvez ainsi adapter le format aux exigences de la cible sans écrire de code adaptateur.
Méthodes de transformation
Quatre méthodes déterminent le contenu reçu par la cible :
| Méthode | Comportement | Cas d'utilisation |
|---|---|---|
| Événement complet | Transmet la charge utile CloudEvents complète sans modification | La cible accepte directement le format CloudEvents |
| Événement partiel | Extrait des champs spécifiques à l'aide de JSONPath | La cible n'a besoin que d'un sous-ensemble de l'événement |
| Constante | Envoie une valeur fixe, en ignorant le contenu de l'événement | L'événement sert uniquement de déclencheur ; sa charge utile est indifférente |
| Modèle | Extrait des champs dans des variables, puis compose une sortie personnalisée | La cible attend une structure de charge utile spécifique |
Tous les exemples de cette rubrique utilisent l'événement suivant comme entrée :
{
"id": "7adc8c1a-645d-4476-bdef-5d6fb57f****",
"source": "acs.oss",
"specversion": "1.0",
"type": "oss:ObjectCreated:PostObject",
"datacontenttype": "application/json",
"dataschema": "http://example.com/test.json",
"subject": "acs:oss:cn-hangzhou:1234567:xls-papk/game_apk/123.jpg",
"time": "2020-08-17T16:04:46.149Asia/Shanghai",
"aliyuneventbusname": "demo-bus",
"aliyunregionid": "Shanghai",
"data": {
"name": "test",
"scope": 100
}
}
Événement complet
La méthode « Événement complet » transfère l'intégralité de la charge utile CloudEvents à la cible sans aucune modification.
Sortie : Identique à l'entrée. Chaque champ de l'enveloppe CloudEvents et la charge utile data sont conservés.
Événement partiel
La méthode « Événement partiel » utilise une expression JSONPath pour extraire des champs spécifiques de la charge utile CloudEvents et ne livre que ces champs à la cible.
JSONPath : $.data
Sortie :
{
"name": "test",
"scope": 100
}
Seul le contenu correspondant est livré. Les champs de l'enveloppe CloudEvents (id, source, type, etc.) sont supprimés.
Constante
La méthode « Constante » envoie une valeur fixe à la cible, indépendamment du contenu de l'événement. L'événement sert purement de déclencheur.
Valeur constante :
{
"name": "test"
}
Sortie :
{
"name": "test"
}
Le contenu de l'événement est ignoré. La valeur constante est envoyée telle quelle.
Modèle
La transformation par modèle s'effectue en deux étapes :
Extraction — Définissez des variables qui récupèrent des valeurs depuis l'événement avec JSONPath ou attribuez des chaînes fixes.
Composition — Construisez une sortie personnalisée en référençant ces variables avec la syntaxe
${variable}.
Cette méthode offre un contrôle total sur la charge utile livrée.
Règles relatives aux variables
| Contrainte | Détail |
|---|---|
| Sources de valeur | Expression JSONPath (par exemple, $.data.name) ou chaîne fixe |
| Imbrication | Non prise en charge dans les définitions de variables |
Sortie JSON avec sources mixtes
Combinez un champ extrait avec un message fixe :
Variables :
{
"name": "$.data.name",
"constant": "Please deal with it timely."
}
Modèle :
{
"name": "${name}",
"constant": "${constant}"
}
Sortie :
{
"name": "test",
"constant": "Please deal with it timely."
}
Sortie en texte brut
Construisez une chaîne de notification à partir des champs de l'événement :
Pour cet exemple, le champ data de l'événement d'entrée contient {"name": "test", "state": "RUNNING"}.
Variables :
{
"name": "$.data.name",
"state": "$.data.state"
}
Modèle :
The ${name} is in ${state} state.
Sortie :
The test is in RUNNING state.
Fonctions d'échappement
Les valeurs de variables contenant des caractères spéciaux peuvent corrompre le format de sortie. Utilisez les fonctions d'échappement intégrées pour les gérer en toute sécurité.
jsonEscape
Échappe les caractères spéciaux dans les chaînes JSON pour éviter un formatage incorrect. Utilisez cette fonction lorsque vous intégrez des variables dans des champs de chaîne JSON.
Variables :
{
"var": "\"abc\""
}
Modèle :
{
"text": "var is ${jsonEscape(var)}"
}
Sortie :
{
"text": "var is \"abc\""
}
htmlEscape
Échappe les caractères spéciaux HTML en leurs équivalents entités afin qu'ils s'affichent sous forme de texte brut. Utilisez cette fonction pour prévenir l'injection de scripts lorsque la sortie contient du contenu généré par l'utilisateur.
Variables :
{
"var": "<script>alert('unsafe');</script>"
}
Modèle :
<p>User Input: ${htmlEscape(var)}</p>
Sortie :
<p>User Input: <script>alert('unsafe');</script></p>
Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| Variable non remplacée dans la sortie | L'expression JSONPath ne correspond à aucun champ de l'événement | Vérifiez l'expression JSONPath par rapport à la structure réelle de l'événement. Si le chemin ne correspond pas, la variable n'est pas créée et apparaît comme une chaîne littérale ${variable} dans la sortie. |
| Sortie JSON malformée | La valeur de la variable contient des caractères spéciaux (guillemets, barres obliques inverses) | Entourez la référence de variable avec jsonEscape(). Par exemple, ${jsonEscape(var)}. |
| Injection HTML dans la sortie | La valeur de la variable contient des balises HTML | Entourez la référence de variable avec htmlEscape(). Par exemple, ${htmlEscape(var)}. |
| Troncature de la sortie du modèle | La valeur de la variable dépasse la longueur maximale | Réduisez la valeur de la variable ou divisez la charge utile en plusieurs variables. |
Voir aussi
Transformation d'événements (règles d'événements)
Spécification CloudEvents 1.0