EventBridge convertit les événements du format standard CloudEvents 1.0 vers la structure attendue par votre cible d'événement. Configurez une méthode de transformation sur chaque règle d'événement pour contrôler les données transmises à la cible : l'événement complet, un champ unique extrait, une charge utile statique ou une structure personnalisée assemblée à partir des valeurs de l'événement.
Méthodes de transformation
EventBridge propose quatre méthodes de transformation. Chacune offre un niveau de contrôle différent sur la charge utile de l'événement livrée à la cible.
| Méthode | Comportement | Cas d'utilisation |
|---|---|---|
| Événement complet | Transmet la charge utile CloudEvents intégrale sans modification | La cible accepte nativement le format CloudEvents |
| Événement partiel | Extrait une valeur unique via une expression JSONPath | La cible ne nécessite qu'un seul champ issu de l'événement |
| Constante | Envoie une chaîne fixe, ignorant le contenu de l'événement | L'événement sert uniquement de déclencheur ; la cible requiert une charge utile statique |
| Modèle | Extrait plusieurs valeurs avec JSONPath, puis les assemble dans une chaîne ou une structure JSON personnalisée | La cible exige un format de charge utile spécifique |
Les exemples suivants s'appuient sur un événement CloudEvents type :
{
"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
L'intégralité de la charge utile CloudEvents est transmise à la cible telle quelle. Aucune configuration n'est requise.
Sortie :
{
"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 partiel
Une seule expression JSONPath permet d'extraire une valeur de l'événement.
Configuration :
$.data.name
Sortie :
test
Remarques d'utilisation :
Une seule expression JSONPath est autorisée par configuration d'événement partiel.
La longueur de la valeur peut atteindre 10 240 caractères.
Constante
Une chaîne fixe remplace la charge utile de l'événement. Ce dernier agit alors comme un simple déclencheur.
Configuration :
test1
Sortie :
test1
Remarques d'utilisation :
La longueur de la valeur peut atteindre 10 240 caractères.
Modèle
Le modèle constitue la méthode la plus flexible. Il fonctionne en deux étapes :
Variable — Un objet JSON qui associe des noms de variables à des expressions JSONPath (ou à des valeurs fixes). Chaque expression JSONPath extrait une valeur de l'événement.
Modèle — Une chaîne ou une structure JSON qui fait référence aux variables avec la syntaxe
${variableName}.
Configuration :
Variable :
{
"name": "$.data.name",
"constant": "Please deal with it timely."
}
Modèle :
The instance is broken, which name is ${name}, ${constant}
Sortie :
The instance is broken, which name is test, Please deal with it timely.
Remarques d'utilisation :
Les valeurs des variables peuvent être des expressions JSONPath ou des chaînes fixes.
Les structures imbriquées ne sont pas prises en charge dans les définitions de variables.
La longueur de la valeur de variable peut atteindre 10 240 caractères.
La longueur de la valeur du modèle peut atteindre 10 240 caractères.
Formats de sortie du modèle
Les modèles prennent en charge quatre formats de sortie : chaînes simples, JSON simple, JSON mélangeant variables et constantes, ainsi que JSON imbriqué. Les exemples de chaîne simple, de JSON simple et de JSON avec variables et constantes utilisent le même événement type présenté précédemment, mais avec "state": "RUNNING" à la place de "scope": 100 dans le champ data. L'exemple de JSON imbriqué repose sur un autre événement type.
Chaîne simple
Variable :
{
"name": "$.data.name",
"state": "$.data.state"
}
Modèle :
"name ${name} is in ${state}"
Sortie :
"name test is in RUNNING"
JSON simple
Variable :
{
"name": "$.data.name",
"state": "$.data.state"
}
Modèle :
{
"name": "${name}",
"state": "${state}"
}
Sortie :
{
"name": "test",
"state": "RUNNING"
}
JSON avec variables et constantes
Combinez des valeurs extraites avec des constantes codées en dur, des tableaux et différents types de données au sein d'un même modèle.
Variable :
{
"name": "$.data.name",
"state": "$.data.state"
}
Modèle :
{
"name": "${name}",
"state": [
9,
"${state}",
true
],
"Transformed": "Yes"
}
Sortie :
{
"name": "test",
"state": [
9,
"RUNNING",
true
],
"Transformed": "Yes"
}
JSON imbriqué
Pour transmettre des objets ou des tableaux imbriqués issus de l'événement, référencez la variable sans guillemets afin qu'EventBridge injecte la structure JSON brute.
L'exemple suivant utilise un autre événement type :
{
"id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
"source": "acs.imm",
"specversion": "1.0",
"subject": "acs.imm:cn-hangzhou:123456789098****:215672",
"time": "2020-11-19T21:04:41+08:00",
"type": "imm:FileMeta:Index",
"aliyunaccountid": "123456789098****",
"aliyunpublishtime": "2020-11-19T21:04:42.179PRC",
"aliyuneventbusname": "default",
"aliyunregionid": "cn-hangzhou",
"aliyunpublishaddr": "172.25.XX.XX",
"data": {
"ProjectName": "test_project",
"DatasetName": "test_dataset",
"RequestId": "D2A3AE88-D17C-4CCC-B149-6651115C****",
"StartTime": "2021-07-22T14:03:15.489885+08:00",
"EndTime": "2021-07-22T14:05:15.489885+08:00",
"Message": "InvalidParameter",
"Success": false,
"Files": [
{
"URI": "oss://bucket/file",
"CustomId": "defaultId",
"CustomLabels": {
"Key1": "Val1",
"Key2": "Val2"
},
"Error": "InternalError"
}
]
}
}
Variable :
{
"ProjectName": "$.data.ProjectName",
"Files": "$.data.Files"
}
Modèle (${Files} n'a pas de guillemets car il référence un tableau) :
{
"ProjectName": "${ProjectName}",
"Files": ${Files}
}
Sortie :
{
"ProjectName": "test_project",
"Files": [
{
"URI": "oss://bucket/file",
"CustomId": "defaultId",
"CustomLabels": {
"Key1": "Val1",
"Key2": "Val2"
},
"Error": "InternalError"
}
]
}
Utilisez "${variableName}" (avec guillemets) lorsque la valeur extraite est une chaîne. Utilisez ${variableName} (sans guillemets) lorsqu'il s'agit d'un objet ou d'un tableau JSON.
Fonctions d'échappement
EventBridge fournit deux fonctions intégrées pour échapper les caractères spéciaux dans les variables de modèle : jsonEscape() et htmlEscape().
jsonEscape()
Échappe les caractères spéciaux dans les chaînes JSON pour éviter que des caractères incorporés ne corrompent la structure JSON.
Variable :
{
"var": "\"abc\""
}
Modèle :
{
"text": "var is ${jsonEscape(var)}"
}
Sortie :
{
"text": "var is \"abc\""
}
htmlEscape()
Échappe les caractères spéciaux HTML afin qu'ils s'affichent sous forme de texte brut. Utilisez cette fonction pour prévenir les injections de scripts lorsque des données d'événement sont intégrées dans une sortie HTML.
Variable :
{
"var": "<script>alert('unsafe');</script>"
}
Modèle :
<p>User Input: ${htmlEscape(var)}</p>
Sortie :
<p>User Input: <script>alert('unsafe');</script></p>
Limites
| Élément | Limite |
|---|---|
| Longueur de la valeur de l'événement partiel | Jusqu'à 10 240 caractères |
| Longueur de la valeur constante | Jusqu'à 10 240 caractères |
| Longueur de la valeur de variable de modèle | Jusqu'à 10 240 caractères |
| Longueur de la valeur du modèle | Jusqu'à 10 240 caractères |
| Variables d'événement partiel par règle | 1 |
| Structures imbriquées dans les définitions de variables | Non prises en charge |
Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| La sortie JSON est malformée | Une variable de chaîne est référencée sans guillemets, ou une variable objet/tableau est référencée avec des guillemets | Utilisez "${var}" pour les chaînes et ${var} pour les objets et les tableaux |
| La valeur de la variable est vide 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 |
| Des caractères spéciaux corrompent la sortie JSON | La valeur de la variable contient des caractères tels que des guillemets doubles qui entrent en conflit avec la structure JSON | Entourez la référence de variable avec jsonEscape() : ${jsonEscape(var)} |
| Le rendu HTML exécute des scripts injectés | Les données d'événement contiennent du HTML ou du JavaScript non échappé avant l'intégration | Entourez la référence de variable avec htmlEscape() : ${htmlEscape(var)} |