Cloud Service
Pub/Sub for IoT Ingestion
大量のデバイスからのテレメトリを取りこぼさず受け止め、後段の分析・処理へ橋渡しする IoT 取り込み基盤。フルマネージドな Pub/Sub をデバイスの入口に据える設計で、AWS の IoT Core+Kinesis に近い役割を担う。
- 1.多数のデバイスからのテレメトリを Pub/Sub で一括受信し、後段へ疎結合に渡す入口。
- 2.デバイス急増やバースト送信もサブスクリプションがバッファし、処理側のペースで捌く。
- 3.GCP の IoT Core 終了後はこの Pub/Sub 直結が IoT 取り込みの標準パターン。
解決する課題
数万から数百万のデバイスが送るテレメトリを、ブローカの構築やスケール調整を待たずに取り込み、後段の分析・保存・通知へつなげられます。GCP の旧 IoT Core 終了後は、Pub/Sub をデバイスの入口に据えるのが標準的な取り込みパターンです。
- デバイス台数や送信頻度が読めず、バックエンドが詰まる → サブスクリプションがバッファして処理側のペースで捌く
- 一斉に起動した端末からの バースト送信 を取りこぼさず受け止めたい
- 1 件のテレメトリを リアルタイム分析・長期保存・アラート など複数系統へ同報したい
- デバイスは MQTT や HTTP しか話せない → プロトコルブリッジで Pub/Sub に橋渡しする
- リージョンをまたぐ広域デバイス群でも 同一エンドポイント で受けたい(グローバルサービス)
主要概念と用語
- テレメトリ(Telemetry): デバイスが定期送信するセンサー値や状態などの計測データ
- 取り込み(Ingestion): デバイスからのデータをクラウド側の入口で受け止める工程。ここを Pub/Sub が担う
- トピック(Topic): テレメトリの発行先。デバイス種別や用途ごとに分けることが多い
- サブスクリプション(Subscription): トピックに紐づく受け取り口。1 トピックに複数付けるとファンアウトになり、分析・保存・通知へ同報できる
- プロトコルブリッジ(Protocol bridge): MQTT や HTTP で送るデバイスと Pub/Sub の間を仲介する層。パートナー製 IoT プラットフォームや自前のゲートウェイで構成する
- デバイス認証: 端末ごとの資格情報(証明書やトークン)で送信元を識別する仕組み。Pub/Sub 手前のブリッジ層で行うのが一般的
- 確認応答(ack)と ackDeadline: 取得したメッセージを処理し終えたら
ack。期限内にackしないと 再配信 される - デッドレタートピック(Dead-letter topic): 規定回数失敗したメッセージの退避先
- Pub/Sub サブスクリプション直送: サブスクライバーのコードを書かずに、BigQuery / Cloud Storage へメッセージを直接取り込む形式
仕様・制限・クォータ
- 少なくとも 1 回(at-least-once)配信 が基本。まれに重複 するため処理は 冪等 に作る
- メッセージ本文は大きめ(数 MB 規模)まで扱えるが、テレメトリは小さく頻度の高いものが中心
ack前メッセージには保持期間があり、サブスクライバー停止中も一定期間バッファされるackDeadlineの範囲内でackできなければ再配信される(リース延長も可能)- グローバルサービス: トピック/サブスクリプションは単一エンドポイントを持ち、配信はメッセージストレージポリシーに従う
- 1 トピックに 多数のサブスクリプション を付けてファンアウトできる
- 属性(attribute) にデバイス ID やリージョンなどのメタデータを載せ、後段のルーティングに使える
GCP の旧 Cloud IoT Core はすでに提供を終了しています。現在のデバイス取り込みは、MQTT/HTTP ブリッジやパートナー製 IoT プラットフォームを介して Pub/Sub に直結 する構成が標準です。デバイスレジストリや MQTT ブローカの機能は Pub/Sub 単体には含まれないため、ブリッジ層の設計が前提になります。
内部の仕組み
デバイスはまず MQTT/HTTP ブリッジ層で認証され、テレメトリがブリッジ経由で Pub/Sub トピックへ発行されます。発行されたメッセージは 分散ストレージへ複数コピーで永続化 され、その時点で各サブスクリプションのキューへ振り分けられます。後段のサブスクライバーは Pull で取得するか、Push で受信します。
- 処理に成功して
ackすると、そのサブスクリプションからメッセージが削除される ackDeadline内にackできなければ 再配信(少なくとも 1 回配信。冪等処理が前提)- 規定回数失敗すると デッドレタートピック へ退避される
- BigQuery / Cloud Storage サブスクリプションを使うと、サブスクライバーのコードなしで取り込み先へ直送される
Pub/Sub は基本「少なくとも 1 回」配信なので、同じテレメトリが まれに重複 します。 デバイス ID とタイムスタンプなどで一意化し、処理を 冪等 に作るのが鉄則です。
設計パターン / ベストプラクティス
- ブリッジ → Pub/Sub → 分岐: ブリッジで受けたテレメトリを 1 トピックに集約し、複数サブスクリプションで分析・保存・通知へファンアウト
- ストリーミング処理: リアルタイム集計や異常検知は Dataflow(Apache Beam) を Pub/Sub の後段に置く
- 長期保存: 生データは Cloud Storage サブスクリプション、構造化分析は BigQuery サブスクリプション で直送し、中継 ETL を省く
- コマンド送信(下り): デバイスへの制御指示は、別トピック経由でゲートウェイへ配り、ブリッジから端末へ届ける
- 属性でルーティング: デバイス種別やリージョンを属性に載せ、後段で振り分ける
- デッドレタートピックで取り込み失敗を退避し、形式不正や権限エラーを調査・再投入
運用・監視
- Cloud Monitoring のメトリクスで滞留を監視:
- 未配信メッセージ数(バックログの増加はサブスクライバー不足やダウンストリーム障害の兆候)
- 最古の未 ack メッセージの経過時間(処理遅延の指標)
- バックログ急増 → サブスクライバー不足や ダウンストリーム障害、
ack失敗を疑う - デッドレタートピックに溜まる → メッセージ形式 / 権限(IAM)/ 処理ロジック を確認
- デバイス側の 送信成功率やブリッジの可用性 も併せて監視し、入口での取りこぼしを防ぐ
- シーク(Seek) で過去へ巻き戻し、バグ修正後のリプレイや再取り込みが可能
コスト
課金はおもに メッセージのスループット量(取り込み・配信・保持のデータ量) に対して発生します。IoT では小さなメッセージが高頻度で届くため、最小課金メッセージサイズの考え方と総件数が効いてきます。
| コスト要素 | 課金の考え方 | 節約のポイント |
|---|---|---|
| テレメトリ取り込み | 転送データ量で課金 | 送信頻度を最適化しバッチ化を検討 |
| ファンアウト | サブスクリプションごとに配信量が加算 | 本当に必要な購読者だけ接続する |
| メッセージ保持 | 保持データ量と期間で課金 | 必要な保持期間に絞る |
| BigQuery/GCS 直送 | Pub/Sub 配信料と取り込み先の料金 | 中継 ETL を省き運用コストも削減 |
| ブリッジ層 | ゲートウェイやパートナー基盤の費用 | デバイス規模に合う方式を選ぶ |
セキュリティ
- デバイス認証はブリッジ層で: 端末ごとの証明書やトークンで送信元を識別し、Pub/Sub には認証済みの経路だけ発行させる
- IAM でトピック/サブスクリプション単位の権限を最小化(発行はブリッジ、購読は後段サービスに限定)
- ブリッジや後段サービスには サービスアカウント を使い、鍵のハードコードを避ける
- 転送中は TLS、保存時は Google 管理鍵で既定暗号化。要件次第で CMEK(Cloud KMS の顧客管理鍵) を指定
- VPC Service Controls で境界を作り、データの持ち出しを防止
すべてのデバイスに 同一の資格情報 を配って Pub/Sub へ直接発行させるのは NG。 1 台漏えいすると全体が偽データを送れてしまいます。デバイスごとの認証情報をブリッジ層で検証し、Pub/Sub への発行権限はその経路だけに絞ってください。
関連サービス・比較
IoT 取り込みでは、流量が読めるなら事前確保型の Pub/Sub Lite が候補になります。自動スケールやグローバル配信が要るなら通常の Pub/Sub を選びます。
| 観点 | Pub/Sub(取り込み) | Pub/Sub Lite |
|---|---|---|
| キャパシティ | 自動スケール | 事前にパーティションを確保 |
| 課金 | 従量課金 | 確保したキャパシティに支払い |
| スコープ | グローバル | ゾーン/リージョン |
| 向くワークロード | 流量が読めない/急増する | 流量がおおむね読める |
| 後段直送 | BigQuery/GCS 直送あり | 通常はサブスクライバー実装 |
デバイス台数や送信頻度が変動するなら、自動スケールする通常の Pub/Sub を入口にします。 流量が安定していてコストを固定したいなら Pub/Sub Lite が選択肢になります。
ハンズオン / CLI例
# テレメトリ用トピックを作成
gcloud pubsub topics create device-telemetry
# 分析用サブスクリプション(Pull、ack 期限とデッドレターを設定)
gcloud pubsub subscriptions create telemetry-analytics \
--topic=device-telemetry \
--ack-deadline=30 \
--dead-letter-topic=telemetry-dlq \
--max-delivery-attempts=5
# 長期保存はもう 1 本サブスクリプションを生やしてファンアウト
gcloud pubsub subscriptions create telemetry-archive --topic=device-telemetry
# デバイスからの 1 件を擬似的に発行(属性にデバイス ID を付与)
gcloud pubsub topics publish device-telemetry \
--message='{"temp":24.5}' \
--attribute=device_id=sensor-001,region=asia
# 取り込んだメッセージを取得して即 ack(確認)
gcloud pubsub subscriptions pull telemetry-analytics --auto-ack --limit=10
Google Cloud Service
Pub/Sub for IoT Ingestionを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
IoT
比較で見る軸
クラウド: Google Cloud / カテゴリ: IoT / 難易度: intermediate
導入後に効く点
デバイス急増やバースト送信もサブスクリプションがバッファし、処理側のペースで捌く。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- IoT
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- reliability / performance / operational / security
判断チェックリスト
- 自社の用途が「IoT / reliability」に近いか確認する。
- 強みである「多数のデバイスからのテレメトリを Pub/Sub で一括受信し、後段へ疎結合に渡す入口。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。