Cloud Service
メッセージング
Pub/Sub / Eventarc / Cloud Tasks / Dataflow の使い分けを一枚で。疎結合キュー・ファンアウト・イベント配信・ストリームの違いを即断。
ひと目で使い分け
| やりたいこと | 選ぶもの |
|---|---|
| バッファして疎結合に処理(キュー) | Pub/Sub(Pull サブスク 1 本) |
| 1イベントを複数へ同報(ファンアウト) | Pub/Sub(複数サブスク) |
| 特定タスクを実行時刻・レート制御つきで確実にキック | Cloud Tasks |
| GCP の状態変化やログで宛先へ振り分け(イベント駆動) | Eventarc |
| 毎秒大量のストリームを取り込み・再処理・分析 | Pub/Sub + Dataflow |
| 定期実行(cron) | Cloud Scheduler |
AWS では SQS(キュー)と SNS(ファンアウト) が別サービスですが、GCP では Pub/Sub 1 つが両方をこなします。 キュー的に使うなら Pull サブスクリプションを 1 本、同報したいなら 同じトピックにサブスクリプションを複数生やすだけ、というのが基本発想です。
詳細比較
| 観点 | Pub/Sub | Cloud Tasks | Eventarc | Dataflow |
|---|---|---|---|---|
| モデル | Pub/Sub+キュー両対応 | タスクキュー(1対1) | イベントルーティング | ストリーム/バッチ処理 |
| 配信方式 | Pull / Push | Push(HTTP ターゲット) | Push(CloudEvents) | Pull で取り込み処理 |
| 順序 | 順序指定キーで保証 | 個別ディスパッチ | 保証なし | ウィンドウ/イベント時刻で制御 |
| 再読み込み | シークで時刻/スナップショットへ巻き戻し | 不可(実行で消える) | 不可 | ソース(Pub/Sub)依存 |
| スコープ | グローバル | リージョン | リージョン(一部 global) | リージョン(ジョブ単位) |
| 代表用途 | 疎結合バッファ/ファンアウト | 個別ジョブの確実なキック | GCP イベント駆動連携 | リアルタイム集計/ETL |
キュー的に使う:Pub/Sub サブスク か Cloud Tasks か
どちらも「処理を後回しにして確実にこなす」用途で重なりますが、設計思想が違います。
| 観点 | Pub/Sub(Pull サブスク) | Cloud Tasks |
|---|---|---|
| 発想 | ストリームをまとめて高スループットに捌く | 個々のタスクを 1 件ずつ確実にディスパッチ |
| ターゲット | サブスクライバーが取りに行く / Push 先 URL | HTTP / App Engine ターゲットへ Push |
| 実行時刻の制御 | 基本は即時(到着順) | スケジュール指定・遅延実行が得意 |
| レート/同時実行の制御 | サブスクライバー側で調整 | キューで最大ディスパッチ/同時実行を細かく制御 |
| 重複 | at-least-once(冪等前提) | 原則 1 タスク 1 回(再試行はあり) |
| 向き | ファンアウト・大量イベント | 外部 API 呼び出しの平準化・予約実行 |
Pub/Sub=多対多のストリーミング配信(ファンアウト・高スループット)、Cloud Tasks=個別タスクのディスパッチ(実行時刻やレートを細かく制御)。 「届いたイベントを並列に捌く」なら Pub/Sub、「この処理を 5 分後に・1 秒あたり N 件だけ確実にキック」なら Cloud Tasks を選びます。
迷ったらこの順で考える
- GCP の状態変化(Storage 作成・監査ログ等)をトリガーに処理したい → Eventarc(CloudEvents で Cloud Run などへ配信)
- 送信側と処理側を切り離してバッファ/同報したい → Pub/Sub(キューなら Pull 1 本、ファンアウトなら複数サブスク)
- 特定タスクを予約実行・レート制御つきで確実にキックしたい → Cloud Tasks
- 毎秒大量のストリームを取り込み、集計・変換して保存したい → Pub/Sub + Dataflow(→ BigQuery / GCS)
- 時刻ベースの定期実行(cron)がしたい → Cloud Scheduler
どちらもイベントを運びますが役割が違います。
- Pub/Sub=汎用の高スループットなメッセージング基盤。自分で発行したメッセージを自由なトポロジで配る「土管」。
- Eventarc=GCP サービスのイベント(Cloud Storage / 監査ログ等)を CloudEvents 標準に整え、フィルタして Cloud Run などへ届ける上位レイヤー。内部の配送には Pub/Sub を使います。 「アプリ間で自前のメッセージを流す」なら Pub/Sub、「GCP で何かが起きたら処理する」なら Eventarc です。
GCP に「Kinesis」という単一サービスはありません。Pub/Sub が取り込み(シャード管理不要で自動スケール)、Dataflow(Apache Beam)がストリーム/バッチ処理を担い、2 つの組み合わせで AWS の Kinesis Data Streams + Managed Service for Apache Flink に相当します。 Pub/Sub は消費してもシークで過去へ巻き戻せるため、リアルタイム処理とバグ修正後の再処理を両立できます。
Push サブスクリプションや Eventarc の宛先を認証なしの公開 URL で受けるのは NG。誰でも偽メッセージを POST できてしまいます。
Push は OIDC トークン認証を有効化し受信側でトークンを検証、Eventarc は専用サービスアカウントに roles/eventarc.eventReceiver と宛先の roles/run.invoker のみを付与します。鍵(サービスアカウント JSON)のハードコードも避け、ワークロードに紐づくサービスアカウントを使います。
AWS との対応
| 役割 | GCP | AWS |
|---|---|---|
| 疎結合キュー | Pub/Sub(Pull サブスク) | SQS |
| ファンアウト/同報 | Pub/Sub(複数サブスク) | SNS(+複数 SQS) |
| 個別タスクのディスパッチ | Cloud Tasks | SQS(+ワーカー) |
| イベントルーティング | Eventarc | EventBridge |
| ストリーム取り込み+処理 | Pub/Sub + Dataflow | Kinesis(Data Streams + Flink) |
| 定期実行(cron) | Cloud Scheduler | EventBridge Scheduler |
Pub/Sub 1 つで SQS のキューと SNS のファンアウトの両方をこなすのが GCP 最大の特徴。 cron は Eventarc ではなく Cloud Scheduler、ストリーム処理は単一サービスではなく Pub/Sub + Dataflow という役割分担を押さえておけば迷いません。
関連: Pub/Sub / Eventarc / Pub/Sub + Dataflow
Google Cloud Service
メッセージングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
cheatsheets
比較で見る軸
クラウド: Google Cloud / カテゴリ: cheatsheets / 難易度: basic
導入後に効く点
導入後の運用手順、権限、監視、更新方法まで含めて評価します。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- cheatsheets
- 難易度
- basic
- 関連資格
- —
- 設計柱
- —
判断チェックリスト
- 自社の用途が「cheatsheets」に近いか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。