cron ジョブの作成と構成

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

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

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

ジョブの作成

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

Console

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

    Cloud Scheduler

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

    スクリーンショット

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

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

  5. 構成文字列を使用して、ジョブを実行するスケジュールを記述します。たとえば、0 1 * * 0 という文字列は、毎週日曜日の午前 1 時にジョブを実行します。ここで指定する文字列には、unix-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 Console でサービス名を確認できます。

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

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

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

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

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

HTTP ターゲット

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

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

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

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

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

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

Pub/Sub ターゲット

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

構文

gcloud 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 時間おき」など)。ここで指定する文字列には、unix-cron 互換の文字列を使用できます。従来のApp Engine cron 構文を使用してスケジュールを記述することもできます。

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

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

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

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

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

コマンドラインの例:

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

App Engine ターゲット

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

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

構文

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

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

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

  2. ジョブを実行するスケジュール(頻度、ジョブ間隔とも呼ばれます)を指定します(「3 時間おき」など)。ここで指定する文字列には、unix-cron 互換の文字列を使用できます。従来のApp Engine cron 構文を使用してスケジュールを記述することもできます。

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

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

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

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

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

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

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

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

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

コマンドラインの例:

 gcloud scheduler jobs create app-engine my-appengine-job --schedule "0 1 * * 0" --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 時間おき」など)。ここで指定する文字列には、unix-cron 互換の文字列を使用できます。従来のApp Engine cron 構文を使用してスケジュールを記述することもできます。

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

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

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

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

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

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

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

コマンドラインの例:

 gcloud scheduler jobs create http my-http-job --schedule "0 1 * * 0" --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] は、削除するジョブの名前に置き換えます。