クラウドサービス

Azure Event Grid MQTTブローカー

多数の IoT デバイスを MQTT で相互接続し、デバイス間 pub/sub と Azure へのイベント取り込みをマネージドで実現。AWS IoT Core の MQTT ブローカに相当する位置づけ。

中級セキュリティ信頼性運用上の優秀性コスト最適化
最終更新: 2026-07-29公式ドキュメント
3つの要点
TL;DR
  1. Event Grid名前空間でMQTT 3.1.1/5.0の双方向通信を提供する。
  2. QoS 0は最大1回、QoS 1は最低1回で重複を許容する。
  3. 証明書とトピック権限で端末を分離し、Azure側へ転送する。

解決する課題

多数の IoT デバイスやクライアントを標準プロトコルの MQTT でつなぎ、デバイス同士のメッセージ交換と、クラウド側でのイベント処理の両方をマネージドに実現できます。

  • 大量のデバイスを標準の MQTT で双方向接続し、ブローカ運用の手間をなくしたい
  • デバイス間で直接 pub/sub(command/telemetry のやり取り)をしたい
  • 受け取ったメッセージをAzure サービスへルーティングしてクラウド処理につなげたい
  • デバイスごと・トピックごとにきめ細かい認可をかけ、なりすましや横取りを防ぎたい

主要概念と用語

  • 名前空間(Namespace): MQTT ブローカや Event Grid のプル/プッシュ機能を束ねる管理単位。MQTT を使うにはこの名前空間で MQTT 機能を有効化する
  • MQTT ブローカ: 接続したクライアント間でメッセージを中継する pub/sub の中核。MQTT v3.1.1 と v5.0 をサポート
  • クライアント: ブローカへ接続するデバイスやアプリ。クライアント認証情報(証明書のサブジェクトなど)で識別する
  • トピック(MQTT トピック): メッセージの宛先を表す階層的な文字列。発行者は特定トピックへ publish し、購読者は subscribe する
  • トピック空間(Topic space): ワイルドカードを含むトピックフィルタの集合。誰がどのトピックへ publish/subscribe できるかをこの単位でまとめて定義する
  • パーミッションバインディング: クライアントグループとトピック空間を結びつけ、publishersubscriber の権限を付与する設定
  • ルーティング: ブローカが受け取った MQTT メッセージを、CloudEvents として Event Grid 名前空間トピックへ流し、Azure サービスへ届ける仕組み
  • MQTT セッション: クライアントとブローカ間の接続状態。永続セッションでは切断中のメッセージ保持や再開ができる
従来の Event Grid Topics とは別系統

HTTP プッシュ配信の従来型 Event Grid Topics とは独立した機能です。MQTT は必ず Event Grid 名前空間(Namespaces) 側で提供され、デバイス向けの pub/sub とクラウド取り込みを担います。

仕様・制限・クォータ

  • 対応プロトコル: MQTT v3.1.1 と v5.0。接続は TLS で暗号化し、平文接続は許可しない
  • QoS: QoS 0 は最大 1 回で再送せず、QoS 1 は確認応答まで再送する最低 1 回配信。QoS 1 の受信側は重複を前提に冪等に設計する
  • 保持/共有購読など: MQTT v5.0 の機能(ユーザープロパティ、共有サブスクリプション、メッセージ有効期限など)に対応。利用可否は仕様の更新で変わり得るため公式を確認する
  • 容量: 1 メッセージは最大 512 KiB。1 TU あたり最大 10,000 セッション、1,000 publish/秒、1 MB/秒で、名前空間は通常最大 40 TU
  • 永続セッション: セッション有効期限は名前空間で設定し、上限は 8 時間。切断中の未確認 QoS 1 が上限を超えるとセッションが破棄される
  • ルーティング先: 名前空間トピックはプル配信または Event Hubs へのプッシュ、カスタムトピックは Functions・Webhook・Service Bus などへ配信できる。ルーティングは最低 1 回、順序非保証で、再試行後も重複し得る

