Cloud Scheduler を使用したワークフローのスケジュール設定

このページでは、Cloud Scheduler を使用して特定のスケジュール(毎週月曜日の午前 9 時や 15 分ごとなど)でワークフローを実行する方法について説明します。

始める前に

  1. スケジュール設定するワークフローがない場合は、作成します。
  2. Cloud Scheduler API を有効にします。

    API を有効にする

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

  1. Cloud Scheduler が Workflows API にリクエストを行えるように、サービス アカウントを作成します。

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME は、6~30 文字の名前に置き換えます。小文字の英数字とハイフンを使用できます。作成したサービス アカウントの名前は変更できません。

  2. Cloud Scheduler コマンドを実行するアカウントに、サービス アカウントを使用する権限を付与します。

  3. 新しいサービス アカウントがワークフローをトリガーする権限を持つように、このアカウントに workflows.invoker ロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --role roles/workflows.invoker

    次のように置き換えます。

    • PROJECT_NAME: Google Cloud Platform プロジェクトの名前です。
    • SERVICE_ACCOUNT_NAME は、前に作成したサービス アカウントの名前です。
  4. 認証用に以前に作成したサービス アカウントを使用して、ワークフローをトリガーする Cloud Scheduler ジョブを作成します。たとえば、5 分おきにワークフローが実行されるようにスケジュールするには(unix-cron 形式を使用して間隔を定義します):

    gcloud scheduler jobs create http JOB_NAME \
      --schedule="*/5 * * * *" \
      --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
      --message-body="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
      --time-zone="TIME_ZONE" \
      --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"

    次のように置き換えます。

    • JOB_NAME: Cloud Scheduler ジョブに付ける名前です。
    • PROJECT_NAME: Google Cloud Platform プロジェクトの名前です。
    • REGION_NAME は、ワークフローが存在するリージョンです(us-central1 など)。
    • WORKFLOW_NAME: 実行をスケジュールするワークフローの名前です。
    • DOUBLE_ESCAPED_JSON_STRING: 渡す引数を JSON エンコードしたものです。引用符で囲まれた文字列に含まれる二重引用符は、バックスラッシュ(\)を使用してエスケープします(例: --message-body="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}")。
    • TIME_ZONE: 指定したスケジュールを解釈するために Cloud Scheduler で使用されるタイムゾーンです。
    • SERVICE_ACCOUNT_NAME: 前に作成したサービス アカウントの名前です。

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

次のステップ