Aksi komponen Playbook mendukung parameter berupa konstanta, variabel, ekspresi, dan fungsi. Pemrosesan parameter mencakup langkah-langkah seperti ekstraksi, deduplikasi, dan eksekusi loop.
Kategorisasi parameter
Berdasarkan fungsinya, parameter dikategorikan menjadi parameter input playbook, parameter output playbook, parameter input aksi komponen, dan parameter output aksi komponen.
Berdasarkan tipenya, parameter dikategorikan sebagai parameter sistem dan parameter komponen.
CatatanSelama eksekusi aksi komponen, Anda dapat mengambil parameter default sistem dari node mana pun. Parameter komponen tidak termasuk.
Parameter input dan output komponen (node)
Parameter input suatu komponen dapat berupa nilai kustom atau output dari node hulu. Jika menggunakan output dari node hulu, node tersebut harus mendahului node saat ini pada jalur orkestrasi.
Dalam skenario multi-jalur, pastikan nama node bersifat unik secara global.
Ambil Node B pada gambar berikut sebagai contoh. Node ini dapat mengambil output dari Node A hulu dan parameter input playbook. Namun, Node ini tidak dapat mengambil output dari Node D karena berada di cabang yang berbeda, maupun dari Node C karena Node C bukan pendahulu Node B.
Deskripsi parameter sistem
Parameter sistem dalam playbook
Parameter default sistem dapat diakses dari node mana pun. Gunakan ekspresi pada tabel berikut untuk mengambil parameter tersebut. Istilah "event" dapat dianggap sebagai nama node awal. Format ${event.parameter_name} digunakan untuk mengambil parameter sistem playbook.
Parameter | Tipe data | Ekspresi | Deskripsi |
_tenant_id | String | ${event._tenant_id} | ID akun Alibaba Cloud yang memanggil playbook. |
_domain_id | String | ${event._domain_id} | Status role pengguna yang login.
|
_trigger_user | String | ${event._trigger_user} | ID akun Alibaba Cloud yang memicu playbook. Jika Pengguna RAM digunakan, ID Pengguna RAM tersebut akan dikembalikan. |
_region_id | String | ${event._region_id} | ID Wilayah. |
_req_uuid | String | ${event._req_uuid} | Pengidentifikasi unik untuk tugas eksekusi playbook saat ini. |
parentTaskUuid | String | ${event.parentTaskUuid} | _req_uuid dari playbook induk. Parameter ini ada ketika playbook anak dipanggil. |
parentTaskName | String | ${event.parentTaskName} | UUID dari playbook induk. Parameter ini ada ketika playbook anak dipanggil. |
Parameter sistem dalam output aksi komponen
Output dari komponen apa pun mencakup parameter berikut. Parameter kustom dikemas dalam datalist. Gunakan ${node_name.datalist.*} untuk mengambil semua nilai parameter output.
Parameter | Tipe data | Deskripsi |
datalist | JSONArray | Parameter output setelah aksi dieksekusi. Penting Parameter output kustom dari komponen juga disimpan dalam datalist. |
total_data_successful | Int | Volume data yang berhasil diproses selama eksekusi aksi. |
total_data | Int | Volume data yang diproses selama eksekusi aksi. |
total_data_with_dup | Int | Volume data yang berhasil diproses dan dideduplikasi selama eksekusi aksi. |
total_exe_successful | Int | Jumlah kali aksi saat ini berhasil dijalankan. |
total_exe | Int | Jumlah kali aksi saat ini dijalankan. |
status | Boolean | Status eksekusi aksi. Nilai valid: true dan false. |
messageForUser | String | Pesan error untuk pengguna jika eksekusi gagal. |
message | String | Pesan error sistem jika eksekusi gagal. |
failed_exe_detail | String | Informasi error detail jika eksekusi gagal. |
Format parameter
Parameter mendukung tiga format dasar: konstanta, variabel, dan ekspresi. Anda juga dapat menggunakan kombinasi format ini serta struktur bersarang yang lebih kompleks.
Format dasar | Deskripsi | Contoh |
Konstanta | String tetap. | Ali. |
Variabel | Mengambil nilai dari parameter input playbook dan parameter output node sebelumnya. | ${event.aliuid}, yang mengambil aliuid dari parameter input playbook. |
Ekspresi | Menggunakan ekspresi dan fungsi tertanam untuk menghasilkan nilai. Formatnya adalah <%=expression|function%>. Untuk daftar fungsi yang didukung, lihat Daftar fungsi bawaan dalam ekspresi. | Ekspresi: Hanya sintaks Java yang didukung, seperti <%=2*60*60%>. Fungsi: <%=currentTime()%>. |
Format kombinasi | Konstanta_Variabel_Ekspresi | Contoh kombinasi: Ali_${event.aliuid}_<%=currentTime()%>_<%=2*60*60%>. Saat aksi dieksekusi, variabel dan ekspresi diurai dan diganti dengan nilai yang sesuai: Ali_aliuid_current_time_7200. Contoh bersarang: (Ekspresi dapat menyematkan variabel) <%=formatTimeStamp(secondstamp_add(${DateTime:event.datalist.*.gmt_create},-600L),"yyyy-MM-dd'T'HH:mm:ss.SSSXXX")%>. Ini mengambil nilai gmt_create dari ${DateTime:event.datalist.*.gmt_create}, mengurangi 600, lalu memformat hasilnya sebagai tanggal. |
Daftar fungsi bawaan dalam ekspresi
Nama fungsi | Deskripsi | Contoh | Contoh keluaran |
currentTime | Mengembalikan timestamp saat ini. | <%=currentTime()%> | 2025-06-05 10:30:00 |
secondstamp_add | Menambahkan jumlah detik tertentu (secNum) ke timestamp saat ini. | <%=secondstamp_add(currentTime(),300L)%> | 2025-06-05 10:30:09 |
formatTimeStamp | Memformat timestamp input berdasarkan format yang ditentukan. | <%=formatTimeStamp(currentTime(),"yyyyMMdd")%> | 20250605 |
timestampToseconds | Menambahkan jumlah detik tertentu (secNum) ke timestamp saat ini lalu mengonversi hasilnya ke detik untuk output. | <%=timestampToseconds(currentTime(),300L)%> | 1749099848 |
splitStr | Memisahkan string input (inputStr) menjadi daftar berdasarkan pembatas yang ditentukan (splitStr). | <%=splitStr("test,value",",")%> | [test,value] |
parseTimeMs | Mengonversi string berformat waktu menjadi milidetik. | <%=parseTimeMs("2025-06-05 10:30:32","yyyy-MM-ddHH:mm:ss")%> | 1749090632000 |
currentTimeToMs | Mengonversi timestamp saat ini menjadi milidetik. | <%=currentTimeToMs()%> | 1749091369688 |
currentHourToMs | Mengonversi timestamp jam saat ini menjadi milidetik. Perhitungan dimulai dari menit 0 dan detik 0 jam saat ini. | <%=currentHourToMs()%> | 1749088800000 |
currentDayToMs | Mengonversi timestamp hari saat ini menjadi milidetik. Perhitungan dimulai dari jam 0, menit 0, dan detik 0 hari saat ini. | <%=currentDayToMs()%> | 1749052800000 |
parseTimeMsWDefault | Mengurai timestamp menjadi milidetik dan mendukung nilai default. Jika parameter pertama kosong, parameter kedua digunakan sebagai nilai default. | <%=parseTimeMsWDefault("2025-06-05 10:30:32",1749091369688L)%> | 1749090632000 |
splitStrToJsonArray | Memisahkan string input (inputStr) menjadi JSONArray berdasarkan pembatas yang ditentukan (splitStr). | <%=splitStrToJsonArray("test,value",",")%> | ["test","value"] |
concatListStr | Menggabungkan string menggunakan pembatas tertentu. Fungsi ini harus digunakan bersama fungsi splitStr. | <%=concatListStr("|",splitStr("test,value",","))%> | test|value |
substring | Mengekstrak substring. Parameter 1: String yang akan diekstrak. Parameter 2: Indeks awal. Parameter 3: Indeks akhir. | <%=substring("012345",0,3)%> | 012 |
remainStrStartEnd | Menyimpan karakter di luar penanda awal dan akhir yang ditentukan. Fungsi ini menyimpan karakter pertama sebanyak `beginSize` dan karakter terakhir sebanyak `endSize` dari `inputStr`, lalu menghubungkannya dengan lima garis bawah.
| <%=remainStrStartEnd("012345",2,2)%> | 01_____45 |
toLong | Mengonversi objek ke tipe long. Parameter 1: Nilai input. Parameter 2: Nilai default yang digunakan jika konversi gagal. | <%=toLong("1234",12L)%> | 1234.0 |
toLowerCase | Mengonversi huruf Inggris dalam string menjadi huruf kecil. | <%=toLowerCase("TEST")%> | test |
toUpperCase | Mengonversi huruf Inggris dalam string menjadi huruf besar. | <%=toUpperCase("test")%> | TEST |
toJSONObject | Mengonversi string JSON menjadi objek JSON. | <%=toJSONObject("{\"name\":\"test\",\"age\":12}")%> | {"name":"test","age":12} |
base64encode | Mengenkode string menggunakan Base64. | <%=base64encode("abc")%> | YWJj |
base64decode | Mendekode string Base64. | <%=base64decode("YWJj")%> | abc |
replace | Mengganti bagian dari string.
| <%=replace("abc123","abc","aaa")%> | aaa123 |
isNull | Memeriksa apakah objek bernilai null atau kosong. | <%=isNull("")%> | true |
Parameter variabel
Selama eksekusi komponen playbook, jika ingin mengambil parameter dari node sebelumnya dalam alur, gunakan format parameter variabel dalam komponen tersebut. Untuk parameter input playbook, gunakan event sebagai nama node—yang dapat dianggap sebagai parameter output dari node awal. Oleh karena itu, jangan memberi nama komponen 'event' selama orkestrasi playbook.
Saat ini, Anda hanya dapat mengambil data dari parameter output node.
Parameter input playbook sama dengan parameter output node awal.
Parameter input node saat ini sama dengan parameter output node sebelumnya.
Format sintaks
Sintaks untuk mengambil parameter output node adalah ${node_name.parameter_path}. Jalur ini menggunakan metode JSONPath dan mendukung format JSON dengan jumlah lapisan berapa pun.
Untuk format JSONObject, gunakan titik (.) untuk langsung mengambil data dari node anak. Untuk format JSONArray, tanda bintang (*) menunjukkan semua data. Anda juga dapat menggunakan indeks numerik untuk mengambil satu data. Contoh berikut menunjukkan cara mengambil parameter output setelah aksi dieksekusi:
Tipe
Sintaks
Deskripsi
Mengambil parameter dalam JSON
${node_name.datalist.*.parameter1.parameter2}
CatatanSintaks untuk parameter output node awal (playbook) adalah ${event.parameter1.parameter2}.
Mengambil data parameter2 di bawah parameter1.
CatatanNilai parameter1 harus dalam format JSONObject.
Mengambil semua data dalam array JSON
${node_name.datalist.*.parameter1.*.parameter2}
CatatanSintaks untuk parameter output node awal (playbook) adalah ${event.parameter1.*.parameter2}.
Mengambil data parameter2 dari semua JSONObject di bawah parameter1.
CatatanNilai parameter1 harus dalam format JSONArray.
Mengambil satu data dari array JSON
${node_name.datalist.*.parameter1.[0].parameter2}
CatatanSintaks untuk parameter output node awal (playbook) adalah ${event.parameter1.[0].parameter2}.
Mengambil data parameter2 dari JSONObject pertama di bawah parameter1.
CatatanNilai parameter1 harus dalam format JSONArray.
Selain menulis aturan sintaks secara manual, Anda juga dapat menghasilkan sintaks yang sesuai dengan memilih parameter dari daftar drop-down di kotak input. Metode ini direkomendasikan setelah pengujian selesai. Gambar berikut menunjukkan contohnya.