内部の仕組み

横にスクロール

Event Grid名前空間のMQTTブローカーで端末を認証・認可し、QoS 0またはQoS 1で購読者とAzure側へ配信する処理図
証明書またはEntra IDでクライアントを識別し、クライアントグループとトピック空間で発行・購読を制限します。QoS 0は再送なし、QoS 1は確認応答まで再送され、クラウドルーティングも重複と順不同を前提に処理します。

クライアントは TLS 接続でブローカへハンドシェイクし、提示した認証情報(X.509 証明書のサブジェクトや Entra ID トークンなど)でクライアントとして識別されます。識別されたクライアントはクライアントグループに分類され、グループに紐づくパーミッションバインディングによって、どのトピック空間へ publish/subscribe できるかが決まります。

発行者があるトピックへ publish すると、ブローカはそのトピックに一致するフィルタで subscribe している購読者すべてへメッセージを中継します。これがデバイス間 pub/sub の基本動作です。ワイルドカードを含むトピックフィルタにより、1 つの購読で複数トピックをまとめて受け取れます。

クラウド連携が必要な場合は、ブローカーがメッセージを CloudEvents 形式に包み、名前空間トピックまたはカスタムトピックへルーティングします。名前空間トピックはアプリによるプル取得か Event Hubs へのプッシュ、カスタムトピックは Functions・Webhook・Service Bus など従来の Event Grid 配信先へつなげます。

デバイス間とクラウド取り込みを1つで

ブローカは「デバイス同士の直接 pub/sub」と「クラウドへの一方向の取り込み」を同じ基盤で扱えます。コマンド配信はデバイス間トピックで、テレメトリ集約はルーティング経由で、と役割を分けると設計が整理しやすくなります。

設計パターン / ベストプラクティス

  • トピック設計を先に固める: 階層を region/site/device/telemetry のように設計し、トピック空間とワイルドカードで認可をまとめやすくする
  • 最小権限の認可: クライアントグループごとに publisher/subscriber を分け、デバイスは自分の領域のトピックだけ扱えるようにする
  • テレメトリはルーティングで集約: 大量のストリーム処理は名前空間トピックから Event Hubs へ、Functions や Service Bus など従来の配信先が必要ならカスタムトピックへルーティングする
  • 冪等設計: QoS 1 の少なくとも 1 回配信を前提に、メッセージ ID 等で重複排除する
  • 証明書のライフサイクル管理: 失効・ローテーションの運用を整備し、CA ベースの認証で大量デバイスを扱いやすくする

運用・監視

  • Azure Monitor のメトリクスで、接続中クライアント数、publish/deliver の成否、ドロップ、ルーティングの配信状況などを監視する
  • 診断ログを Log Analytics / Storage / Event Hubs へ送り、接続失敗や認可拒否、切断理由を追跡できるようにする
  • 接続トラブルの切り分け: TLS のハンドシェイク、クライアント認証情報とクライアント識別の対応、パーミッションバインディングの権限、トピック空間のフィルタ一致を順に確認する
  • ルーティング先で配信失敗とデッドレターを監視する。名前空間トピックのプル購読では保持期限と未確認数、カスタムトピックでは各配信先の失敗を分けて確認する

コスト

MQTT 機能は Event Grid 名前空間で提供され、TU の時間料金と操作数で課金されます。常時起動の専用ブローカーを自前で持つ必要はありませんが、確保した TU の料金は操作がない時間にも発生します。

項目課金の考え方補足
容量TUを時間単位で課金1 TUで最大10,000セッション。接続時間の別課金はない
MQTT操作publish・deliver・connect等を64KB単位で課金月100万操作の無料枠あり
ルーティング属性付加・ルーティングはイベント操作として課金名前空間トピックへのルーティング自体は無料
インフラ費用原則なし(マネージド)ブローカの構築・運用が不要

