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

CLI ノード

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

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

Before you begin

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

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

Configure the CLI node

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
    ヒント

    スクリプトエディタは $nodes の補完をサポートしています。これを使ってノード名やパスを挿入してください。

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

    • Basic referencing: 出力を 1 つのフィールドとして参照します。シンプルな戻り値に使用します。

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

Execution limits

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

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

  • Rate limit: サンドボックスはレート制限を課す場合があります。これを超えると、ノードはレート制限エラーで失敗します。

Examples

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

See also