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

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

    Console

    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

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

次のステップ