スケジュールに従ってサービスを実行する

Cloud Scheduler を使用してスケジュールに沿って安全に Cloud Run サービスをトリガーできます。これは cron ジョブを使用するのと同様です。

考えられるユースケースには、次のようなものがあります。

  • 時限的なバックアップの実行
  • 次のような繰り返しの管理タスクを実行します。
    • サイトマップの再生成
    • 古いデータ、コンテンツ、構成、リビジョンの削除
    • データシステム間のコンテンツの同期
    • 毎日受信するメール通知の処理
    • ダウンストリーム サービスに対するアクセスの確認と報告
  • 請求書などのドキュメントの生成

このページでは、同じ Google Cloud プロジェクト内で安全に Cloud Scheduler を Cloud Run と連携させて使用する方法を説明します。

始める前に

使用しているプロジェクトで Cloud Scheduler API を有効にします

サービスを作成してデプロイする

作成してデプロイするには:

  1. サービスの中で、スケジュールに従って実行するジョブを実装します。

  2. サービスが受け取りを想定しているジョブ リクエストのリクエスト タイプ(たとえば GETPOST)をメモします。サービスを呼び出すスケジュール ジョブを作成するときは、これに一致する HTTP メソッドを指定する必要があります。

  3. Cloud Run for Anthos on Google Cloud を使用している場合は、コンテナ内の ID を確認する必要があります。これを示す IAP サンプルコードをご覧ください。

  4. Cloud Scheduler で使用しているサービスをデプロイするときは、未承認の呼び出しを許可しないでください。

Cloud Scheduler 用のサービス アカウントを作成する

Cloud Scheduler に関連付けるサービス アカウントを作成し、そのサービス アカウントに Cloud Run サービスを呼び出す権限を付与する必要があります。既存のサービス アカウントを使用して、Cloud Scheduler を表すか、新たに作成することもできます。

サービス アカウントを作成し、Cloud Run サービスを呼び出す権限を付与するには、以下の手順を実行します。

Console

  1. Cloud Console で [サービス アカウント キーの作成] ページにアクセスします。

    [サービス アカウントの作成] ページ

  2. [サービス アカウント] リストから [新しいサービス アカウント] を選択します。

  3. [サービス アカウント名] フィールドに、サービス アカウントに使用する名前を入力します。

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

  5. 次の手順で使用するサービス アカウントのメールアドレスをコピーします。

  6. 権限を指定するように求められたら、[続行] をクリックします。

  7. Cloud Console で [Cloud Run サービス] ページにアクセスします。

    [サービス] ページに移動

  8. 表示されたリストからサービスを選択します。

  9. 必要に応じて、ページの右端にある [情報パネルを表示] / [情報パネルを非表示] をクリックして情報を表示します。

  10. [権限] タブを見つけ [メンバーを追加] をクリックします。

  11. サービス アカウントのメールアドレスを [新しいメンバー] 欄に貼り付けます。

  12. [ロール] プルダウン メニューから [Cloud Run] > [Cloud Run 起動元] の順に選択します。

  13. [保存] をクリックします。

コマンドライン

  1. サービス アカウントを作成します。

    gcloud iam service-accounts create SERVICE-ACCOUNT_NAME \
       --display-name "DISPLAYED-SERVICE-ACCOUNT_NAME"

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

    • SERVICE-ACCOUNT_NAME は、Google Cloud プロジェクト内で一意の小文字の名前(my-invoker-service-account-name など)に置き換えます。
    • DISPLAYED-SERVICE-ACCOUNT-NAME は、このサービス アカウントに対してコンソール上で表示する名前(My Invoker Service Account など)に置き換えます。
  2. Cloud Run では、サービス アカウントにサービスを呼び出す権限を付与します。

    gcloud run services add-iam-policy-binding SERVICE \
       --member=serviceAccount:SERVICE-ACCOUNT_NAME@PROJECT-ID.iam.gserviceaccount.com \
       --role=roles/run.invoker

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

    • SERVICE は、Cloud Scheduler によって呼び出されるようにするサービスの名前に置き換えます。
    • SERVICE-ACCOUNT_NAME は、サービス アカウントの名前に置き換えます。
    • PROJECT-ID は、Google Cloud プロジェクト ID に置き換えます。

Cloud Scheduler ジョブを作成する

指定した時間にサービスを呼び出すジョブを作成する必要があります。コンソールとコマンドラインのいずれかを使用できます。

ジョブを作成するには、コンソールまたは gcloud コマンドラインを使用できます。該当するタブをクリックしてください。

Console

  1. Cloud Scheduler コンソール ページにアクセスします。

    Cloud Scheduler に移動

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

    スクリーンショット

  3. ジョブの名前を指定します。

  4. 構成文字列を使用して、ジョブを実行する頻度(ジョブ間隔)を設定します。たとえば文字列 0 */3 * * * を指定すると、ジョブが 3 時間ごとに実行されます。ここで指定する文字列には、crontab に対応した任意の文字列を使用できます。

    詳細については、ジョブ スケジュールの構成をご覧ください。

  5. プルダウン リストから、ジョブの頻度に使用するタイムゾーンを選択します。

  6. ターゲットとして「HTTP」を指定します。

    1. たとえば、サービスの完全修飾された URL を指定します(たとえば、https://myservice-abcdef-uc.a.run.app など)。そのジョブがこの URL にリクエストを送信します。

    2. HTTP メソッドを指定します。このメソッドは、以前にデプロイした Cloud Run サービスが想定しているものと一致している必要があります。デフォルトは POST です。

    3. 必要に応じて、ターゲットに送信するデータを指定します。このデータは、HTTP メソッド POSTPUT のいずれかが選択されると、リクエストの本文に入れて送信されます。

    4. [その他] をクリックして認証設定を表示します。

    5. プルダウン メニューから [OIDC トークンを追加] を選択します。

    6. [サービス アカウント] フィールドに、以前に作成したサービス アカウントのメールアドレスをコピーします。

    7. [オーディエンス] フィールドに、サービスの完全な URL をコピーします。

  7. [作成] をクリックして、ジョブを作成して保存します。

gcloud

  1. ジョブを作成します。

    gcloud beta scheduler jobs create http test-job --schedule "5 * * * *" \
       --http-method=HTTP-METHOD \
       --uri=SERVICE-URL \
       --oidc-service-account-email=SERVICE-ACCOUNT-EMAIL   \
       --oidc-token-audience=SERVICE-URL

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

    • HTTP-METHOD を、HTTP メソッド(GET、POST、PUT など)に置き換えます。
    • SERVICE-URL を、実際のサービス URL に置き換えます。
    • SERVICE-ACCOUNT-EMAIL を、実際のサービス アカウントのメールアドレスに置き換えます。

Cloud Run サービスは、定義した頻度で Cloud Scheduler ジョブによるリクエストによってトリガーされます。これは、このサービスのログを調べることで確認できます。

次のステップ