cron ジョブを作成して構成する

Pub/Sub ターゲット

Pub/Sub ターゲットを選択する場合は、次の手順に従います。

  1. ジョブの公開先トピックの名前を指定します。これは、プロジェクトですでに設定されている Pub/Sub トピックです。

  2. トピックに送信するメッセージを指定します。これは、Pub/Sub メッセージ内の data パラメータとして送信されます。この処理の例については、クイックスタートをご覧ください。

  3. 必要なメッセージ属性を追加します。

  4. Configure optional settings セクションを使用して、追加の構成を設定します。

Cloud Scheduler は、Google API サービス アカウントを使用してメッセージをこのトピックに対して公開します。

App Engine HTTP ターゲット

[App Engine HTTP] ターゲット タイプを選択した場合は、App Engine アプリと現在のプロジェクトに関連付けられているリージョンを使用する必要があります。現在のプロジェクトの外部にある他の App Engine アプリを使用する場合は、App Engine HTTP ではなく HTTP をターゲットとして選択してください。 ターゲット ファイアウォール ルールでは、0.1.0.2/32 IP 範囲からのリクエストを許可する必要があります。

フォームを次のように設定します。

  1. [ターゲット タイプ] リストで、[App Engine HTTP] を選択します。

  2. Cloud Scheduler ジョブのハンドラを実行している App Engine サービスの名前を指定します。省略すると、default サービスが想定されます。設定する場合は、Google Cloud コンソールでサービス名を確認できます。

  3. 必要に応じて、バージョンを指定します。未設定の場合、現在使用中のバージョンが使用されます。使用可能なバージョンは、Google Cloud コンソールで確認できます。

  4. 必要に応じて、インスタンスを指定します。未設定の場合は、使用可能なインスタンスのいずれかが使用されます。使用可能なバージョンは、Google Cloud コンソールで確認できます。

  5. ジョブが接続する App Engine エンドポイントの相対 URL を指定します。デフォルト値 / を使用する場合、ジョブは PROJECT-ID.appspot.com を使用します(PROJECT-ID は現在のプロジェクト ID です)。

  6. ジョブの実行時に使用する HTTP メソッドを設定します。デフォルトは POST です。

  7. 必要なヘッダーをリクエストに追加します。

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

ターゲットとする App Engine エンドポイントは同じプロジェクト内に存在する必要があり、app.yaml ファイルの handlers 要素で login: admin で保護できます。

HTTP ターゲット

[HTTP] ターゲット タイプを選択した場合:

  1. ジョブが接続するエンドポイントの完全修飾 URL を指定します。

  2. HTTP メソッドを指定します。デフォルトは POST です。

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

  4. 必要なヘッダーを追加します。

  5. 認証を必要とする HTTP ターゲット ジョブを作成するには、HTTP ターゲットで認証を使用するをご覧ください。

ターゲット HTTP エンドポイントは一般公開されている必要があります。

cron ジョブと呼ばれる定期的な作業単位を設定するには、Cloud Scheduler を使用します。cron ジョブは定期的なスケジュール(ジョブの間隔または頻度とも呼ばれる)でターゲットに送信されます。

どの時点をとっても同じジョブの複数インスタンスが同時に実行されないようにしてください。まれに、同じジョブの複数のインスタンスがリクエストされる可能性があります。このためリクエスト ハンドラはべき等である必要があります。またコードを記述する際は、このような状態が発生した場合に有害な副作用が発生しないようにする必要があります。

Cloud Scheduler は、繰り返しジョブ用です。ジョブを 1 回だけ実行する必要がある場合は、Cloud Tasks の使用を検討してください。Cloud Tasks を使用すると、タスクを最大 30 日前までにスケジュールできます。

準備

Cloud Scheduler 用に環境を設定していることを確認します。

ターゲット タイプを選択する

Cloud Scheduler では、次のタイプのターゲットを呼び出すことができます。

内部 Ingress に限定されたターゲット サービスを呼び出す

Cloud Scheduler は、内部で次のサービスを呼び出すことができます。

  • Cloud Functions
  • Cloud Run(カスタム ドメインではなく run.app URL の)

これらのターゲットを内部で呼び出すには、ターゲットは Cloud Scheduler ジョブと同じ Google Cloud プロジェクトまたは VPC Service Controls の境界内になければなりません。

