実行リクエストでのランタイム引数渡し

このページでは、ワークフロー実行リクエストでランタイム引数を渡し、ワークフロー変数を使用してそれらの引数にアクセスする方法について説明します。

ランタイム引数を受け取るワークフローの設定

実行リクエストの一部として渡すランタイム引数を使用するワークフローを作成できます。ランタイム引数を受け取るようにワークフローを設定するには:

  1. 手順に沿って新しいワークフローを作成するか、既存のワークフローを選択して更新しますが、まだデプロイはしないでください。

  2. メイン ワークフローの定義に params フィールドを追加します。引数名が角かっこ内にあり、メイン ワークフローが main ブロック内にあることを確認します。

    YAML

    main:
      params: [ARG_NAME]
      steps:
        ...
    

    JSON

    {
      "main": {
        "params": ["ARG_NAME"],
        "steps": [
          ...
        ]
        ...
      }
    }
      

    main ブロックは、有効な JSON データ型の名前(配列、オブジェクト、文字列など)である単一の引数を受け入れます。

    おすすめの方法として、複数の名前付き引数を使用してオブジェクトを渡すと、目的の理解や引数の追加が簡単になります。また、その後ドット表記を使用して引数にアクセスすることもできます。

    他のサブワークフローには複数の引数を指定できます。

    たとえば、次のワークフローは、ランタイムの引数として渡された姓と名の人に対する「Hello」というあいさつを返します。

    YAML

    main:
      params: [args]
      steps:
        - step1:
            assign:
              - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"}
        - step2:
            return: ${outputVar}
    

    JSON

    {
      "main": {
        "params": [
          "args"
        ],
        "steps": [
          {
            "step1": {
              "assign": [
                {
                  "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
                }
              ]
            }
          },
          {
            "step2": {
              "return": "${outputVar}"
            }
          }
        ]
      }
    }
      
  3. ワークフローをデプロイして、作成または更新を完了します。

実行リクエストでデータを渡す

ランタイム引数を受け取るようにワークフローを設定したら、{"firstName":"Workflows","lastName":"User"} などの JSON 形式の文字列を、実行リクエストのワークフローに渡すことができます。

gcloud

ワークフローの実行に使用する gcloud workflow execute コマンドに --data フラグを追加します。このフラグは、データの JSON 文字列を受け取ります。たとえば、firstNamelastName を前のワークフロー例に渡すには、次のようにします。

gcloud workflows run WORKFLOW_NAME \
--data='{"firstName":"FIRST","lastName":"LAST"}'

以下を置き換えます。

  • WORKFLOW_NAME: ワークフローの名前
  • FIRST: ワークフローの firstName に渡す文字列
  • LAST: ワークフローの lastName に渡す文字列

出力される表示は、次のようになります。

Waiting for execution [EXECUTION_ID] to complete...done
.
argument: '{"firstName":"Workflows","lastName":"User"}'
endTime: '2020-11-18T23:28:36.134741660Z'
name: projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID
result: '"Hello, Workflows User!"'
startTime: '2020-11-18T23:28:36.003269841Z'
state: SUCCEEDED
workflowRevisionId: 000001-ae2

Console

  1. Google Cloud Console の [ワークフロー] ページから、実行するワークフローを選択します。
    [ワークフロー] ページに移動

  2. ワークフローの [詳細] ページで、 [実行] をクリックします。

  3. [ワークフローの実行] ページが表示されたら、パラメータ名と引数値({"firstName":"Workflows","lastName":"User"} など)を含む JSON 文字列を [入力] 領域に入力します。

    JSON 文字列の例が入力された入力領域

  4. [実行] をクリックします。Cloud Console に実行結果が表示されます。

    実行の結果、「Hello, Workflows User!」という出力が表示されます。

REST API

  1. ワークフローの実行に使用するコマンドに data フラグを追加します。data の値は、エスケープされたパラメータ値のペアを 1 つ以上含む引数を持つ JSON 形式の文字列です。たとえば、firstNamelastName を前のワークフロー例に渡すには、次のようにします。

    curl --request POST --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    --header 'Content-Type: application/json' --data '{"argument":"{\"firstName\":\"FIRST\",\"lastName\":\"LAST\"}"}' \
    "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/WORKFLOW_NAME/executions"
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクトの名前
    • WORKFLOW_NAME: ワークフローの名前
    • FIRST: ワークフローの firstName に渡す文字列
    • LAST: ワークフローの lastName に渡す文字列

    出力される表示は、次のようになります。

    {
      "name": "projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID",
      "startTime": "2020-11-09T23:51:31.765761331Z",
      "state": "ACTIVE",
      "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}",
      "workflowRevisionId": "000001-08c"
    }
     ```
    
  2. 実行結果を取得するには、次のコマンドを実行します。

    curl --request GET --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    --header 'Content-Type: application/json' \
    "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID"
    

    EXECUTION_ID は、最初のコマンドが出力した ID に置き換えます。

    この出力には、次のような行が含まれます。

    "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}",
    "result": "\"Hello, Workflows User!\"",
    

REST API を使用してワークフローを実行する方法については、ワークフローの実行をご覧ください。

ランタイム引数にアクセスする

このサンプルは、実行リクエストの一部としてワークフローに渡されるランタイム引数にアクセスします。すべての引数は同じマップに保存され、メイン ワークフローのパラメータとして宣言されます。

このワークフローを実行するときは、次の形式を使用してランタイム引数を渡します。

{"firstName":"Sherlock", "lastName":"Holmes"}

YAML

main:
  params: [args]
  steps:
    - step1:
        assign:
          - outputVar: ${"Hello " + args.firstName + " " + args.lastName}
    - step2:
        return: ${outputVar}

JSON

{
  "main": {
    "params": [
      "args"
    ],
    "steps": [
      {
        "step1": {
          "assign": [
            {
              "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}"
            }
          ]
        }
      },
      {
        "step2": {
          "return": "${outputVar}"
        }
      }
    ]
  }
}

次のステップ