セキュリティ

  • 認証: クライアント証明書(X.509)による認証が基本で、CA ベースの一括登録に対応。アプリやサービスからの接続には Microsoft Entra ID 認証も利用できる
  • 認可: クライアントグループ × トピック空間 × パーミッションバインディングで、トピック単位の publish/subscribe 権限を最小権限で設計する
  • 通信の暗号化: 接続は TLS で保護され、平文の MQTT は許可しない
  • ネットワーク制御: プライベートエンドポイントや公開アクセスの制限で、ブローカへの到達経路を絞れる
アンチパターン

全デバイスを 1 つの広いトピック空間に publisher かつ subscriber として登録するのは NG。1 台が侵害されると全トピックを横取り・なりすましできてしまいます。クライアントグループを分け、各デバイスには必要なトピックの最小権限だけを与えてください。

関連サービス・比較

最も近いのは AWS の IoT Core(MQTT ブローカ部分) です。どちらもマネージドな MQTT pub/sub と、メッセージのクラウドルーティングを提供します。

観点Event Grid 名前空間 MQTTAWS IoT Core (MQTT)
役割マネージド MQTT ブローカと取り込みマネージド MQTT ブローカと取り込み
MQTT バージョンv3.1.1 / v5.0v3.1.1 / v5.0
認証X.509 証明書 / Entra IDX.509 証明書 / IAM / カスタム認証
認可トピック空間 + パーミッションバインディングIoT ポリシー
クラウド連携名前空間トピック経由で Azure へルーティングルールエンジンで AWS へルーティング
後段の連携先名前空間はEvent Hubs、カスタムはFunctions等Lambda / Kinesis / SQS など
デバイス管理機能は範囲が異なる

本機能は MQTT メッセージングが中心で、デバイスのプロビジョニングやツインといった IoT デバイス管理までは含みません。デバイスライフサイクル管理が必要なら Azure 側の IoT 向けサービスと組み合わせて補完してください。

ハンズオン / CLI例

# namespace配下はPreviewのeventgrid拡張機能。Azure CLI 2.53.1以降を使用する
# リソースグループを作成
az group create --name demo-rg --location japaneast

# Event Grid 名前空間を作成し、MQTT を有効化
az eventgrid namespace create \
  --resource-group demo-rg \
  --name demo-ns \
  --location japaneast \
  --topic-spaces-configuration "{state:Enabled}"

# クライアントを登録(X.509 証明書のサブジェクト名で識別)
az eventgrid namespace client create \
  --resource-group demo-rg \
  --namespace-name demo-ns \
  --client-name device01 \
  --authentication-name "device01" \
  --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[<THUMBPRINT>]}" \
  --state Enabled

# トピック空間を作成(このフィルタ集合へのアクセスをまとめて制御)
az eventgrid namespace topic-space create \
  --resource-group demo-rg \
  --namespace-name demo-ns \
  --name telemetry-space \
  --topic-templates "devices/+/telemetry"

# パーミッションバインディングで publisher 権限を付与
az eventgrid namespace permission-binding create \
  --resource-group demo-rg \
  --namespace-name demo-ns \
  --name device-publish \
  --client-group-name '$all' \
  --permission publisher \
  --topic-space-name telemetry-space

Azure Service

Azure Event Grid MQTTブローカーを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

アプリ統合

比較で見る軸

クラウド: Azure / カテゴリ: アプリ統合 / 難易度: intermediate

導入後に効く点

QoS 0は最大1回、QoS 1は最低1回で重複を許容する。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
Azure
カテゴリ
アプリ統合
難易度
intermediate
関連資格
設計柱
security / reliability / operational / cost

判断チェックリスト

  • 自社の用途が「アプリ統合 / security」に近いか確認する。
  • 強みである「Event Grid名前空間でMQTT 3.1.1/5.0の双方向通信を提供する。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

アプリ統合securityreliabilityoperationalcost