プレイブックのコンポーネントアクションのパラメーターは、定数、変数、式、関数をサポートしています。パラメーター処理には、抽出、重複排除、ループ実行が含まれます。
パラメーターの分類
パラメーターは、2つの分類ディメンションに分けられます:
ロール別:プレイブック入力パラメーター、プレイブック出力パラメーター、コンポーネントアクション入力パラメーター、コンポーネントアクション出力パラメーター。
ソース別:システムパラメーター、コンポーネントパラメーター。
コンポーネントアクションの実行中、システムパラメーター (コンポーネントパラメーター以外のデフォルトパラメーター) はどのノードからでもアクセスできます。
コンポーネント (ノード) の入出力パラメーター
ノードの入力には、固定値 (定数) または上流ノードの出力を指定できます。上流ノードの出力を参照するには、そのノードが同じオーケストレーションパス上で現在のノードより前にある必要があります。
マルチパスのプレイブックでは、ノード名はグローバルで一意である必要があります。
次の図は、このルールを示しています。ノード B は、ノード A (直接の上流) の出力とプレイブックの入力パラメーターにアクセスできます。ノード D (異なるブランチ) やノード C (どのパス上でもノード B の先行ノードではない) にはアクセスできません。
システムパラメーター
プレイブックレベルのシステムパラメーター
どのノードからでも、${event.parameter_name} を使用してこれらのパラメーターにアクセスできます。event は開始ノードの予約名です。プレイブックのオーケストレーション中に、コンポーネントに event という名前を付けないでください。
| パラメーター | データ型 | 式 | 説明 |
|---|---|---|---|
_tenant_id | String | ${event._tenant_id} | プレイブックを呼び出す Alibaba Cloud アカウント ID |
_domain_id | String | ${event._domain_id} | ログインしているユーザーのロールステータス。
|
_trigger_user | String | ${event._trigger_user} | プレイブックをトリガーする Alibaba Cloud アカウント ID。RAM ユーザーがプレイブックをトリガーした場合、その RAM ユーザーの ID が返されます。 |
_region_id | String | ${event._region_id} | リージョン ID |
_req_uuid | String | ${event._req_uuid} | 現在のプレイブック実行の一意の識別子 |
parentTaskUuid | String | ${event.parentTaskUuid} | _req_uuid。このプレイブックが子プレイブックとして呼び出された場合にのみ存在します。 |
parentTaskName | String | ${event.parentTaskName} | 親プレイブックの UUID。このプレイブックが子プレイブックとして呼び出された場合にのみ存在します。 |
コンポーネントアクション出力のシステムパラメーター
すべてのノード実行で、以下の標準出力フィールドが生成されます。コンポーネントからのカスタム出力パラメーターは datalist 内に保存されます。すべての出力値を取得するには ${node_name.datalist.*} を使用します。
| パラメーター | データ型 | 説明 |
|---|---|---|
datalist | JSONArray | アクションによって生成された出力パラメーター。カスタムコンポーネントの出力もここに保存されます。 |
total_data_successful | Int | 正常に処理されたデータエントリ数 |
total_data | Int | 処理されたデータエントリの総数 |
total_data_with_dup | Int | アクションの実行中に正常に処理され、重複排除されたデータの量 |
total_exe_successful | Int | アクションが正常に完了した回数 |
total_exe | Int | アクションが実行された総回数 |
status | Boolean | 実行ステータス:true (成功) または false (失敗) |
messageForUser | String | アクションが失敗した場合にユーザーに表示されるエラーメッセージ |
message | String | アクションが失敗した場合の内部システムエラーメッセージ |
failed_exe_detail | String | アクションが失敗した場合の詳細なエラー情報 |
パラメーターのフォーマット
ノードの入力パラメーターは、定数、変数、式の 3 つの基本フォーマットと、それらの任意の組み合わせをサポートします。
| フォーマット | 説明 | 例 |
|---|---|---|
| 定数 | 固定の文字列値 | Ali |
| 変数 | プレイブックの入力パラメーターまたは上流ノードの出力から値を抽出します | ${event.aliuid} |
| 式 | 埋め込まれた式または関数を評価します。フォーマット:<%=expression|function%>。Java 構文のみがサポートされています。サポートされている関数については、後述のビルトイン関数リストをご参照ください。 | 式:<%=2*60*60%>。関数:<%=currentTime()%>。 |
| 組み合わせ | 単一の値に定数、変数、式を混在させます | 組み合わせ:Ali_${event.aliuid}_<%=currentTime()%>_<%=2*60*60%> — ランタイム時に、変数と式はそれぞれの値に解決されます:Ali_aliuid_<timestamp>_7200。ネスト (式に変数を埋め込むことができます):<%=formatTimeStamp(secondstamp_add(${DateTime:event.datalist.*.gmt_create},-600L),"yyyy-MM-dd'T'HH:mm:ss.SSSXXX")%> — ${DateTime:event.datalist.*.gmt_create} から gmt_create の値を取得し、600 秒を減算して、結果を日付としてフォーマットします。 |
ビルトイン関数
| 関数 | 説明 | 例 | 出力 |
|---|---|---|---|
currentTime | 現在のタイムスタンプを返します | <%=currentTime()%> | 2025-06-05 10:30:00 |
secondstamp_add | タイムスタンプに指定された秒数を加算します | <%=secondstamp_add(currentTime(),300L)%> | 2025-06-05 10:30:09 |
formatTimeStamp | 指定されたパターンを使用してタイムスタンプをフォーマットします | <%=formatTimeStamp(currentTime(),"yyyyMMdd")%> | 20250605 |
timestampToseconds | タイムスタンプに秒数を加算し、結果をエポック秒に変換します | <%=timestampToseconds(currentTime(),300L)%> | 1749099848 |
splitStr | 文字列をデリミタで分割してリストにします | <%=splitStr("test,value",",")%> | [test,value] |
parseTimeMs | フォーマットされた時間文字列を解析してミリ秒に変換します | <%=parseTimeMs("2025-06-05 10:30:32","yyyy-MM-ddHH:mm:ss")%> | 1749090632000 |
currentTimeToMs | 現在のタイムスタンプをミリ秒で返します | <%=currentTimeToMs()%> | 1749091369688 |
currentHourToMs | 現在の時の開始時刻のミリ秒タイムスタンプを返します | <%=currentHourToMs()%> | 1749088800000 |
currentDayToMs | 現在の日の開始時刻のミリ秒タイムスタンプを返します | <%=currentDayToMs()%> | 1749052800000 |
parseTimeMsWDefault | 時間文字列をミリ秒に解析します。入力が空の場合、デフォルト値 (パラメーター 2) を返します | <%=parseTimeMsWDefault("2025-06-05 10:30:32",1749091369688L)%> | 1749090632000 |
splitStrToJsonArray | 文字列をデリミタで分割して JSONArray にします | <%=splitStrToJsonArray("test,value",",")%> | ["test","value"] |
concatListStr | リストの要素をデリミタで連結します。splitStr と一緒に使用します | <%=concatListStr("|",splitStr("test,value",","))%> | test|value |
substring | 部分文字列を抽出します。パラメーター 1:ソース文字列。パラメーター 2:開始インデックス。パラメーター 3:終了インデックス | <%=substring("012345",0,3)%> | 012 |
remainStrStartEnd | 先頭 N 文字と末尾 M 文字を保持し、5つのアンダースコアで結合します。パラメーター 1:ソース文字列。パラメーター 2:先頭の文字数。パラメーター 3:末尾の文字数 | <%=remainStrStartEnd("012345",2,2)%> | 01_____45 |
toLong | 値を Long 型に変換します。パラメーター 1:入力値。パラメーター 2:変換に失敗した場合のデフォルト値 | <%=toLong("1234",12L)%> | 1234.0 |
toLowerCase | 文字列内のすべての英字を小文字に変換します | <%=toLowerCase("TEST")%> | test |
toUpperCase | 文字列内のすべての英字を大文字に変換します | <%=toUpperCase("test")%> | TEST |
toJSONObject | JSON 文字列を解析して JSONObject にします | <%=toJSONObject("{\"name\":\"test\",\"age\":12}")%> | {"name":"test","age":12} |
base64encode | 文字列を Base64 を使用してエンコードします | <%=base64encode("abc")%> | YWJj |
base64decode | Base64 エンコードされた文字列をデコードします | <%=base64decode("YWJj")%> | abc |
replace | 部分文字列を置き換えます。パラメーター 1:ソース文字列。パラメーター 2:対象の部分文字列。パラメーター 3:置換文字列 | <%=replace("abc123","abc","aaa")%> | aaa123 |
isNull | 値が null または空の場合に true を返します | <%=isNull("")%> | true |
変数パラメーター
プレイブックのコンポーネント実行中に先行ノードからの出力を参照するには、変数パラメーターのフォーマットを使用します。プレイブックの入力パラメーターについては、ノード名として event を使用します。これは開始ノードの出力として扱われます。プレイブックのオーケストレーション中に、コンポーネントに event という名前を付けないでください。
変数として参照できるのは、ノードの出力パラメーターのみです。
プレイブックの入力パラメーターは、開始ノードの出力パラメーターと同じです。
現在のノードの入力パラメーターは、前のノードの出力パラメーターと同じです。
構文フォーマット
ノードの出力パラメーターを取得するには、${node_name.parameter_path} を使用します。パスは JSONPath の規則に従い、任意の深さの JSON ネストをサポートします。
JSONObject 構造の場合、. を使用してネストされたフィールドにアクセスします。JSONArray 構造の場合、* はすべてのアイテムを取得し、[0] などの数値インデックスは特定のアイテムを取得します。次の表では、アクションの出力パラメーターを例として使用しています:
| タイプ | 構文 | 説明 |
|---|---|---|
| JSON からパラメーターを取得 | ${node_name.datalist.*.param1.param2}。開始ノードの構文:${event.param1.param2}。 | param1 の下にある param2 の値を取得します。param1 は JSONObject である必要があります。 |
| JSON 配列からすべてのアイテムを取得 | ${node_name.datalist.*.param1.*.param2}。開始ノードの構文:${event.param1.*.param2}。 | param1 の下にあるすべての JSONObject から param2 を取得します。param1 は JSONArray である必要があります。 |
| JSON 配列から単一のアイテムを取得 | ${node_name.datalist.*.param1.[0].param2}。開始ノードの構文:${event.param1.[0].param2}。 | param1 の下にある最初の JSONObject から param2 を取得します。param1 は JSONArray である必要があります。 |
変数構文を手動で記述する代わりに、入力ボックスのドロップダウンリストを使用してパラメーターを選択し、構文を自動的に生成できます。この方法は、デバッグが完了した後に推奨されます。たとえば、outputFields 構成で、フィールドマッピングの値のエリアをクリックすると、データソースのドロップダウンメニュー (InputCheck、dataSetFilter、SiemEventFormat など) が表示されます。データソースを選択すると、利用可能なフィールドパスが右側に表示されます。ターゲットフィールドをクリックすると、${InputCheck.datalist.*.records.*.hackerIP} のような変数式が生成されます。
変数パラメーターの例
次の例では、node1 という名前のノードの以下の出力を使用します:
{
"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
}| 構文 | 説明 |
|---|---|
${event._req_uuid} | 開始ノード (プレイブック入力) から _req_uuid システムパラメーターを取得します。 |
${event.parentTaskUuid} | 子プレイブックで、親プレイブックの _req_uuid を取得します (子プレイブックとして呼び出された場合にのみ存在します)。 |
${node1.total_data_successful} | node1 から正常に処理されたデータ数を取得します。出力:2。 |
${node1.datalist.*.person.age} | node1 の datalist からすべての person.age の値を取得します。出力:{12,13}。 |
${node1.datalist.[0].person.age} | node1 の datalist から最初の person.age の値を取得します。出力:12。 |
データ型変換
プレイブックの実行中、ほとんどのデータは文字列として処理されます。アクションが特定の型を必要とする場合は、${data_type:data} を使用して変換します。
| ターゲット型 | 説明 | サポートされるソース型 |
|---|---|---|
Boolean | true または false | 数値:1 → true、その他のすべての値 → false。文字列:"true"、"1"、"Y"、"T" → true;"false"、"0"、"N"、"F" → false。その他の文字列はエラーを引き起こします。 |
Long | Long 型の整数に変換します | 数値型;数字とカンマのみを含む文字列 (例:1,000,000) |
Int | 整数に変換します | 数値型 (Long, Int, Double)。数字とカンマのみを含む文字列型 (例:1,000,000)。 |
Double | 倍精度浮動小数点数に変換します | 数値型 (Long, Int, Double)。数字とカンマのみを含む文字列型 (例:1,000,000)。 |
String | 文字列に変換します | すべての型 |
DateTime | 日付に変換します | 数値型;数値である文字列 (例:1696487400000) または ISO 8601 形式 (例:2023-10-05 14:30:00) |
JSONObject | JSONObject からキーと値のペアを抽出し、新しい JSONObject にします。出力フォーマット:{"fieldname":"fieldValue",...} | JSONObject のみ |
JSONArray | JSONObject からキーと値のペアを抽出し、JSONArray にします。出力フォーマット:[{"fieldname":"fieldValue",...}] | JSONObject のみ |
JSONObjectStr | JSONObject をその文字列表現に変換します | JSONObject |
JSONArrayStr | JSONArray をその文字列表現に変換します | JSONArray |
例:
JSONObject の例:プレイブック入力:{"src_ip":"127.0.0.1","dst_ip":"127.0.0.2","msg":"hello"}
| 式 | 結果 |
|---|---|
${JSONObject:event} | イベント全体を JSON 文字列として |
${JSONObject:event.src_ip} | {"src_ip":"127.0.0.1"} |
${JSONObject:event.src_ip|msg} | {"src_ip":"127.0.0.1","msg":"hello"} |
${JSONArray:event} | イベント全体を JSONArray として |
${JSONArray:event.src_ip} | [{"src_ip":"127.22.22.1"}] |
${JSONArray:event.src_ip|msg} | [{"src_ip":"127.0.0.1","msg":"hello"}] |
JSONArray の例:プレイブック入力:{"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} | 複数の行に展開されます。各行:{"src_ip":"127.x.0.1"} |
${JSONObject:event.datalist.*.src_ip|msg} | 複数の行に展開されます。各行:{"src_ip":"127.x.0.1","msg":"hello"} |
${JSONArray:event.datalist.*.src_ip} | [{"src_ip":"127.0.0.1"},{"src_ip":"127.1.0.1"}] |
${JSONArray:event.datalist.*.src_ip|msg} | [{"src_ip":"127.0.0.1","msg":"hello"},{"src_ip":"127.1.0.1","msg":"hello"}] |
パラメーター処理とノード実行フロー
ノードパラメーターの抽出:すべての必須の上流ノードの実行が完了した後、システムは現在のノードの入力構成に基づいて、実際の入力データを抽出します。抽出プロセスについては、以下で詳しく説明します。
ノードの実行:ノードの入力パラメーターがアセンブルされた後、システムは同一のパラメーターセットを重複排除し、コンポーネントアクションを実行します。
説明アクションが複数のパラメーター値のセットを受け入れる場合、アクションは自動的に複数回実行されます。
たとえば、侵害されたアプリケーションのすべてのサーバー (複数のサーバー) で「悪意のあるファイルのパージ」アクションを実行するには、サーバー IP パラメーターを
${node1.datalist.*.ip}に設定します。システムはループを必要とせずに、各 IP アドレスで自動的にアクションを実行します。出力結果の集約と重複排除:ノードが複数回実行された後、システムは結果を集約し、自動的に重複排除します。すべてのフィールドが同一である場合、エントリは重複と見なされます。
重複排除前:
[ { "a":"11", "b":"22" }, { "a":"11", "b":"22" }, { "a":"11", "b":"33" } ]重複排除後:
[ { "a":"11", "b":"22" }, { "a":"11", "b":"33" } ]
パラメーター抽出プロセス
単一データソース
任意の深さの複雑な JSON 構造は、ツリーと見なすことができます。JSON からパラメーターを抽出する原則は次のとおりです:同じ深さの兄弟関係は維持され、先祖ノードは展開され、兄弟でも先祖でもないフィールドはデカルト積を形成します。
任意の深さのデータを自動的に抽出します。例:

兄弟関係の維持:JSON 構造の同じレベルにあるフィールドはペアのままです。

先祖ノードの展開:親ノードに複数の子がある場合、子の数に合わせて展開されます。

兄弟でも先祖でもないノードはデカルト積を形成:2つのフィールドに兄弟関係も先祖関係もない場合、すべての組み合わせが生成されます。

複数データソース
個々のデータソースの抽出結果にデカルト積を適用します。