上り(内向き)を制限することによるターゲットの保護の詳細については、上り(内向き)の制限(Cloud Run の場合)とネットワーク設定の構成(Cloud Functions の場合)をご覧ください。

ジョブの作成

ジョブを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[Cloud Scheduler] に移動します。

    Cloud Scheduler に移動

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

  3. [名前] フィールドに、プロジェクトに固有のジョブの名前を入力します。

    関連付けられているジョブを削除すると、プロジェクトでジョブ名を再利用できるようになります。

  4. [リージョン] リストでリージョンを選択します。

    App Engine HTTP ターゲットを使用する場合は、App Engine アプリと同じリージョンを選択する必要があります。詳細については、ターゲットでサポートされているリージョンをご覧ください。

  5. 必要に応じて、ジョブの実行内容など、ジョブの簡単な説明を入力します。

    この説明は、コンソールでジョブ名の横に表示されます。

  6. 構成文字列を使用して、ジョブを実行する頻度を指定します。

    たとえば文字列 0 1 * * 0 を使用すると、毎週日曜日の午前 1 時にジョブが週 1 回実行されます。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。詳細については、cron ジョブ スケジュールの構成をご覧ください。

  7. [タイムゾーン] リストで、ジョブ スケジュールに使用するタイムゾーンを選択します。

  8. [次へ] をクリックします。

  9. [ターゲット タイプ] を指定します。

    • HTTP

    • Pub/Sub: プロジェクトですでに設定され、ジョブを公開する Pub/Sub トピックの名前を指定する必要があります。

    • App Engine HTTP: App Engine アプリと現在のプロジェクトに関連付けられているリージョンを使用する必要があります。

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

  11. 再試行の動作を構成する場合は、[オプションの設定] をクリックします。期間を指定するには、次の単位のサフィックスが付いた負でない整数のシーケンスを使用します。

    • h - 時
    • m - 分
    • s - 秒
    • ms - ミリ秒
    • us - マイクロ秒
    • ns - ナノ秒

    負の値と小数値は使用できません。Max retry duration フィールドは hms 値のみをサポートします。Min backoff durationMax backoff duration の両方が完全なセットをサポートします。

  12. 必要に応じて、HTTP ターゲットと App Engine HTTP ターゲットの場合は、ジョブ試行の期限を構成します。この期限までにリクエスト ハンドラが応答しない場合、リクエストはキャンセルされ、試行は失敗とみなされます。Cloud Scheduler は、再試行構成に従ってジョブを再試行します。

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

    ジョブは指定された頻度で実行されます。

gcloud

gcloud CLI を使用してジョブを作成する場合は、ターゲット タイプごとに異なるコマンドを使用します。

HTTP

HTTP または HTTPS エンドポイントにリクエストを送信できます。ターゲット HTTP エンドポイントは一般公開されている必要があります。

gcloud scheduler jobs create http JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --uri=URI

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

  • JOB: プロジェクトで一意である必要があるジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  • LOCATION: ジョブを実行するロケーション。

  • SCHEDULE: ジョブを実行する頻度(ジョブの間隔)。たとえば、every 3 hours。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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

  • URI: ジョブが接続するエンドポイントの完全修飾 URI。

他のパラメータについては、gcloud コマンドライン リファレンスをご覧ください。

  • 必要に応じて、HTTP メソッドを指定します。デフォルトは POST です。

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

  • 必要に応じて再試行値を指定します。これは、App Engine ジョブが失敗した場合のジョブの再試行方法を指定します。ほとんどの場合、デフォルト値で十分です。

  • 認証を必要とする HTTP ターゲット ジョブを作成するには、HTTP ターゲットで認証を使用するをご覧ください。

gcloud scheduler jobs create http my-http-job \
    --schedule "0 1 * * 0" \
    --uri "http://myproject/my-url.com" \
    --http-method GET

Pub/Sub

プロジェクトですでに設定されている Pub/Sub トピックを使用する必要があります。Cloud Scheduler は、Google API サービス アカウントを使用してメッセージをこのトピックに対して公開します。

gcloud scheduler jobs create pubsub JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --topic=TOPIC

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

  • JOB: プロジェクトで一意である必要があるジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  • LOCATION: ジョブを実行するロケーション。

  • SCHEDULE: ジョブを実行する頻度(ジョブの間隔)。たとえば、every 3 hours。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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

  • TOPIC: ジョブの公開先トピックの名前。--message-body フラグまたは --message-body-from-file フラグを使用して、トピックに送信するメッセージを指定します。これは、Pub/Sub メッセージ内の data パラメータとして送信されます。この処理の例については、クイックスタートをご覧ください。