Contoh pengambilan parameter variabel
Ambil node bernama node1 sebagai contoh. Parameter output node ini adalah sebagai berikut:
{
"datalist": [
{
"person": {
"weight": "120",
"age": "12"
}
},
{
"person": {
"weight": "121",
"age": "13"
}
}
],
"total_data_successful": 2,
"total_data": 2,
"total_exe_successful": 2,
"total_exe": 2,
"total_data_with_dup": 2,
"status": true
}Sintaks | Deskripsi |
${event._req_uuid} | Mengambil nilai parameter sistem _req_uuid dari node awal (parameter input). |
${event.parentTaskUuid} | Mengambil _req_uuid dari playbook induk dalam playbook anak (jika playbook induk dipanggil). |
${node1.total_data_successful} | Mengambil volume data yang berhasil diproses oleh node1. Nilai output: 2. |
${node1.datalist.*.person.age} | Mengambil semua data age dari objek person di bawah datalist node1. Nilai output: {12,13}. |
${node1.datalist.[0].person.age} | Mengambil data age dari objek person pada item pertama di bawah datalist node1. Nilai output: 12. |
Konversi tipe data parameter
Selama eksekusi playbook, data diproses sebagai string dalam sebagian besar skenario. Jika tipe data tidak memenuhi persyaratan, Anda dapat mengonversi data dari tipe sumber ke tipe target.
Formatnya adalah ${data_type:data}. Tabel berikut mencantumkan konversi tipe data yang didukung.
Tipe data | Deskripsi | Tipe sumber yang didukung |
Boolean | Mengonversi ke Boolean. Nilai valid: true dan false. |
|
Long | Mengonversi ke Long. |
|
Int | Mengonversi ke Int. | |
Double | Mengonversi ke Double. | |
String | Mengonversi ke String. | Semua tipe didukung. |
DateTime | Mengonversi ke tanggal. |
|
JSONObject | Mengekstrak kunci dan nilai dari JSONObject untuk membentuk JSONObject baru. Ini digunakan untuk mengemas data multi-kolom dalam format {}. Format outputnya adalah {"fieldname":"fieldValue",...}. | Hanya tipe JSONObject yang didukung. |
JSONArray | Mengekstrak kunci dan nilai dari JSONObject untuk membentuk JSONArray. Ini digunakan untuk mengemas data multi-baris dan multi-kolom dalam format [{}]. Data kemudian dikeluarkan sebagai data satu baris, satu kolom. | Hanya tipe JSONObject yang didukung. |
JSONObjectStr | Mengonversi JSONObject menjadi string. | Tipe JSONObject. |
JSONArrayStr | Mengonversi JSONArray menjadi string. | Tipe JSONArray. |
Contoh
Contoh JSONObject: Parameter input playbook adalah {"src_ip":"127.0.0.1","dst_ip":"127.0.0.2","msg":"hello"}.
${JSONObject:event}: Mengeluarkan seluruh event sebagai string JSON lengkap.
${JSONObject:event.src_ip}: Membuat JSONObject dari bidang src_ip dalam event. Hasil: {"src_ip":"127.0.0.1"}.
${JSONObject:event.src_ip|msg}: Membuat JSONObject dari bidang src_ip dan msg dalam event. Hasil: {"src_ip":"127.0.0.1","msg":"hello"}.
${JSONArray:event}: Mengeluarkan seluruh event sebagai JSONArray lengkap.
${JSONArray:event.src_ip}: Membuat JSONArray dari bidang src_ip dalam event. Hasil: [{"src_ip":"127.22.22.1"}].
${JSONArray:event.src_ip|msg}: Membuat JSONArray dari bidang src_ip dan msg dalam event. Hasil: [{"src_ip":"127.0.0.1","msg":"hello"}].
Contoh JSONArray: Parameter input playbook adalah {"datalist":[{"src_ip":"127.0.0.1","dst_ip":"127.1.0.1","msg":"hello"},{"src_ip":"127.1.0.1","dst_ip":"127.1.0.1","msg":"hello"}]}.
${JSONObject:event.datalist.*.src_ip}: Diperluas menjadi beberapa baris. Hasil untuk setiap baris adalah JSONObject, seperti {"src_ip":"127.x.0.1"}.
${JSONObject:event.datalist.*.src_ip|msg}: Diperluas menjadi beberapa baris. Setiap baris adalah JSONObject, seperti
{"src_ip":"127.x.0.1","msg":"hello"}.${JSONArray:event.datalist.*.src_ip}: Ini diperluas menjadi array JSON satu baris, seperti: [{"src_ip":"127.0.0.1"},{"src_ip":"127.1.0.1"}].
${JSONArray:event.datalist.*.src_ip|msg}: Menggabungkan hasil menjadi satu JSONArray. Hasil: [{"src_ip":"127.0.0.1","msg":"hello"},{"src_ip":"127.1.0.1","msg":"hello"}].
Pemrosesan parameter dan alur eksekusi node
Ekstraksi parameter node: Setelah semua node hulu yang diperlukan selesai dieksekusi, sistem mengekstraksi data input aktual untuk node saat ini berdasarkan konfigurasi inputnya. Proses ekstraksi dijelaskan secara rinci di bawah ini.
Eksekusi node: Setelah parameter input untuk node dihasilkan, jika beberapa set parameter input identik, sistem secara otomatis melakukan deduplikasi lalu mengeksekusi aksi komponen node.
CatatanJika aksi menerima beberapa set nilai sebagai parameter, aksi dieksekusi beberapa kali untuk menyederhanakan operasi.
Sebagai contoh, jika Anda ingin mengidentifikasi semua server dari aplikasi yang dikompromikan lalu mengeksekusi aksi "Purge Malicious File" pada setiap server, cukup pilih "Server IP" (${node1.datalist.*.ip}) dalam parameter aksi. Sistem secara otomatis mengeksekusi aksi "Purge Malicious File" pada semua alamat IP. Anda tidak perlu menulis loop untuk mengeksekusi aksi purge pada setiap server secara individual.
Agregasi dan deduplikasi hasil output: Hasil dari beberapa eksekusi node diagregasi dan secara otomatis dideduplikasi. Logika deduplikasi menganggap entri sebagai duplikat jika semua bidangnya identik. Sebagai contoh:
Sebelum deduplikasi
Setelah deduplikasi
[ { "a":"11", "b":"22" }, { "a":"11", "b":"22" }, { "a":"11", "b":"33" } ][ { "a":"11", "b":"22" }, { "a":"11", "b":"33" } ]
Proses ekstraksi parameter
Memproses satu sumber data
Format JSON kompleks dengan kedalaman berapa pun dapat dianggap sebagai struktur pohon. Prinsip-prinsip untuk mengekstraksi parameter dari JSON adalah sebagai berikut: Hubungan saudara kandung pada kedalaman yang sama dipertahankan, node leluhur diperluas, dan Produk Kartesius dibuat untuk node yang bukan saudara kandung atau leluhur.
Data diekstraksi secara otomatis dari kedalaman berapa pun. Gambar berikut menunjukkan contohnya.

Hubungan saudara kandung pada kedalaman yang sama dipertahankan. Gambar berikut menunjukkan contohnya.

Node leluhur diperluas. Gambar berikut menunjukkan contohnya.

Produk Kartesius dibuat untuk node yang bukan saudara kandung atau leluhur. Gambar berikut menunjukkan contohnya.

Memproses beberapa sumber data
Produk Kartesius dibuat dari hasil pemrosesan setiap sumber data.
