Workflows のスケジュール

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

目標

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

費用

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

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

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

始める前に

  1. App Engine アプリの作成など、Cloud Scheduler 用に環境を設定します。
  2. Workflows API を有効にします。

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

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(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.iam.gserviceaccount.com" \
          --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.iam.gserviceaccount.com" \
          --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.iam.gserviceaccount.com

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

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

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

コンソール

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

    Cloud Scheduler に移動

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

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

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

  5. [