その他のパラメータについては、gcloud コマンドライン リファレンスをご覧ください。

gcloud scheduler jobs create pubsub myjob \
    --schedule "0 1 * * 0" \
    --topic cron-topic \
    --message-body "Hello"

App Engine HTTP

App Engine HTTP ターゲットは現在のプロジェクトに関連付けられている App Engine アプリのみ使用可能です。現在のプロジェクトの外部にある他の App Engine アプリを使用する場合は、App Engine HTTP ではなく HTTP をターゲットとして選択します。 ターゲット ファイアウォール ルールでは、0.1.0.2/32 IP 範囲からのリクエストを許可する必要があります。

App Engine エンドポイントは、app.yaml ファイル内の handlers 要素の login: admin で保護できます。

gcloud scheduler jobs create app-engine \
    --JOB=JOB \
    --location=LOCATION \
    --schedule=SCHEDULE

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

  • JOB: プロジェクトで一意である必要があるジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  • LOCATION: ジョブを実行するロケーション。App Engine アプリのロケーションと同じにする必要があります。

  • SCHEDULE: ジョブを実行する頻度、またはジョブ間隔(例: every 3 hours)。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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

他のパラメータについては、gcloud コマンドライン リファレンスをご覧ください。

  • ジョブが接続する App Engine エンドポイントの相対 URL を指定します。デフォルト値 / を使用する場合、ジョブは PROJECT-ID.appspot.com を使用します(PROJECT-ID は現在のプロジェクト ID です)。

  • Cloud Scheduler ジョブのハンドラを実行している App Engine サービスの名前を指定します。省略すると、default サービスが想定されます。設定する場合は、Google Cloud コンソールでサービス名を確認できます。

  • 必要に応じて、ジョブの実行時に使用する HTTP メソッドを設定します。 デフォルトは POST です。

  • 必要に応じて、バージョンを指定します。未設定の場合、現在使用中のバージョンが使用されます。使用可能なバージョンは、Google Cloud コンソールで確認できます。

  • 必要に応じて、インスタンスを指定します。未設定の場合は、使用可能なインスタンスのいずれかが使用されます。使用可能なバージョンは、Google Cloud コンソールで確認できます。

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

  • 必要に応じて再試行値を指定します。これは、App Engine ジョブが失敗した場合のジョブの再試行方法を指定します。ほとんどの場合、デフォルト値で十分です。

gcloud scheduler jobs create app-engine my-appengine-job \
    --schedule "0 1 * * 0" \
    --relative-url "/cron-handler"

ジョブの編集

ジョブの構成は編集できます。

Console

  1. Google Cloud コンソールで、[Cloud Scheduler] に移動します。

    Cloud Scheduler に移動

  2. 編集するジョブを選択します。

  3. [編集] をクリックします。

  4. 手順に沿ってジョブの作成時にスケジュールの定義、実行の構成、オプション設定の構成を行います。

gcloud

gcloud CLI を使用してジョブを編集する場合は、ターゲット タイプごとに異なるコマンドを使用します。

HTTP

HTTP または HTTPS エンドポイントにリクエストを送信できます。ターゲット HTTP エンドポイントは一般公開されている必要があります。

gcloud scheduler jobs update http JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --uri=URI

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

  • JOB: プロジェクトで一意である必要があるジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  • LOCATION: ジョブを実行するロケーション。ロケーションを指定しない場合、gcloud CLI はデフォルトのロケーションを使用します。編集するジョブが別の場所にある場合、ジョブを識別するには、NAME に加えてロケーションを指定する必要があります。ジョブのロケーションは更新できません。

  • SCHEDULE: ジョブを実行する頻度(ジョブの間隔)。たとえば、every 3 hours。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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

  • URI: ジョブが接続するエンドポイントの完全修飾 URI。

その他のパラメータについては、gcloud コマンドライン リファレンスをご覧ください。

gcloud scheduler jobs update http my-http-job \
    --schedule "0 1 * * 0" \
    --uri "http://myproject/my-url.com" \
    --http-method GET

Pub/Sub

プロジェクトですでに設定されている Pub/Sub トピックを使用する必要があります。Cloud Scheduler は、Google API サービス アカウントを使用してメッセージをこのトピックに対して公開します。

