cron ジョブの作成と構成

cron ジョブと呼ばれる定期的な作業単位を設定するには、Cloud Scheduler を使用します。cron ジョブは定期的なスケジュール(ジョブの間隔または頻度とも呼ばれる)でターゲットに送信されます。GCP Console と gcloud コマンドライン ツールのいずれかを使用して cron ジョブを作成できます。

どの時点をとっても同じジョブの複数インスタンスが同時に実行されないようにしてください。また、Cloud Scheduler は、「少なくとも 1 回」を基本に処理を行うよう設計されています。つまり、ジョブがスケジュールされると、Cloud Scheduler はそのジョブのリクエストを少なくとも 1 回は送信します。まれに、同じジョブの複数のインスタンスがリクエストされる可能性があります。このためリクエスト ハンドラはべき等である必要があります。またコードを記述する際は、このような状態が発生した場合に有害な副作用が発生しないようにする必要があります。

ジョブの作成

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

Console

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

    Cloud Scheduler

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

    スクリーンショット

  3. ジョブの名前を指定します。これはプロジェクト内で一意でなければなりません。関連付けられているジョブを削除した後は、プロジェクトでそのジョブ名を再利用できるので注意してください。

  4. 必要に応じて、ジョブの実行内容など、ジョブの簡単な説明を入力します。この説明は、コンソールでジョブ名の横に表示されます。

  5. 構成文字列を使用して、ジョブを実行する頻度(ジョブ間隔)を設定します。たとえば文字列 0 */3 * * * を指定すると、ジョブが 3 時間ごとに実行されます。ここで指定する文字列には、crontab に対応した任意の文字列を使用できます。従来の App Engine cron 形式に慣れているデベロッパーは、App Engine Cron 構文も使用できます。

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

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

  7. ターゲットを指定します。

  8. [作成] をクリックして、ジョブを作成して保存します。ジョブは指定された頻度で実行されます。

gcloud

gcloud コマンドラインを使用してジョブを作成する場合は、ターゲット タイプごとに異なるコマンドを使用します。コマンドラインの例については、以下のターゲット リンクをクリックしてください。

Pub/Sub ターゲット

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

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

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

Cloud Scheduler は、Google API サービス アカウントを使用してメッセージをこのトピックに対して公開します。Pub/Sub ターゲット構成では、再試行回数を設定するオプションはありません。これは、Pub/Sub が独自の再試行メカニズムとポリシーを使用しているためです。

App Engine ターゲット

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

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

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

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

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

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

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

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

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

HTTP ターゲット

HTTP ターゲットを選択した場合は、次の手順に従います。

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

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

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

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

Pub/Sub ターゲット

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

構文

gcloud beta scheduler jobs create pubsub JOB --schedule=SCHEDULE --topic=TOPIC (--message-body=MESSAGE_BODY | --message-body-from-file=MESSAGE_BODY_FROM_FILE) [optional flags]

コマンドラインで Pub/Sub ターゲットを使用するには:

  1. JOB にジョブ名を指定します。これはプロジェクト内で一意でなければなりません。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  2. ジョブを実行するスケジュール(頻度、ジョブ間隔とも呼ばれます)を指定します(「3 時間おき」など)。ここで指定する文字列には、crontab に対応した任意の文字列を使用できます。あるいは、従来の App Engine cron に慣れているデベロッパーは、App Engine Cron 構文も使用できます。

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

  3. ジョブの公開先トピックの名前を指定します。

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

  5. タイムゾーンや属性、gcloud コマンドライン リファレンスで説明するその他のパラメータなどのオプション パラメータを使用できます。

Pub/Sub ターゲット構成では、再試行回数を設定するオプションはありません。これは、Pub/Sub が独自の再試行メカニズムとポリシーを使用しているためです。

コマンドラインの例:

    gcloud beta scheduler jobs create pubsub myjob --schedule "0 */3 * * *" --topic cron-topic --message-body "Hello"

App Engine ターゲット

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

app.yaml ファイルの handlers 要素に login: admin を指定することで、App Engine エンドポイントを保護できます。

構文

gcloud beta scheduler jobs create app-engine JOB --schedule=SCHEDULE [optional flags]

App Engine HTTP target を使用するには:

  1. JOB にジョブ名を指定します。これはプロジェクト内で一意でなければなりません。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  2. ジョブを実行するスケジュール(頻度、ジョブ間隔とも呼ばれます)を指定します(「3 時間おき」など)。ここで指定する文字列には、crontab に対応した任意の文字列を使用できます。あるいは、従来の App Engine cron に慣れているデベロッパーは、App Engine Cron 構文も使用できます。

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

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

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

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

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

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

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

  9. 必要に応じて再試行値を指定します。これは、App Engine ジョブが失敗した場合のジョブの再試行方法を指定します。ほとんどの場合、デフォルト値で十分です。詳細については、gcloud コマンドライン リファレンスをご覧ください。

  10. タイムゾーンや説明、gcloud コマンドライン リファレンスで説明するその他のパラメータなどのオプション パラメータを使用できます。

コマンドラインの例:

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

HTTP ターゲット

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

構文

gcloud scheduler jobs create http JOB --schedule=SCHEDULE --uri=URI [optional flags]

HTTP target を使用するには:

  1. JOB にジョブ名を指定します。これはプロジェクト内で一意でなければなりません。関連付けられているジョブを削除しても、プロジェクトでそのジョブ名を再利用できないので注意してください。

  2. ジョブを実行するスケジュール(頻度、ジョブ間隔とも呼ばれます)を指定します(「3 時間おき」など)。ここで指定する文字列には、crontab に対応した任意の文字列を使用できます。あるいは、従来の App Engine cron に慣れているデベロッパーは、App Engine Cron 構文も使用できます。

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

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

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

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

  6. 必要に応じて再試行値を指定します。これは、App Engine ジョブが失敗した場合のジョブの再試行方法を指定します。ほとんどの場合、デフォルト値で十分です。詳細については、gcloud コマンドライン リファレンスをご覧ください。

  7. タイムゾーンや説明、gcloud コマンドライン リファレンスで説明するその他のパラメータなどのオプション パラメータを使用できます。

コマンドラインの例:

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

ジョブを削除する

ジョブを削除するには:

Console

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

    Cloud Scheduler

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

  3. [ジョブの削除] をクリックします。

gcloud

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

  2. コマンドを起動します。

    gcloud scheduler jobs delete [my-job]
    

    [my-job] は、削除するジョブの名前に置き換えてください。