プレイブックコンポーネントパラメーターは、定数、変数、式、関数などの形式をサポートしています。パラメーター処理には、抽出、重複排除、ループ実行などの手順が含まれます。
パラメーターカテゴリ
機能別では、パラメーターはプレイブック入力パラメーター(開始ノード入力パラメーター)、プレイブック出力パラメーター(開始ノード出力パラメーター)、コンポーネント入力パラメーター、およびコンポーネント出力パラメーターに分類されます。
タイプ別では、パラメーターはシステムパラメーターとコンポーネントパラメーターに分類されます。
説明コンポーネントの実行中に、任意のノードからシステムのデフォルトパラメーターにアクセスできますが、コンポーネントパラメーターにはアクセスできません。
入力パラメーターと出力パラメーター
コンポーネント入力パラメーターは、カスタム定義することも、アップストリームノードからの出力とすることもできます。アップストリームノードの出力を選択する場合、アップストリームノードは、オーケストレーションパス上で到達可能な先行ノードである必要があります。
マルチパスシナリオでは、ノード名がグローバルに一意であることを確認する必要があります。
次の図の[ノード B] を例にとると、アップストリーム [ノード A] の出力とプレイブック入力パラメーターにアクセスできます。[ノード D] の出力には、同じブランチ上にないためアクセスできません。また、[ノード C] は [ノード B] の先行ノードではないため、[ノード C] の出力にもアクセスできません。
システムパラメーター
プレイブックのシステムパラメーター(開始ノードのデフォルトパラメーター)
システムのデフォルトパラメーターには、次の表の式を使用して任意のノードからアクセスできます。「event」は開始ノードの名前と見なすことができます。 ${event.parameter_name} 形式を使用してプレイブックシステムパラメーターにアクセスできます。
パラメーター | データ型 | 式 | 説明 |
_tenant_id | 文字列 | ${event._tenant_id} | プレイブックを呼び出す Alibaba Cloud アカウント ID。 |
_domain_id | 文字列 | ${event._domain_id} | ログインユーザーのロールステータス。
|
_trigger_user | 文字列 | ${event._trigger_user} | プレイブックをトリガーする Alibaba Cloud アカウント ID。RAM ユーザーが使用されている場合は、RAM ユーザー ID が返されます。 |
_region_id | 文字列 | ${event._region_id} | リージョン ID。 |
_req_uuid | 文字列 | ${event._req_uuid} | 現在のプレイブック実行タスクの一意の識別子。 |
parentTaskUuid | 文字列 | ${event.parentTaskUuid} | 親プレイブックの _req_uuid。このパラメーターは、子プレイブックが呼び出されたときに存在します。 |
parentTaskName | 文字列 | ${event.parentTaskName} | 親プレイブックの UUID。このパラメーターは、子プレイブックが呼び出されたときに存在します。 |
コンポーネント出力パラメーターのシステムパラメーター
任意のコンポーネントの出力結果には、次のシステムパラメーターが含まれます。カスタムパラメーターは datalist にカプセル化されています。 ${node_name.datalist.*} を使用して、すべての出力パラメーターを取得できます。
パラメーター | データ型 | 説明 |
datalist | JSONArray | コンポーネントが実行された後の出力パラメーター。 重要 コンポーネントからのカスタム出力パラメーターも datalist に格納されます。 |
total_data_successful | Int | コンポーネントの実行中に正常に処理されたデータ量。 |
total_data | Int | 実行中に処理されたデータ量。 |
total_data_with_dup | Int | 実行中に重複排除後に正常に処理されたデータ量。 |
total_exe_successful | Int | 現在のコンポーネントが正常に実行された回数。 |
total_exe | Int | 現在のコンポーネントが実行された回数。 |
status | ブール値 | 実行の成功ステータス。有効な値: true と false。 |
messageForUser | 文字列 | 実行が失敗した場合にユーザーが注目する必要があるエラーメッセージ。 |
message | 文字列 | 実行が失敗した場合にシステムから返されるエラーメッセージ。 |
failed_exe_detail | 文字列 | 実行が失敗した場合の詳細なエラー情報。 |
パラメーター形式
パラメーターは、定数、変数、式の 3 つの基本形式をサポートしています。また、これら 3 つの形式の組み合わせと、より複雑なネストもサポートしています。
形式 | 説明 | 例 |
定数 | 固定文字列 | Ali。 |
変数 | プレイブック入力パラメーターと先行ノードの出力パラメーターから値を抽出します | ${event.aliuid}。プレイブック入力パラメーターから aliuid を取得します。 |
式 | 埋め込み式と関数を使用して値を生成します。形式は <%=expression|function%> です。サポートされている関数については、「式に組み込まれている関数」をご参照ください。 | 式: Java 構文のみがサポートされています。例: <%=2*60*60%>。 関数: <%=currentTime()%>。 |
組み合わせ | 定数_変数_式 | 組み合わせの例: Ali_${event.aliuid}_<%=currentTime()%>_<%=2*60*60%>。コンポーネントが実行されると、変数と式が解析され、対応する値に置き換えられます: Ali_aliuid_現在の時刻_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 に基づいてリストに分割します。 | <%=splitStr("test,value",",")%> | [test, value] |
parseTimeMs | 時間形式の文字列をミリ秒に変換します。 | <%=parseTimeMs("2025-06-05 10:30:32","yyyy-MM-ddHH:mm:ss")%> | 1749090632000 |
currentTimeToMs | 現在のタイムスタンプをミリ秒に変換します。 | <%=currentTimeToMs()%> | 1749091369688 |
currentHourToMs | 現在の時刻のタイムスタンプをミリ秒に変換します。現在の時刻の 0 分 0 秒から計算されます。 | <%=currentHourToMs()%> | 1749088800000 |
currentDayToMs | 現在の日付のタイムスタンプをミリ秒に変換します。現在の日付の 0 時 0 分 0 秒から計算されます。 | <%=currentDayToMs()%> | 1749052800000 |
parseTimeMsWDefault | デフォルト値をサポートしてタイムスタンプをミリ秒に解析します。パラメーター 1 が空の場合、パラメーター 2 がデフォルト値として使用されます。 | <%=parseTimeMsWDefault("2025-06-05 10:30:32",1749091369688L)%> | 1749090632000 |
splitStrToJsonArray | 入力文字列を splitStr に基づいて JSONArray に分割します。 | <%=splitStrToJsonArray("test,value",",")%> | ["test","value"] |
concatListStr | コネクタを使用して文字列を連結します。 splitStr 関数と組み合わせて使用する必要があります。 | <%=concatListStr("|",splitStr("test,value",","))%> | test|value |
substring | 部分文字列を抽出します。 パラメーター 1: 抽出元の文字列。 パラメーター 2: 開始インデックス。 パラメーター 3: 終了インデックス。 | <%=substring("012345",0,3)%> | 012 |
remainStrStartEnd | 開始インデックスと終了インデックスの外側の文字を保持します。具体的には、inputStr の先頭から beginSize 文字と末尾から endSize 文字を保持し、5 つのアンダースコアで連結します。
| <%=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 文字列を JSON オブジェクトに変換します。 | <%=toJSONObject("{\"name\":\"test\",\"age\":12}")%> | {"name":"test","age":12} |
base64encode | 文字列に対して Base64 エンコーディングを実行します。 | <%=base64encode("abc")%> | YWJj |
base64decode | 文字列に対して Base64 デコードを実行します。 | <%=base64decode("YWJj")%> | abc |
replace | 文字列を置き換えます。
| <%=replace("abc123","abc","aaa")%> | aaa123 |
isNull | オブジェクトが空かどうかを判断します。 | <%=isNull("")%> | true |
変数パラメーター
プレイブックコンポーネントの実行中に、フロー内の先行ノードからパラメーターを取得する場合、コンポーネントで変数パラメーターを使用できます。プレイブック入力パラメーターの場合は、ノード名として event を使用します。これは開始ノードの出力パラメーターとして理解できます。したがって、プレイブックのオーケストレーション中にコンポーネント名を「event」に設定しないでください。
現在、ノード出力パラメーターに基づくデータ検索のみがサポートされています。
プレイブック入力パラメーター = 開始ノード出力パラメーター。
現在のノード入力パラメーター = 前のノード出力パラメーター。
構文形式
ノード出力パラメーターを取得するための構文は ${node_name.parameter_path} です。パスは jsonpath メソッドを使用し、任意の数のレイヤーを持つ JSON 形式をサポートしています。
JSONObject 形式の場合は、「.」を使用して下位レベルノードから直接データを取得します。 JSONArray 形式の場合は、「*」はすべてのデータを取得することを表し、数値インデックスも単一のデータを取得するためにサポートされています。次の例は、実行後の出力パラメーターを取得する方法を示しています。
タイプ
構文
説明
JSON 内のパラメーターを取得する
${node_name.datalist.*.parameter1.parameter2}
説明開始ノード出力パラメーター構文: ${event.parameter1.parameter2}。
parameter1 の下にある parameter2 データを取得します。
説明parameter1 の値は JSONObject 形式である必要があります。
JSON 配列内のすべてのデータを取得する
${node_name.datalist.*.parameter1.*.parameter2}
説明開始ノード出力パラメーター構文: ${event.parameter1.*.parameter2}。
parameter1 の下のすべての JSONObject から parameter2 データを取得します。
説明parameter1 の値は JSONArray 形式である必要があります。
JSON 配列内の単一のデータを取得する
${node_name.datalist.*.parameter1.[0].parameter2}
説明開始ノード出力パラメーター構文: ${event.parameter1.[0].parameter2}。
parameter1 の下の最初の JSONObject から parameter2 データを取得します
説明parameter1 の値は JSONArray 形式である必要があります。
構文規則を手動で記述するだけでなく、入力ボックスのドロップダウンリストからパラメーターを選択して対応する構文を生成することもサポートされています。デバッグが完了したら、これを行うことをお勧めします。次の図に示すように:

変数パラメーターを取得する
[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} です。次の表に、サポートされているデータ型の変換を示します。
データ型 | 説明 | サポートされているソース型 |
ブール値 | ブール型に変換します。有効な値: true と false。 |
|
Long | Long 型に変換します。 |
|
Int | Int 型に変換します。 | |
Double | Double 型に変換します。 | |
文字列 | 文字列型に変換します。 | すべての型が変換にサポートされています。 |
DateTime | 日付型に変換します。 |
|
JSONObject | JSONObject からキーと値を抽出して新しい JSONObject を形成します。 {} 形式の複数列データをパッケージ化するために使用されます。出力形式: {"fieldname":"fieldValue",...}。 | JSONObject 型のみがサポートされています。 |
JSONArray | JSONObject からキーと値を抽出して JSONArray を形成します。 [{}] 形式の複数行複数列データをパッケージ化します。データは単一行単一列データとして出力されます。 | JSONObject 型のみがサポートされています |
JSONObjectStr | JSONObject を文字列に変換します。 | JSONObject 型。 |
JSONArrayStr | JSONArray を文字列に変換します。 | JSONArray 型。 |
例:
JSONObject の例: プレイブック入力パラメーター: {"src_ip":"127.0.0.1","dst_ip":"127.0.0.2","msg":"hello"}。
${JSONObject:event}: event 全体を完全な JSON 文字列として出力します。
${JSONObject:event.src_ip}: event 内の src_ip から単一行単一列の JSON を作成します。結果: {"src_ip":"127.0.0.1"}。
${JSONObject:event.src_ip|msg}: event 内の src_ip フィールドと msg フィールドから単一行単一列の JSON 文字列を作成します。結果: {"src_ip":"127.0.0.1","msg":"hello"}。
${JSONArray:event}: event 全体を完全な JSONArray として出力します。
${JSONArray:event.src_ip}: event 内の src_ip から単一行単一列の JSONArray を作成します。結果: [{"src_ip":"127.22.22.1"}]。
${JSONArray:event.src_ip|msg}: event 内の src_ip フィールドと msg フィールドから単一行単一列の JSONArray を作成します。結果: [{"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}: 複数行に展開し、各行は JSON 文字列 {"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 で「悪意のあるファイルの消去」アクションを自動的に実行します。ループを作成して消去アクションを 1 つずつ実行する必要はありません。
出力結果の集計と重複排除: ノードの複数回の実行後、結果は集計され、自動的に重複排除されます。重複排除では、すべてのフィールドが同一の場合、エントリは重複と見なされます。例:
重複排除前
重複排除後
[ { "a": "11", "b": "22" }, { "a": "11", "b": "22" }, { "a": "11", "b": "33" } ][ { "a": "11", "b": "22" }, { "a": "11", "b": "33" } ]
パラメーターを抽出する
1 つのデータソースを処理する
任意の深さの複雑な JSON 形式は、ツリー構造として表示できます。JSON からパラメーターを抽出するための原則は、同じ深さの兄弟関係は変更されないままで、祖先ノードは展開され、兄弟でも祖先でもないノードは直積を受けます。
任意の深さのデータを自動的に抽出します。例:

同じ深さの兄弟関係は変更されないままです。例:

祖先の展開。例:

兄弟でも祖先でもないノードの場合は、直積を実行します。例:

複数のデータソースを処理する
個々のデータソースからの処理結果に対して直積を実行します。