gcloud scheduler jobs update pubsub JOB \
    --location=LOCATION \
    --schedule=SCHEDULE \
    --topic=TOPIC

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

  • JOB: プロジェクトで一意である必要があるジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  • LOCATION: ジョブを実行するロケーション。ロケーションを指定しない場合、gcloud CLI はデフォルトのロケーションを使用します。編集するジョブが別の場所にある場合、ジョブを識別するには、NAME に加えてロケーションを指定する必要があります。ジョブのロケーションは更新できません。

  • SCHEDULE: ジョブを実行する頻度、またはジョブ間隔(例: every 3 hours)。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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

  • TOPIC: ジョブの公開先トピックの名前。--message-body フラグまたは --message-body-from-file フラグを使用して、トピックに送信するメッセージを指定します。これは、Pub/Sub メッセージ内の data パラメータとして送信されます。この処理の例については、クイックスタートをご覧ください。

その他のパラメータについては、gcloud コマンドライン リファレンスをご覧ください。

gcloud scheduler jobs update pubsub myjob \
    --schedule "0 1 * * 0" \
    --topic cron-topic --message-body "Hello"

App Engine HTTP

App Engine HTTP ターゲットは現在のプロジェクトに関連付けられている App Engine アプリのみ使用可能です。現在のプロジェクトの外部にある他の App Engine アプリを使用する場合は、App Engine HTTP ではなく HTTP をターゲットとして選択します。

App Engine エンドポイントは、app.yaml ファイル内の handlers 要素の login: admin で保護できます。

gcloud scheduler jobs update app-engine JOB \
    --location=LOCATION \
    --schedule=SCHEDULE

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

  • JOB: プロジェクトで一意である必要があるジョブ名。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  • LOCATION: ジョブが実行されるロケーション(これはターゲットの App Engine アプリのロケーションと同じです)。ロケーションを指定しない場合、gcloud CLI はデフォルトのロケーションを使用します。編集するジョブが別の場所にある場合、ジョブを識別するには、NAME に加えてロケーションを指定する必要があります。ジョブのロケーションは更新できません。

  • SCHEDULE: ジョブを実行する頻度、またはジョブ間隔(例: every 3 hours)。ここで指定する文字列には、unix-cron 互換の任意の文字列を使用できます。(おすすめしませんが、従来の App Engine cron 構文は既存のジョブで引き続きサポートされます。)

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

その他のパラメータについては、gcloud コマンドライン リファレンスをご覧ください。

gcloud scheduler jobs update app-engine my-appengine-job \
    --schedule "0 1 * * 0" \
    --relative-url "/cron-handler"

ジョブの一時停止

ジョブの実行は一時停止できます。

Console

  1. Google Cloud コンソールで、[Cloud Scheduler] に移動します。

    Cloud Scheduler に移動

  2. 一時停止するジョブを選択します。

  3. [一時停止] をクリックします。

gcloud

  1. gcloud CLI をインストールしたマシンでターミナル ウィンドウを開きます。

  2. 次のコマンドを実行します。

    gcloud scheduler jobs pause MY_JOB
    

    MY_JOB は、一時停止するジョブの名前に置き換えます。

ジョブが一時停止している間、そのジョブを編集することもできます。編集した後、ジョブは再開するまで一時停止したままになります。

ジョブの再開

一時停止したジョブの実行を再開できます。

Console

  1. Google Cloud コンソールで、[Cloud Scheduler] に移動します。

    Cloud Scheduler に移動

  2. 再開するジョブを選択します。

    ジョブはすでに一時停止されている必要があります。

  3. [再開] をクリックします。

gcloud

  1. gcloud CLI をインストールしたマシンでターミナル ウィンドウを開きます。

  2. 次のコマンドを実行します。

    gcloud scheduler jobs resume MY_JOB
    

    MY_JOB は、再開するジョブの名前に置き換えます。

ジョブの削除

ジョブは削除できます。

Console

  1. Google Cloud コンソールで、[Cloud Scheduler] に移動します。

    Cloud Scheduler に移動

  2. 削除するジョブを選択します。

  3. [削除] をクリックします。

gcloud

  1. gcloud CLI をインストールしたマシンでターミナル ウィンドウを開きます。

  2. 次のコマンドを実行します。

    gcloud scheduler jobs delete MY_JOB
    

    MY_JOB を削除するジョブの名前に置き換えます。