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

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

始める前に

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the 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 ジョブを作成します。

    通話ログを適用する場合は、Google Cloud コンソールの [ワークフロー] ページで通話ログを構成する必要があります。詳しくは、以下の手順を参照してください。

    コンソール

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

      [ワークフロー] に移動

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

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

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

      [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

ワークフローは、定義した頻度で実行されるようになりました。

次のステップ