Cloud Service
Cloud Tasks
非同期タスクをキューに溜めて分散実行するフルマネージドなタスクキュー。AWS の SQS に近く、HTTP ワーカーへの配信・再試行・流量制御を任せられる。
- 1.HTTP ターゲットへ非同期タスクを配信し再試行まで任せるタスクキュー。
- 2.ディスパッチレートと同時実行数でワーカーへの流量を細かく制御できる。
- 3.スケジュール指定で指定時刻に1回だけタスクを発火させる遅延実行もできる。
解決する課題
ユーザーのリクエストを待たせずに重い処理を後回しにしたい、外部 API への呼び出しを安定したペースで送りたい、失敗しても自動で再試行したい、といった要件をワーカーの実装なしで満たせます。
- 重い処理(メール送信・画像変換・集計)を リクエスト経路から切り離し て応答を速くしたい
- 呼び出し先(自前のサービスや外部 API)へ送る 流量を一定に保ち、過負荷を防ぎたい
- 一時的なエラーで失敗したタスクを 自動で再試行 したい(指数バックオフ)
- 「30 分後に通知する」のように 指定時刻まで遅延 させて 1 回だけ実行したい
- 個々のタスクの 生成元と実行先を疎結合 にし、独立してスケールさせたい
主要概念と用語
- キュー(Queue): タスクを溜める入れ物。ディスパッチレートや同時実行数などの流量制御はキュー単位で設定する。AWS SQS のキューに相当
- タスク(Task): 実行したい 1 件の作業。ターゲット(送信先 URL)・HTTP メソッド・ペイロード・スケジュール時刻などを含む
- ディスパッチ(Dispatch): Cloud Tasks がタスクを取り出し、ターゲットへ HTTP リクエストとして送ること。プッシュ型(Cloud Tasks 側がワーカーを呼ぶ)が基本
- HTTP ターゲット: 任意の公開 HTTPS エンドポイントへ配信する方式。OIDC または OAuth トークンを付与できる
- App Engine ターゲット: 同一プロジェクトの App Engine サービスへ配信する専用方式
- ディスパッチレート(maxDispatchesPerSecond): 1 秒あたりに送るタスク数の上限。流量の天井
- 最大同時実行数(maxConcurrentDispatches): 同時に処理中にできるタスク数の上限
- 再試行設定(Retry config): 失敗時の最大試行回数・最小/最大バックオフ・最大経過時間などを定義
- scheduleTime: タスクを実行してよい最短時刻。未来時刻を指定すると 遅延実行 になる
- タスク名による重複排除(dedupe): 同名タスクを作ろうとすると拒否され、短時間の重複生成を防げる
仕様・制限・クォータ
- 配信はプッシュ型で、Cloud Tasks 側がターゲット URL を呼び出す(SQS の Pull とは逆向き)。ワーカーは 2xx を返せば成功、それ以外は失敗として再試行対象になる
- 少なくとも 1 回(at-least-once) の実行が基本。まれに重複実行されうるため、処理は 冪等 に作る
- タスクのペイロードや実行時間には上限があり、長時間バッチではなく短い HTTP 処理に向く(数十分単位の長尺ジョブには不向き)
- scheduleTime には未来へのスケジュール上限があり、無制限に遠い未来を指定することはできない
- 重複排除はタスク名で行うが、削除直後の同名再作成には一定の待ち時間があるなど制約がある
- 流量制御(ディスパッチレート・同時実行数)と再試行は キュー単位 の設定。タスクごとに上書きはできない
- HTTP ターゲットは HTTPS が前提で、認証トークン(OIDC/OAuth)を付けて呼び出せる
具体的な上限値は変動しうるため、設計時は公式ドキュメントのクォータと上限を確認してください。
内部の仕組み
タスクを作成すると、Cloud Tasks はそれを キューに永続化 し、キューの流量設定に従って取り出してターゲットへ HTTP リクエストを送ります。ワーカーが 2xx を返すと成功として削除、それ以外(4xx の一部・5xx・タイムアウト)は 失敗として再試行キューに戻します。
- ディスパッチは maxDispatchesPerSecond と maxConcurrentDispatches の両方を満たす範囲で行われ、ワーカーへ押し寄せる量を平滑化する
- 失敗時は 指数バックオフ で待ってから再試行し、最大試行回数または最大経過時間に達すると打ち切られる
- scheduleTime を未来にしたタスクは、その時刻になるまでディスパッチされない(遅延実行・予約実行)
- キューを 一時停止(pause) するとディスパッチが止まり、再開すると溜まったタスクから流れ出す
Cloud Tasks は「少なくとも 1 回」実行が基本なので、再試行やまれな重複で 同じタスクが 2 回実行されうる。ワーカーは 冪等(同じ入力で 2 回呼ばれても結果が変わらない)に作るのが鉄則です。タスク名による重複排除も併用すると、短時間の二重生成を抑えられます。
設計パターン / ベストプラクティス
- Web リクエストの裏で非同期化: API はタスクを作成して即応答し、実処理は Cloud Run / Cloud Functions のワーカーに任せる
- 外部 API のレート制御: 送信先の制限に合わせてキューの ディスパッチレート を下げ、429 を避ける(タスクキュー全体が緩衝材になる)
- 遅延・予約実行:
scheduleTimeで「N 分後」「指定時刻」に 1 回だけ実行。定期実行(cron)は Cloud Scheduler の役割で、用途が異なる - 過負荷時の絞り込み: 障害時は 同時実行数を絞る か キューを一時停止 して、復旧後にまとめて流す
- 冪等キー: タスクのペイロードに一意キーを持たせ、ワーカー側で処理済みを判定して重複実行を吸収する
- ファンアウトが欲しいときは Pub/Sub: 1 イベントを多数の購読者へ同報したい場合は Cloud Tasks ではなく Pub/Sub が適任
運用・監視
- Cloud Monitoring でキューの状態を監視する:
- 試行回数や成功/失敗レスポンス数 → ワーカーのエラー率を把握
- キューの タスク滞留(深さ) → ディスパッチが追いついていないサイン
- 滞留が増える → 同時実行数・ディスパッチレートの上限やワーカー側のレイテンシ/エラーを疑う
- 失敗が続く → ターゲット URL・認証(トークン)・ペイロード形式・ワーカーの 5xx を確認
- 緊急時は キューの一時停止/パージ(全削除) で流れを止めたり溜まったタスクを破棄できる
- 再試行の打ち切り(最大試行回数・最大経過時間到達)はログで追えるようにし、取りこぼしを検知する
コスト
課金はおもに 処理したタスク操作の件数 に対して発生し、一定の無料枠が用意されています。リクエスト数ベースのため、不要なタスク生成や過剰な再試行が積み重なるとコスト要因になります。
| コスト要素 | 課金の考え方 | 節約のポイント |
|---|---|---|
| タスク操作 | 処理したタスク件数で課金 | 無駄なタスク生成を減らしバッチ化する |
| 再試行 | 再試行も操作として加算されうる | ワーカーの冪等性と原因対処で再試行を抑える |
| ターゲット側の実行 | Cloud Run など呼び出し先の料金が別途発生 | 処理を短く保ち呼び出し先のコストを抑える |
| 保持・滞留 | 溜め込み自体より操作数が中心 | 滞留を放置せず流量設定を見直す |
セキュリティ
- IAM でキュー単位の権限を制御する(タスクの作成権限・キュー管理権限などを分離)。最小権限を徹底
- HTTP ターゲットへの配信には サービスアカウントを使った OIDC / OAuth トークンを付与し、ワーカー側で発行元を検証する
- ワーカーのエンドポイントは 認証必須にし、誰でも叩ける公開 URL にしない
- 転送中は TLS(HTTPS) が前提。ペイロードに秘密情報を平文で入れない
- VPC Service Controls で境界を作り、データ持ち出しを防ぐ
ワーカーの URL を 認証なしの公開エンドポイント にすると、第三者が偽タスクを直接 POST できてしまいます。OIDC トークン認証を有効にし、受信側で発行元サービスアカウントを必ず検証してください。
Well-Architected の観点
- 信頼性(Reliability): 自動再試行・指数バックオフ・キューによる緩衝で、一時障害やスパイクに強い非同期処理を組める。ワーカーを冪等にすることで「少なくとも 1 回」実行の重複も安全に吸収できる
- 流量制御(ディスパッチレート・同時実行数)で ダウンストリームを過負荷から守る ことができ、システム全体の安定性に寄与する
- 失敗タスクの再試行を任せられるため、呼び出し側に複雑なリトライ実装を持ち込まずに済む
試験で問われるポイント
- Cloud Tasks は個々の HTTP タスクの非同期実行・再試行・流量制御。AWS の SQS に近い役割
- Pub/Sub との違い: Pub/Sub は 1 対多の ファンアウト(同報) やストリーミング向き、Cloud Tasks は 個別タスクの実行制御・遅延実行 向き
- Cloud Scheduler との違い: Scheduler は cron による定期実行、Cloud Tasks は 1 回かぎりのタスク(任意の遅延つき)
- 配信は プッシュ型で、ワーカーが 2xx を返せば成功。それ以外は 再試行
- 実行は 少なくとも 1 回。ワーカーは 冪等 に作るのが原則
- 流量は ディスパッチレートと同時実行数の両方で制御し、外部 API のレート制限に合わせられる
関連サービス・比較
| 観点 | Cloud Tasks | Pub/Sub | Cloud Scheduler |
|---|---|---|---|
| 主な用途 | 個別タスクの非同期実行と再試行 | メッセージ同報とストリーミング | cron による定期実行 |
| 配信方式 | プッシュ(HTTP ターゲットを呼ぶ) | Pull / Push の両方 | 指定先を時刻起動 |
| 流量制御 | レートと同時実行数をキュー単位で制御 | サブスクライバー側のペース | スケジュールのみ |
| 遅延・予約 | scheduleTime で1回だけ遅延実行 | 原則すぐ配信 | 繰り返しスケジュール |
| 再試行 | キュー設定で指数バックオフ | ackDeadline と再配信 | ジョブ単位の再試行 |
| AWS 相当 | SQS(に近い) | SNS と SQS の両面 | EventBridge Scheduler |
1 件ずつ確実に実行・再試行したい なら Cloud Tasks、1 イベントを多数へ同報 したいなら Pub/Sub、毎日や毎時に定期起動 したいなら Cloud Scheduler。Scheduler から Cloud Tasks や Pub/Sub を起点にする組み合わせもよく使われます。
ハンズオン / CLI例
# キューを作成(ディスパッチレートと同時実行数で流量を制御)
gcloud tasks queues create jobs-queue \
--max-dispatches-per-second=5 \
--max-concurrent-dispatches=10 \
--max-attempts=5
# HTTP ターゲットへタスクを作成(OIDC 認証付き)
gcloud tasks create-http-task \
--queue=jobs-queue \
--url=https://worker-xxxx.a.run.app/process \
--method=POST \
--body-content='{"id":"job-1"}' \
--oidc-service-account-email=tasks-invoker@PROJECT_ID.iam.gserviceaccount.com
# 60 秒後に実行する遅延タスク(指定時刻まで配信されない)
gcloud tasks create-http-task \
--queue=jobs-queue \
--url=https://worker-xxxx.a.run.app/notify \
--schedule-time="2026-06-14T12:00:00Z"
# 過負荷時はキューを一時停止し、復旧後に再開
gcloud tasks queues pause jobs-queue
gcloud tasks queues resume jobs-queue
# キューの状態と設定を確認
gcloud tasks queues describe jobs-queue
Google Cloud Service
Cloud Tasksを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アプリ統合
比較で見る軸
クラウド: Google Cloud / カテゴリ: アプリ統合 / 難易度: basic
導入後に効く点
ディスパッチレートと同時実行数でワーカーへの流量を細かく制御できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- アプリ統合
- 難易度
- basic
- 関連資格
- —
- 設計柱
- reliability
判断チェックリスト
- 自社の用途が「アプリ統合 / reliability」に近いか確認する。
- 強みである「HTTP ターゲットへ非同期タスクを配信し再試行まで任せるタスクキュー。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。