Workflows のスケジュール

このチュートリアルでは、Cloud Scheduler を使用してワークフローを自動的に実行し、ワークローが特定のスケジュール(この場合は 5 分ごと)で実行されるようにする方法について説明します。

ランタイム引数を受け取るワークフローを作成する

ワークフローは、Workflows 構文で記述された一連のステップで構成され、YAML 形式または JSON 形式のいずれでも記述できます。ワークフローを作成したら、デプロイして実行できるようにします。

コンソール

  1. Google Cloud コンソールで、[ワークフロー] ページに移動します。

    [ワークフロー] に移動

  2. [作成] をクリックします。

  3. 新しいワークフローの名前として「myFirstWorkflow」を入力します。

  4. リージョンには us-central1 を選択します。

  5. 以前に作成したサービス アカウントを選択します。

  6. [次へ] をクリックします。

  7. ワークフロー エディタで、次のワークフローの定義を入力します。

    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}"
            }
          }
        ]
      }
    }
      

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

  8. [デプロイ] をクリックします。

gcloud

  1. ターミナルを開きます。
  2. 次のワークフロー定義を YAML または JSON ファイル(myFirstWorkflow.yamlmyFirstWorkflow.json など)として保存します。

    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}"
            }
          }
        ]
      }
    }
      

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

  3. 次のコマンドを入力してワークフローをデプロイします。

    gcloud workflows deploy myFirstWorkflow \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    以前に作成したワークフロー定義ファイルの形式に応じて、yaml_OR_jsonyaml または json に置き換えます。

ワークフローをスケジュールする

以前に作成したサービス アカウントを使用して、ワークフローをトリガーする Cloud Scheduler ジョブを作成します。

コンソール

  1. Google Cloud コンソールで [Cloud Scheduler] ページに移動します。

    Cloud Scheduler に移動

  2. [ジョブを作成] をクリックします。

  3. [名前] を my-workflow-job に設定します。

  4. [頻度] に、以下を入力します。

    */5 * * * *
    これにより、5 分ごとにジョブが実行されます。間隔は unix-cron 形式を使用して定義されます。

  5. [タイムゾーン] で、国とタイムゾーンを選択します。

    たとえば、米国とロサンゼルスや太平洋夏時間(PDT)を選択します。

  6. [続行] をクリックします。

  7. [ターゲット タイプ] で [HTTP] を選択します。

  8. [URL] に以下のように入力します。

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
    

  9. [HTTP メソッド] はデフォルトの POST のままにします。

  10. 次の 2 つの HTTP ヘッダーを追加します。

    • 名前: Content-Type、値: application/octet-stream
    • 名前: User-Agent、値: Google-Cloud-Scheduler
  11. [本文] に以下のように入力します。

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

    これは、ワークフローの引数の JSON エンコードを渡します。この場合、名は「Sherlock」、姓は「Holmes」です。文字列に含まれる二重引用符はバックスラッシュ(\)を使用してエスケープします。

  12. [Auth ヘッダー] で [OAuth トークンを追加] を選択します。

  13. 以前に作成したサービス アカウントを入力します。

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    https://www.googleapis.com/auth/cloud-platform のデフォルトが使用されるため、スコープを指定する必要はありません。

  14. その他の値はすべてデフォルトのままにして、[作成] をクリックします。

gcloud

次のコマンドを入力して、my-workflow-job というジョブをスケジュールします。

gcloud scheduler jobs create http my-workflow-job \
    --schedule="*/5 * * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \
    --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
    --time-zone="America/Los_Angeles" \
    --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"

間隔は unix-cron 形式を使用して定義されます。

message-body フラグを使用すると、ワークフローの引数の JSON エンコードを渡します。この場合、名は「Sherlock」、姓は「Holmes」です。文字列に含まれる二重引用符はバックスラッシュ(\)を使用してエスケープします。

これで、ワークフローは 5 分ごとに実行されるようになります。

gcloud scheduler フラグの詳細と、ワークフローの実行中に各呼び出しステップがログに記録されるようにコールロギングを適用する方法については、ワークフローをスケジュールするgcloud リファレンスをご覧ください。

ジョブを実行して結果を確認する

コンソール

  1. Google Cloud コンソールで [Cloud Scheduler] ページに移動します。

    Cloud Scheduler に移動

    ジョブが表示されない場合は、ページの更新が必要になることがあります。

  2. my-workflow-job という名前のジョブで、[今すぐ実行] をクリックします。

    結果」の値が 「成功」に更新されます。

  3. Google Cloud コンソールで、[ワークフロー] ページに移動します。

    [ワークフロー] に移動

  4. ワークフローのリストから、[myFirstWorkflow] をクリックして詳細ページを開きます。

    ワークフローの実行状態が「完了」になっているはずです。

  5. ワークフローの実行 ID をクリックして詳細ページを開き、ワークフローの結果を出力ペインに表示します。

    出力は「Hello, Sherlock Holmes!」となります。

gcloud

  1. Cloud Scheduler ジョブを実行してワークフローを実行します。

    gcloud scheduler jobs run my-workflow-job
    
  2. ワークフローの実行 ID を取得します。

    gcloud workflows executions list myFirstWorkflow
    

    次のような出力(実行 ID は太字で表示)が表示されます。

    projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. ワークフローの実行結果を取得します。

    gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow

    EXECUTION_ID は、前の手順で返された実行 ID で置き換えます。

    出力は次のようになります。

    argument: '{"firstName":"Sherlock","lastName":"Holmes"}'
    endTime: '2021-09-09T15:15:00.869350639Z'
    name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
    result: '"Hello, Sherlock Holmes!"'
    startTime: '2021-09-09T15:15:00.839175480Z'
    state: SUCCEEDED
    workflowRevisionId: 000001-4f9

これで完了です。これで、特定のスケジュールでワークフローを自動的に実行する Cloud Scheduler ジョブが正常に作成されました。