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 ジョブが正常に作成されました。