EventBridge mentransformasi event dari format standar CloudEvents 1.0 ke dalam struktur yang diharapkan oleh target event Anda. Konfigurasikan metode transformasi pada setiap aturan event untuk mengontrol data apa yang dikirimkan ke target: seluruh event, satu bidang yang diekstraksi, muatan statis, atau struktur kustom yang disusun dari nilai-nilai event.
Metode transformasi
EventBridge menyediakan empat metode transformasi, masing-masing memberikan tingkat kendali berbeda atas muatan event yang dikirimkan ke target.
| Method | Behavior | When to use |
|---|---|---|
| Complete Event | Mengirimkan muatan CloudEvents lengkap tanpa perubahan | Target menerima CloudEvents secara native |
| Partial Event | Mengekstraksi satu nilai menggunakan ekspresi JSONPath | Target hanya membutuhkan satu bidang dari event |
| Constant | Mengirimkan string tetap, mengabaikan konten event | Event hanya berfungsi sebagai pemicu—target membutuhkan muatan statis |
| Template | Mengekstraksi beberapa nilai dengan JSONPath, lalu menyusunnya menjadi string atau struktur JSON kustom | Target memerlukan format muatan tertentu |
Contoh berikut menggunakan event CloudEvents contoh:
{
"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
}
}Complete Event
Seluruh muatan CloudEvents dikirimkan ke target tanpa perubahan. Tidak diperlukan konfigurasi.
Output:
{
"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
}
}Partial Event
Satu ekspresi JSONPath mengekstraksi satu nilai dari event.
Configuration:
{
"name": "$.data.name",
"constant": "Mohon segera ditangani."
}Output:
test1Usage notes:
Hanya satu ekspresi JSONPath yang diizinkan per konfigurasi Partial Event.
Nilai tersebut dapat memiliki panjang hingga 10.240 karakter.
Constant
String tetap menggantikan muatan event. Event itu sendiri hanya berfungsi sebagai pemicu.
Configuration:
test1Output:
test1Usage notes:
Nilai tersebut dapat memiliki panjang hingga 10.240 karakter.
Template
Template adalah metode yang paling fleksibel dan terdiri dari dua bagian:
Variable — Objek JSON yang memetakan nama variabel ke ekspresi JSONPath (atau nilai tetap). Setiap ekspresi JSONPath mengekstraksi nilai dari event.
Template — String atau struktur JSON yang mereferensikan variabel dengan sintaksis
${variableName}.
Configuration:
Variable:
{
"name": "$.data.name",
"constant": "Please deal with it timely."
}Template:
The instance is broken, which name is ${name}, ${constant}Output:
The instance is broken, which name is test, Please deal with it timely.Usage notes:
Nilai variabel dapat berupa ekspresi JSONPath atau string tetap.
Struktur bersarang tidak didukung dalam definisi variabel.
Nilai variabel dapat memiliki panjang hingga 10.240 karakter.
Nilai template dapat memiliki panjang hingga 10.240 karakter.
Format output template
Template mendukung empat format output: string sederhana, JSON sederhana, JSON dengan variabel dan konstanta campuran, serta JSON bersarang. Contoh string sederhana, JSON sederhana, dan JSON dengan variabel dan konstanta menggunakan event contoh yang sama seperti di atas, tetapi dengan "state": "RUNNING" menggantikan "scope": 100 pada bidang data. Contoh JSON bersarang menggunakan event contoh yang berbeda.
Simple string
Variable:
{
"name": "$.data.name",
"state": "$.data.state"
}Template:
"name ${name} is in ${state}"Output:
"name test is in RUNNING"Simple JSON
Variable:
{
"name": "$.data.name",
"state": "$.data.state"
}Template:
{
"name": "${name}",
"state": "${state}"
}Output:
{
"name": "test",
"state": "RUNNING"
}JSON with variables and constants
Gabungkan nilai yang diekstraksi dengan konstanta, array, dan tipe data berbeda dalam satu template.
Variable:
{
"name": "$.data.name",
"state": "$.data.state"
}Template:
{
"name": "${name}",
"state": [
9,
"${state}",
true
],
"Transformed": "Yes"
}Output:
{
"name": "test",
"state": [
9,
"RUNNING",
true
],
"Transformed": "Yes"
}Nested JSON
Untuk meneruskan objek atau array bersarang dari event, referensikan variabel tanpa tanda kutip agar EventBridge menyisipkan struktur JSON mentah.
Contoh berikut menggunakan event contoh yang berbeda:
{
"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"
}Template (${Files} tidak memiliki tanda kutip karena mereferensikan array):
{
"ProjectName": "${ProjectName}",
"Files": ${Files}
}Output:
{
"ProjectName": "test_project",
"Files": [
{
"URI": "oss://bucket/file",
"CustomId": "defaultId",
"CustomLabels": {
"Key1": "Val1",
"Key2": "Val2"
},
"Error": "InternalError"
}
]
}Gunakan "${variableName}" (dengan tanda kutip) ketika nilai yang diekstraksi adalah string. Gunakan ${variableName} (tanpa tanda kutip) ketika nilainya berupa objek atau array JSON.
Fungsi escape
EventBridge menyediakan dua fungsi bawaan untuk meng-escape karakter khusus dalam variabel template: jsonEscape() dan htmlEscape().
jsonEscape()
Meng-escape karakter khusus dalam string JSON untuk mencegah karakter tersemat merusak struktur JSON.
Variable:
{
"var": "\"abc\""
}Template:
{
"text": "var is ${jsonEscape(var)}"
}Output:
{
"text": "var is \"abc\""
}htmlEscape()
Meng-escape karakter khusus HTML agar ditampilkan sebagai teks biasa. Gunakan fungsi ini untuk mencegah injeksi skrip ketika data event disematkan dalam output HTML.
Variable:
{
"var": "<script>alert('unsafe');</script>"
}Template:
<p>User Input: ${htmlEscape(var)}</p>Output:
<p>User Input: <script>alert('unsafe');</script></p>Batasan
| Item | Limit |
|---|---|
| Panjang nilai Partial Event | Hingga 10.240 karakter |
| Panjang nilai Constant | Hingga 10.240 karakter |
| Panjang nilai variabel Template | Hingga 10.240 karakter |
| Panjang nilai Template | Hingga 10.240 karakter |
| Jumlah variabel Partial Event per aturan | 1 |
| Struktur bersarang dalam definisi variabel | Tidak didukung |
Permasalahan umum
| Issue | Cause | Solution |
|---|---|---|
| Output JSON tidak valid | Variabel string direferensikan tanpa tanda kutip, atau variabel objek/array direferensikan dengan tanda kutip | Gunakan "${var}" untuk string dan ${var} untuk objek dan array |
| Nilai variabel kosong pada output | Ekspresi JSONPath tidak sesuai dengan bidang apa pun dalam event | Verifikasi ekspresi JSONPath terhadap struktur event aktual |
| Karakter khusus merusak output JSON | Nilai variabel berisi karakter seperti tanda kutip ganda yang bertentangan dengan struktur JSON | Bungkus referensi variabel dengan jsonEscape(): ${jsonEscape(var)} |
| HTML menampilkan skrip yang diinjeksikan | Data event berisi HTML atau JavaScript yang tidak di-escape sebelum disematkan | Bungkus referensi variabel dengan htmlEscape(): ${htmlEscape(var)} |