メインコンテンツへスキップ

CLI ノード

CLI ノードを使用すると、フロー内のステップとしてカスタム CLI コマンドを実行し、その構造化された出力を次のノードへ渡すことができます。スクリプトは安全なサンドボックス環境で実行されます。AWS または GCP 接続を必ず添付してください。スクリプトはその接続の認証情報で実行され、gcloud または aws が事前にインストールされています。

CLI ノードはフローを簡素化するのに便利です。例えば、単一の CLI ノードで aws ec2 attach-volume コマンドを実行できます。通常の AWS ノードを使う場合は、DescribeInstances(検証)、DescribeVolumes(状態の確認)、AttachVolume の 3 つのノードを連結する必要があります。

開始前に行うこと

CLI ノードを追加する前に、AWS または GCP 接続を作成してください。接続の概要については、Connections を参照してください。

複数のアクションノードや CLI ノードで同じ接続を再利用したい場合は、接続変数を作成してください。

CLI ノードの設定

CLI ノードを選択すると、サイドパネルに Parameters タブが表示されます。

CLI node Parameters tab showing connection, provider, script button, and output referencing

  • Cloud connection provider: Google Cloud (GCP) または Amazon Web Services (AWS) を選択します。接続は必須であり、スクリプトはその接続の認証情報で実行されます。

    直接の接続、または接続変数を選択できます。接続変数を使用すると、接続を一箇所で管理し、複数のノードで再利用できます。Connection ドロップダウンには、接続と接続変数の両方が表示されます。

    (AWS のみ)AccountRegion: 接続に Amazon Web Services (AWS) を選択した場合、アカウントと、必要に応じて地域を選択します。設定しない場合、Region のデフォルトは全リージョンになります。

    CLI node with AWS connection showing Account and Region fields

    CLI ノードで接続変数を選択すると、CloudFlow はスクリプト実行前にその変数を基になる接続 ID に解決します。接続変数を更新すると、ノード自体を編集しなくても、CLI ノードが使用する接続を変更できます。

  • Add script または Edit script を選択してスクリプトエディタを開きます。スクリプトはサンドボックス内で実行されます。接続を選択すると、選択したプロバイダ用に gcloud または aws が利用可能かつ認証済みになります。標準出力(stdout)には単一の JSON 値を出力するようにしてください。下流のノードはその出力から個々のフィールドを参照したり、条件で使用したり、次のステップへ渡したりできます。そのため、有効な JSON を生成することが、CLI ノードの結果をフロー全体で利用可能にするためのポイントになります。

    CLI script editor with $nodes example and completion

    フロー内の任意の前段ノードの出力は、$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

    フローのグローバル変数およびローカル変数には、$variables を使用してアクセスできます。グローバル変数には $variables.globalVariables.<name>、ローカル変数には $variables.localVariables.<name> を使用します。CloudFlow はコマンド実行前に $nodes および $variables をテキストインジェクションで処理します。各値は自動的にラップされ、スペースや特殊文字が正しく扱われます。Code ノードとは異なり、これらの参照はライブオブジェクトではありません。プレーンテキストに置き換えられます。独自の引用符やバックスラッシュを追加する場合は注意してください。CloudFlow の内部フォーマットをさらに囲む形になり、パースエラーの原因となる可能性があります。

    # Access flow variables
    echo $variables.globalVariables.projectRegion
    echo $variables.localVariables.retryCount
    ヒント

    スクリプトエディタは $nodes$variables の補完をサポートしています。ノード名や変数スコープ、変数名の挿入に活用してください。

  • Referencing the output: フロー内の他のノードが CLI ノードの出力をどのように参照できるかを定義します。このノードから後続ノードで値を参照する方法(例: + ボタン経由)については、Node parameters を参照してください。

    • Basic referencing: 出力を単一フィールドとして参照します。単純な戻り値に使用します。

    • Advanced referencing: 出力内の特定フィールドを下流ノードから個別に参照できるよう、JSON スキーマを定義します。スキーマの定義方法については、Output schema を参照してください。

実行制限

スクリプトはサンドボックス環境で、次の制限のもとで実行されます。

  • 最大実行時間: 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"] 内のノード名は、フロー内の上流ノードの名前(スペースや大文字・小文字を含めて)と完全に一致している必要があります。

参考情報