Cloud Service
Cloud Scheduler
cron 形式のスケジュールでジョブを定期実行するフルマネージドサービス。AWS の EventBridge Scheduler に相当。
- 1.cron 式でジョブを定期実行するフルマネージドなスケジューラ。
- 2.HTTP/Pub/Sub/App Engine を宛先に呼び出し、再試行も任せられる。
- 3.サーバー常駐の cron をなくし、運用とスケールをマネージドに任せる。
解決する課題
サーバーに常駐させた crontab を運用・冗長化する手間をなくし、定期実行をマネージドに任せられます。
- 「毎日深夜にバッチを起動」「5 分おきにヘルスチェック」のような 定期実行(cron) を、専用 VM を立てずに実現したい
- cron を動かすサーバーが落ちるとジョブが止まる、という 単一障害点 を避けたい
- 失敗したジョブを 自動でリトライ し、確実に実行させたい
- 既存の HTTP エンドポイントや Pub/Sub トピックを、スケジュールに従って呼び出す だけのトリガーが欲しい
主要概念と用語
- ジョブ(Job): 「いつ(スケジュール)」「何を(宛先)」実行するかを定義する中心リソース
- スケジュール(schedule): 実行タイミングを unix-cron 形式(分・時・日・月・曜日の 5 フィールド)で指定する。タイムゾーンを併せて指定できる
- ターゲット(宛先)の 3 種別:
- HTTP ターゲット: 任意の URL へ HTTP リクエストを送る。Cloud Run / Cloud Functions / 外部 API などを叩ける
- Pub/Sub ターゲット: 指定トピックへメッセージを発行する。後続を非同期に動かす起点になる
- App Engine ターゲット: 同一プロジェクトの App Engine アプリの URL を呼び出す
- タイムゾーン: スケジュールの基準となる時間帯。日本のジョブなら Asia/Tokyo を指定して夏時間の混乱を避ける
- 再試行(retry)設定: 失敗時の最大試行回数・バックオフ・最大到達時間などを指定する
- 実行の確認: ジョブが成功とみなされる条件は、HTTP なら 2xx 応答の受信。失敗すると再試行ポリシーに従う
仕様・制限・クォータ
- スケジュールは unix-cron 形式で指定し、最短で 1 分間隔の実行に対応する(秒単位の精度ではない)
- 実行は おおむね指定時刻の前後にトリガーされる性質で、ミリ秒精度の厳密さは保証されない。厳密なリアルタイム性が要る用途には向かない
- 1 ジョブは 1 つの宛先を持つ。複数処理へ分岐したい場合は Pub/Sub ターゲットにして購読側でファンアウトする
- 再試行ポリシー(最大試行回数・最小/最大バックオフ・最大実行時間など)を設定でき、宛先障害時に自動でリトライする
- プロジェクト/リージョンあたりの ジョブ数に割り当て(クォータ) があり、必要に応じて引き上げ申請できる
- ジョブはリージョンに属する リージョナルなリソースとして作成する(App Engine ターゲットを使う場合は App Engine のロケーションに準じる)
- HTTP ターゲットには本文・ヘッダー・メソッドを指定でき、ペイロードサイズには上限がある
内部の仕組み
ジョブを作成すると、Cloud Scheduler はスケジュール定義をマネージド基盤に保持し、指定時刻になるとターゲットへ自動でディスパッチします。HTTP ターゲットなら指定 URL へリクエストを送り、応答コードで成否を判定します。Pub/Sub ターゲットなら指定トピックへメッセージを発行し、以降は Pub/Sub の配信機構に委ねます。
- 宛先が成功(HTTP の 2xx など)を返すとその実行は完了とみなされる
- 失敗した場合は 再試行ポリシーに従い、指数的バックオフを挟んで再実行する
- スケジューラ自体は冗長化されたマネージドサービスのため、ユーザーが cron サーバーの可用性を気にする必要がない
- 実行履歴・成否は Cloud Logging に記録され、後から追跡できる
Cloud Scheduler は「いつ起動するか」を担う トリガーであり、実際の処理ロジックは宛先側(Cloud Run / Cloud Functions / Pub/Sub の購読者など)に置きます。スケジューラに重い処理を持たせず、起動と処理を分けて設計します。
設計パターン / ベストプラクティス
- Cloud Scheduler から Cloud Run / Cloud Functions を起動: 定期バッチやレポート生成を HTTP ターゲットで叩く。処理本体はサーバーレスに置き、起動だけスケジューラに任せる
- Cloud Scheduler から Pub/Sub へ発行: スケジュールを起点に Pub/Sub メッセージを流し、購読側で非同期・ファンアウト処理する。スケジューラと処理を疎結合に保てる
- 長時間処理は非同期化: HTTP ターゲットの応答待ちでタイムアウトしないよう、起動だけ受けてバックグラウンドで処理する設計にする
- 冪等な宛先設計: 再試行で同じ実行が複数回届きうるため、宛先は二重実行されても安全な冪等処理にする
- タイムゾーンを明示: 業務時間に合わせて Asia/Tokyo などを指定し、夏時間や UTC との混同による実行ずれを防ぐ
- Workflows との組み合わせ: 複数ステップのオーケストレーションが必要なら、スケジューラで Workflows を起動して処理フローを管理する
運用・監視
- Cloud Logging にジョブの実行ログ(成功・失敗・応答コード)が記録される。失敗が続く場合はここを起点に調査する
- Cloud Monitoring で実行回数や失敗率を監視し、想定どおり起動しているかを確認する
- ジョブが起動しない → スケジュール式(cron の 5 フィールド)と タイムゾーン、ジョブが一時停止状態でないかを確認する
- 宛先でエラーになる → 宛先の 権限(呼び出し用サービスアカウントのロール)と URL、認証設定を確認する
- 手動でジョブを即時実行(強制実行)して、スケジュールを待たずに宛先疎通を切り分けられる
- 不要になったジョブは 一時停止(pause)または削除 し、誤起動と無駄な課金を防ぐ
コスト
課金はおもに ジョブ数に基づく体系で、一定数までの無料枠が用意されています。スケジューラ自体は軽量ですが、起動先の Cloud Run / Cloud Functions / Pub/Sub 側の実行費用も合わせて考えます。
| 費用要素 | 課金の考え方 | コスト最適化のポイント |
|---|---|---|
| スケジューラのジョブ | ジョブ数を基準に課金、一定数まで無料枠あり | 重複や不要なジョブを整理して数を抑える |
| 宛先の実行(Cloud Run 等) | リクエスト数・実行時間で別途課金 | 処理を軽量化し冪等にして再実行を減らす |
| Pub/Sub ターゲット | 発行メッセージのデータ量で課金 | ペイロードを小さく保つ |
| 再試行の超過分 | 失敗で再実行が増えると宛先側の費用が増える | 宛先を安定化し過剰なリトライを避ける |
セキュリティ
- ジョブには サービスアカウントを割り当て、宛先呼び出しに必要な 最小権限の IAM ロールだけを付与する
- HTTP ターゲットで Cloud Run / Cloud Functions を認証付きで呼ぶ場合、ジョブのサービスアカウントが OIDC トークンを付与してリクエストする(宛先側で発行元を検証)
- 外部 API を呼ぶ場合は OAuth トークンや認証ヘッダーを付与し、認証情報をジョブ定義にハードコードしない
- Pub/Sub ターゲットには、ジョブのサービスアカウントに トピックへの発行権限のみを与える
- 宛先エンドポイントは認証なしの公開状態にせず、スケジューラからの正当な呼び出しだけを受け付けるようにする
宛先の URL を 認証なしの公開エンドポイントで受けるのは NG。誰でも外部から叩けてしまいます。Cloud Run / Cloud Functions は認証を有効化し、ジョブのサービスアカウントに OIDC トークンを付与して呼び出してください。ジョブには宛先の呼び出しに必要な最小限のロールだけを与えます。
Well-Architected の観点
- 運用上の優秀性(Operational Excellence): cron をマネージドに置き換え、サーバー常駐や冗長化の運用負担をなくす。スケジュール変更は宣言的に管理でき、実行ログで可観測性を確保できる
- 信頼性(Reliability): スケジューラ自体が冗長化されており、単一の cron サーバーのような単一障害点を排除する。再試行ポリシーで一時的な宛先障害を吸収する
- コスト最適化(Cost Optimization): 専用 VM を常時起動せずに定期実行を賄える。ジョブ数を整理し、無料枠と組み合わせて無駄を抑える
試験で問われるポイント
- 定期実行(cron)といえば Cloud Scheduler。AWS の EventBridge Scheduler に相当する役割で覚える
- 宛先は HTTP / Pub/Sub / App Engine の 3 種別。サーバーレス処理を定期起動する典型は「Scheduler から HTTP で Cloud Run / Cloud Functions」または「Scheduler から Pub/Sub」
- スケジュールは unix-cron 形式で、最短 1 分間隔。秒単位やミリ秒精度の厳密実行ではない
- 失敗時は 再試行ポリシーで自動リトライ。宛先は 冪等に設計する
- 認証付き呼び出しは OIDC トークン(Google のサービス向け)または OAuth トークン(外部 API 向け)を使う
- 役割分担: イベント駆動は Eventarc、定期実行は Cloud Scheduler、というすみ分けを問われやすい
関連サービス・比較
| 観点 | Cloud Scheduler(GCP) | EventBridge Scheduler(AWS) |
|---|---|---|
| 位置づけ | マネージドな cron スケジューラ | マネージドなスケジューラ |
| スケジュール指定 | unix-cron 形式(最短1分間隔) | cron / rate / 一回限りの指定 |
| 主な宛先 | HTTP / Pub/Sub / App Engine | Lambda / SQS / Step Functions など多数 |
| 再試行 | 再試行ポリシーで自動リトライ | 再試行とデッドレターに対応 |
| 認証 | OIDC / OAuth トークンを付与 | IAM ロールで宛先を呼び出し |
| スコープ | リージョナル | リージョナル |
イベントが起きたら処理するのが Eventarc、時刻が来たら処理するのが Cloud Scheduler です。AWS では EventBridge がイベントバスとスケジューラの両方を担いますが、Google Cloud ではイベント配信を Eventarc、定期実行を Cloud Scheduler が分担します。
ハンズオン / CLI例
# HTTP ターゲット: 毎日 09:00(JST) に Cloud Run を OIDC 認証付きで起動
gcloud scheduler jobs create http daily-batch \
--location=asia-northeast1 \
--schedule="0 9 * * *" \
--time-zone="Asia/Tokyo" \
--uri="https://my-service-xxxx.a.run.app/run" \
--http-method=POST \
--oidc-service-account-email=scheduler-sa@PROJECT_ID.iam.gserviceaccount.com
# Pub/Sub ターゲット: 5 分おきにトピックへメッセージを発行
gcloud scheduler jobs create pubsub heartbeat \
--location=asia-northeast1 \
--schedule="*/5 * * * *" \
--time-zone="Asia/Tokyo" \
--topic=jobs \
--message-body='{"event":"tick"}'
# ジョブの一覧・詳細確認
gcloud scheduler jobs list --location=asia-northeast1
gcloud scheduler jobs describe daily-batch --location=asia-northeast1
# スケジュールを待たずに即時実行して宛先疎通を確認
gcloud scheduler jobs run daily-batch --location=asia-northeast1
# 一時停止 / 再開
gcloud scheduler jobs pause daily-batch --location=asia-northeast1
gcloud scheduler jobs resume daily-batch --location=asia-northeast1
Google Cloud Service
Cloud Schedulerを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アプリ統合
比較で見る軸
クラウド: Google Cloud / カテゴリ: アプリ統合 / 難易度: basic
導入後に効く点
HTTP/Pub/Sub/App Engine を宛先に呼び出し、再試行も任せられる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- アプリ統合
- 難易度
- basic
- 関連資格
- —
- 設計柱
- operational
判断チェックリスト
- 自社の用途が「アプリ統合 / operational」に近いか確認する。
- 強みである「cron 式でジョブを定期実行するフルマネージドなスケジューラ。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。