Workflows のスケジュール

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

目標

  1. ランタイム引数を受け取ることができるワークフローを作成してデプロイします。
  2. ワークフローをトリガーし、正しい形式の JSON 引数を渡して 5 分ごとにワークフローを実行する Cloud Scheduler ジョブを作成します。

費用

このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーの方は、無料トライアルをご利用いただける場合があります。

始める前に

  1. Cloud Scheduler 用に環境を設定します。 App Engine アプリの作成などです。
  2. ワークフロー API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください

    API の有効化

  3. このチュートリアルで使用するデフォルトの場所を設定します。
      gcloud config set workflows/location REGION
    REGION は、サポートされている Workflows のロケーションに置き換えます。
  4. ワークフローが使用するサービス アカウントを作成します。例: sa-name
      gcloud iam service-accounts create sa-name
  5. アカウントがワークフローをトリガーする権限を持つよう、サービス アカウントに workflows.invoker のロールを付与します。
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID." \
          --role "roles/workflows.invoker"
  6. PROJECT_ID は、 Google Cloud プロジェクト ID に置き換えます。
  7. サービス アカウントに logging.logWriter ロールを付与します。
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:sa-name@PROJECT_ID." \
          --role "roles/logging.logWriter"

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

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

コンソール

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

    [ワークフロー] に移動

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

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

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

  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 \
        --location=us-east1 \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.

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

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

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

コンソール

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

    Cloud Scheduler に移動

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

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

  4. [リージョン] で [us-east1(サウスカロライナ)] を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

gcloud

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

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

間隔は 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 --location="us-east1"
    
  2. ワークフローの実行 ID を取得します。

    gcloud workflows executions list myFirstWorkflow
    

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

    projects/316710615161/locations/us-east1/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-east1/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 ジョブが正常に作成されました。

クリーンアップ

チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金されないようにする最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. コンソール Google Cloud で [**リソースの管理**] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。

Cloud Scheduler ジョブの削除

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

    Cloud Scheduler に移動

  2. ジョブの横のチェックボックスを選択します。

  3. ページの上部にある [削除] をクリックして、削除操作を確定します。

ワークフローの削除

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

    [ワークフロー] に移動

  2. ワークフローを選択します。

  3. ページの上部にある [削除] をクリックします。ワークフローの名前を入力し、削除操作を確定します。

App Engine アプリを無効にする

App Engine アプリを無効にすると、アプリケーション データと設定は保持されますが、アプリケーションによるインスタンスの実行やリクエストの処理が停止されます。

  1. コンソールの Google Cloud [アプリケーションの設定] ページに移動します。

    [アプリケーション設定] に移動

  2. [アプリケーションを無効にする] をクリックします。

  3. 表示される手順に沿って操作します。

次のステップ