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

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

始める前に

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

    API を有効にする

  3. または、ターミナルで次のコマンドを入力します。
    gcloud services enable cloudscheduler.googleapis.com

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

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

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

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

  2. Cloud Scheduler コマンドを実行するプリンシパルが Identity and Access Management(IAM)サービス アカウントとして機能できるように、プリンシパルがサービスになりすますことを許可するロールを付与します

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

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

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

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • SERVICE_ACCOUNT_NAME: 前に作成したサービス アカウントの名前です。
  4. 認証用に以前に作成したサービス アカウントを使用して、ワークフローをトリガーする Cloud Scheduler ジョブを作成します。

    Console

    1. ワークフローをスケジュール設定するには、Cloud Console の [ワークフロー] ページに移動します。

      [ワークフロー] に移動

    2. [ワークフロー] ページで、ワークフローを選択して詳細ページに移動します。

    3. [ワークフローの詳細] ページで [編集 ] を選択します。

    4. [ワークフローの編集] ページで、[新しいトリガーを追加] > [Cloud Scheduler] を選択します。

      [スケジューラ ジョブの作成] ペインが開きます。

    5. スケジュールを定義する

      1. [名前] フィールドに、Cloud Scheduler ジョブの名前を入力します。同じリージョン内のジョブ全体で一意である必要があります

      2. [リージョン] リストで、適切なリージョンを選択します。たとえば、us-central1 などです。

      3. [頻度] フィールドで、unix-cron 形式で定義した時間間隔を指定します。たとえば、5 分ごとに実行するようにワークフローをスケジュールするには、「*/5 * * * *」と入力します。

      4. [タイムゾーン] リストで、指定したスケジュールを Cloud Scheduler が解釈するために使用するタイムゾーンを選択します。国で検索することができます。

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

    7. 実行内容を構成します

      1. [ワークフローの引数] フィールドに、実行前にワークフローに渡すランタイム引数を指定します。引数は JSON 形式にする必要があります。例: {"firstName":"Sherlock", "lastName":"Holmes"}ワークフローでランタイム引数を使用しない場合は、デフォルトの {} を受け入れるか、フィールドを空白のままにします。

      2. [ワークフローのコールログレベル] リストで、ワークフローの実行中に適用するコールロギングのレベルを選択します。デフォルトの [ログなし] を使用するか、次のいずれかを選択できます。

        • すべてのコール: サブワークフローまたはライブラリ関数のすべての呼び出しとその結果を記録します。
        • エラーのみ: 例外が原因で呼び出しが停止した場合にのみログに記録されます。
      3. [サービス アカウント] リストで、以前に作成したサービス アカウントを選択します。

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

      既存のワークフローを更新する場合は、ワークフローを再デプロイする必要はありません

      Cloud Scheduler ジョブは、[ワークフローの詳細] ページの [トリガー] タブに一覧表示されます。

    9. ジョブを更新または削除するには、ワークフローを編集する必要があります。

      1. [ワークフローの詳細] ページで [編集 ] を選択します。
      2. [トリガー] セクションで、更新または削除するジョブを見つけます。
      3. [リソースを編集] または [リソースを削除] をクリックします。

    gcloud

    1. ターミナルを開いて、次のコマンドを入力します。

      gcloud scheduler jobs create http JOB_NAME \
      --schedule="FREQUENCY" \
      --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/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_ID.iam.gserviceaccount.com"

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

      • JOB_NAME: Cloud Scheduler ジョブに付ける名前です。
      • FREQUENCY: unix-cron 形式を使用して定義する時間間隔。たとえば、5 分ごとに実行するようにワークフローをスケジュールするには、「*/5 * * * *」と入力します。
      • PROJECT_ID: Google Cloud プロジェクトの ID。
      • REGION_NAME は、ワークフローが存在するリージョンです(us-central1 など)。
      • WORKFLOW_NAME: 実行をスケジュールするワークフローの名前です。
      • DOUBLE_ESCAPED_JSON_STRING: 渡す引数を JSON エンコードしたものです。引用符で囲まれた文字列に含まれる二重引用符は、バックスラッシュ(\)を使用してエスケープします(例: --message-body="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}")。
      • TIME_ZONE: 指定したスケジュールを解釈するために Cloud Scheduler で使用されるタイムゾーンです。 例: America/New_York
      • SERVICE_ACCOUNT_NAME: 前に作成したサービス アカウントの名前です。
    2. プロジェクト内のすべてのジョブを一覧表示するには:

      gcloud scheduler jobs list

    3. ジョブを削除するには:

      gcloud scheduler jobs delete JOB_NAME

これで、定義した頻度に従ってワークフローが実行されるようになります。

次のステップ