CLI ノード
CLI ノードは、フロー内のステップとしてカスタム CLI コマンドを実行し、構造化された出力を次のノードに受け渡すことができます。スクリプトはセキュアなサンドボックス環境で実行されます。AWS または GCP の接続を必ずアタッチしてください。スクリプトはその接続の認証情報で実行され、gcloud または aws があらかじめインストールされています。
CLI ノードはフローの簡素化に役立ちます。例えば、単一の CLI ノードで aws ec2 attach-volume コマンドを実行できます。通常の AWS ノードを使う場合は、DescribeInstances(検証)、DescribeVolumes(状態チェック)、AttachVolume の 3 つのノードを連結する必要があります。
開始前に
CLI ノードを追加する前に、AWS または GCP の接続を作成してください。接続の概要については、Connections を参照してください。
CLI ノードを設定する
CLI ノードを選択すると、サイドパネルに Parameters タブが開きます。

-
Cloud connection provider:Google Cloud(GCP) または Amazon Web Services(AWS) を選択します。接続は必須です。スクリプトはその接続の認証情報で実行されます。
(AWS のみ)Account と Region:接続が Amazon Web Services(AWS) の場合、アカウントと必要に応じてリージョンを選択します。未設定の場合、Region は全リージョンがデフォルトになります。

-
Add script または Edit script を選択してスクリプトエディタを開きます。スク リプトはサンドボックスで実行されます。接続を選択している場合、選択したプロバイダ向けに
gcloudまたはawsが利用可能で、認証済みです。標準出力(stdout)には単一の JSON 値を出力してください。これにより、下流のノードがその出力の個々のフィールドを参照したり、条件で使用したり、次のステップに渡せるようになります。つまり、有効な JSON を生成することが、CLI ノードの結果をフロー全体で利用可能にする方法です。
フロー内の先行ノードの出力は
$nodes["<Node name>"]を使って参照できます。入れ子の値に到達するためにオプションのパスを追加できます。例えば、$nodes["Manually start"][0].results[0].currentDateのように指定します。# Reference previous node output in your script with $nodes["<node name>"]
echo $nodes["Manually start"][0].results[0].currentDateヒントスクリプトエディタは
$nodesの補完をサポートします。これを使ってノード名やパスを挿入してください。 -
Referencing the output:フロー内の他のノードが CLI ノードの出力をどのよう に参照できるかを定義します。
-
Basic referencing:出力を単一のフィールドとして参照します。単純な戻り値に使用します。
-
Advanced referencing:JSON スキーマを定義し、出力内の特定のフィールドを下流ノードが個別に参照できるようにします。これは Code node と同様に動作します。
-
出力スキーマを設定する
Advanced referencing を選択すると、CLI ノードの出力内の特定のフィールドを下流ノードが参照できるように、JSON スキーマを定義します。CloudFlow では、出力スキーマは、実行ログに表示される results、message、context のような実行メタデータやランタイムのラッパーではなく、ノードがコードまたは設定から返す値だけ(他のノードが実際に使用するペイロード)を記述します。平たく言えば、ノードの機能的な出力だけを単独の JSON ドキュメントとして取り出した場合に得られる JSON 値のスキーマを定義してください。その周囲のラッパーはモデル化しないでください。
出力スキーマを定義する際は次の点に留意してください。
-
トップレベルの型 を正確に一致させます:
object、array、string、number、boolean、null。 -
形状を 再帰的に 定義します。
- object の場合は、
properties(および任意でrequired)を定義します。 - array の場合は、
items(各要素のスキーマ)を定義します。
- object の場合は、
-
CloudFlow の実行ラッパー(例:
results、message、context)をモデル化しないでください。これらはランタイムのラッパーであり、ノードの機能的な出力ではありません。
パターン例:
- ノードが object を返す場合:
{ "type": "object", "properties": { "foo": { "type": "string" } } }
- ノードが array を返す場合:
{ "type": "array", "items": { "type": "number" } }
実行リミット
スクリプトは次の制限があるサンドボックス環境で実行されます。
-
最大実行時間:10 秒。これを超えると、ノードはタイムアウトエラーで失敗します。
-
レート制限:サンドボックスはレート制限を適用する場合があります。超過すると、ノードはレート制限エラーで失敗します。
例
次のスクリプトは、GCP 接続が構成されている場合に Google Cloud Storage のバケットを一覧表示します。コマンドは直接 JSON を出力するため、下流ノードは配列やそのフィールドを参照できます(例えば、Advanced referencing とスキーマを使用)。
gcloud storage buckets list --format=json --limit=5
AWS の接続とアカウントを選択している場合は、代わりに S3 バケットを一覧表示できます。
aws s3api list-buckets --output json
上流ノード(例えば、AWS の Describe instances ノード)の出力を参照・フィルタするには、$nodes を使用してから JSON を処理します。次のスクリプトは、Describe instances という名前の上流ノードの最初の結果を読み取り、running 状態の EC2 インスタンスだけにフィルタし、下流ノード向けに JSON 配列を出力します。ノード名は自身のものに置き換えてください。
# Filter running EC2 instances from upstream Describe instances node
echo '$nodes["Describe instances"][0].results[0]' | python3 -c "
import json, sys
data = json.load(sys.stdin)
instances = [
{\"InstanceId\": i[\"InstanceId\"], \"State\": i[\"State\"][\"Name\"]}
for r in data.get(\"Reservations\", [])
for i in r.get(\"Instances\", [])
if i.get(\"State\", {}).get(\"Name\") == \"running\"
]
print(json.dumps(instances))
"
$nodes["Describe instances"] のノード名は、フロー内の上流ノードの正確な名前(スペースや大文字小文字を含む)と一致している必要があります。
関連項目
- Nodes
- Code node — スクリプトと出力の参照
- Connections
- Create a GCP connection
- Create an AWS connection