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

CLI ノード

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

CLI ノードは、フローを簡潔にするのに役立ちます。例えば、aws ec2 attach-volume コマンドを 1 つの CLI ノード内で実行できます。通常の 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) を選択します。接続は必須であり、スクリプトはその接続の認証情報で実行されます。

    直接接続、または接続変数を選択できます。接続変数を使用すると、接続を 1 か所で管理し、複数ノードで再利用できます。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: 出力を 1 つのフィールドとして参照します。単純な戻り値に使用します。

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

実行の制限事項

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

  • Sandbox tools: CLI サンドボックスにはシェルと、接続に応じて gcloud または aws が提供されます。Python などその他のランタイムは利用できません。上流ノードの出力に対する JSON 変換やフィルタリングには、代わりに Code node を使用してください。

  • 最大実行時間: 10 秒。これを超えると、ノードはタイムアウトエラーで失敗します。

  • レートリミット: サンドボックスでレートリミットが適用される場合があります。これを超えると、ノードはレートリミットエラーで失敗します。

GCS オブジェクトメタデータ

フローで Google Cloud Storage のオブジェクトメタデータが必要な場合は、gcloud を使用して JSON メタデータを直接返すことができます。

注意

これは GCS オブジェクトのメタデータのみを返します。GCS オブジェクトのファイル内容の取得はまだサポートされていません。これは、storage.objects.get アクションで alt=media クエリパラメータを使用する場合も同様です。gcloud を使用してファイル内容をダウンロードしフィルタリングするための CLI ノードによる回避策はありません。この制限は、PII やシークレットなどの機密ファイル内容が CloudFlow の結果や実行履歴に永続化されることを防ぎ、また大きなファイルサイズに対するシステムの安定性を維持するのに役立ちます。

gcloud storage objects describe gs://my-bucket/path/to/file.csv --format=json

以下は、CLI ノードで使用できるスクリプト例です。

GCS bucket の一覧表示

次のスクリプトは、GCP 接続が設定されている場合に Google Cloud Storage の bucket を一覧表示します。コマンドは JSON を直接出力するため、後続ノードは配列やそのフィールドを参照できます(例えば、Advanced referencing とスキーマを組み合わせて利用できます)。

gcloud storage buckets list --format=json --limit=5

S3 bucket の一覧表示

AWS 接続とアカウントが選択されている場合は、代わりに S3 bucket を一覧表示できます。

aws s3api list-buckets --output json

実行中の EC2 インスタンスの一覧表示

AWS 接続とアカウントが選択されている場合は、実行中の EC2 インスタンスを一覧表示し、後続ノード向けに JSON 配列として返すことができます。AWS CLI がフィルタを適用し、出力形式を整形します。

aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[].Instances[].{InstanceId:InstanceId,State:State.Name}' \
--output json

上流ノード(例: AWS の Describe instances アクションノード)の出力をフィルタリングまたは変換するには、後続ステップで Code node または Transform・Filter ノードを使用してください。

関連情報