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

CLI node

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

CLI node はフローを簡素化するのに役立ちます。たとえば、単一の CLI node で aws ec2 attach-volume コマンドを実行できます。通常の AWS ノードを使用する場合は、DescribeInstances(検証)、DescribeVolumes(状態チェック)、AttachVolume の 3 つのノードを連結する必要があります。

Before you begin

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

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

Configure the CLI node

CLI node を選択すると、サイドパネルの 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 node で接続変数を選択すると、CloudFlow はスクリプトを実行する前に、その変数を基になる接続 ID に解決します。接続変数を更新すると、ノード自体を編集しなくても、CLI node が使用する接続が切り替わります。

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

    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 node の場合と異なり、これらの参照はライブオブジェクトではありません。プレーンテキストに置き換えられます。独自のクォートやバックスラッシュを追加する場合は注意してください。CloudFlow の内部フォーマットを囲む形になり、パースエラーの原因となる可能性があります。

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

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

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

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

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

Execution limits

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

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

  • Maximum execution time: 10 秒。スクリプトがこれを超えると、ノードはタイムアウトエラーで失敗します。

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

GCS object metadata

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

注意

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

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

Examples

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

List GCS buckets

次のスクリプトは、GCP 接続が構成されている場合に Google Cloud Storage の buckets を一覧表示します。コマンドは JSON を直接出力するため、後続ノードは配列またはそのフィールドを参照できます(たとえば、高度な参照とスキーマを使用して)。

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

List S3 buckets

AWS 接続とアカウントを選択すると、代わりに S3 buckets を一覧表示できます。

aws s3api list-buckets --output json

List running EC2 instances

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 node を使用してください。

See also