Azure Event Grid の MQTT ブローカー機能の概要

Azure Event Grid を使用すると、MQTT クライアントは相互に、また Azure サービスと通信し、モノのインターネット (IoT) ソリューションをサポートできます。

Azure Event Grid の MQTT ブローカー機能を使うと、次のシナリオを実現できます。

  • 多対一メッセージング パターンを使用してテレメトリを取り込みます。 このパターンにより、アプリケーションは、デバイスとの多数の接続を管理する負荷を Event Grid にオフロードできます。
  • 要求/応答 (一対一) メッセージ パターンを使用して MQTT クライアントを制御します。 このパターンにより、クライアントは、クライアントの役割に関係なく、制限なしで他のクライアントと通信できます。
  • 一対多メッセージング パターンを使用して、クライアントのフリートにアラートをブロードキャストします。 このパターンにより、アプリケーションは、メッセージを 1 つだけ発行できます。これは、サービスによって対象のすべてのクライアントにレプリケートされます。
  • HTTP プッシュ配信機能を使用して MQTT メッセージを Azure サービスと Webhook にルーティングし、MQTT クライアントからのデータを統合します。 この Azure サービスとの統合により、IoT デバイスからのデータ インジェストから始まるデータ パイプラインを構築できます。

これらのシナリオを示すコード サンプルについては、こちらのリポジトリを参照してください。

MQTT ブローカーは、特に自動車やモビリティのシナリオの実装に最適です。 Azure のメッセージングおよびデータ分析サービスを使用して、何百万台もの車両をクラウドに接続するためのセキュリティで保護されたスケーラブルなソリューションを構築する方法については、リファレンス アーキテクチャに関するページを参照してください。

High-level diagram of Event Grid that shows bidirectional MQTT communication with publisher and subscriber clients.

主要な概念

次に示すのは、Azure Event Grid の MQTT ブローカー機能に関連する主要な概念の一覧です。

MQTT

MQTT は、制約のある環境向けに設計された発行/サブスクライブ メッセージング トランスポート プロトコルです。 効率性、スケーラビリティ、信頼性により、IoT シナリオでよく使用される通信標準です。 MQTT ブローカーを使うと、クライアントは、MQTT v3.1.1、MQTT v3.1.1 over WebSockets、MQTT v5、MQTT v5 over WebSockets プロトコルを介して、メッセージのパブリッシュとサブスクライブを行うことができます。 次に示すのは、MQTT ブローカーの主要な機能です。

  • MQTT v5 の機能:

    • ユーザー プロパティを使用すると、メッセージ ヘッダーにカスタム キーと値のペアを追加して、メッセージに関するより多くのコンテキストを提供できます。 たとえば、受信者がメッセージを効率的に処理できるように、メッセージの目的または配信元を含めます。
    • 要求/応答パターンを使用すると、クライアントは標準の要求/応答非同期パターンを利用し、事前の構成なしでクライアントが応答するように要求の応答トピックと関連付け ID を指定できます。
    • メッセージの有効期間を使うと、関連性がなくなった、または有効でなくなったメッセージを無視するタイミングを、MQTT ブローカーに対して宣言できます。 たとえば、古いコマンドやアラートを無視します。
    • トピックの別名は、クライアントがトピック フィールドのサイズを小さくし、データ転送のコストを削減するのに役立ちます。
    • 最大メッセージ サイズにより、クライアントがサーバーから処理できる最大メッセージ サイズを制御できます。
    • 受信最大により、クライアントは処理速度やストレージ機能などの機能に応じてメッセージ レートを制御できます。
    • クリーン スタートとセッションの有効期限により、クライアントは構成可能な時間間隔でクライアントのサブスクリプション情報とメッセージを保持して、セッションの信頼性とセキュリティを最適化できます。
    • 否定受信確認を使用すると、クライアントはさまざまなエラー コードに効率的に対応できます。
    • サーバー送信切断パケットを使用すると、クライアントは切断を効率的に処理できます。
  • MQTT ブローカーでは、MQTT 仕様との適合をさらに高めるため、MQTT v5 の機能が今後追加されます。 次の一覧では、MQTT ブローカーによってサポートされている機能と MQTT v5 の仕様の現在の違いについて詳しく説明します。will メッセージ、保持フラグ、メッセージの順序、QoS 2 はサポートされていません。

  • MQTT v3.1.1 の機能:

    • 永続的なセッションでは、クライアントの切断時にクライアントのサブスクリプション情報とメッセージを保持して、信頼性を確保します。
    • QoS 0 と 1 により、クライアントは通信の効率性と信頼性を制御できます。
  • MQTT ブローカーでは、MQTT 仕様との適合をさらに高めるため、MQTT v3.1.1 の機能が今後追加されます。 次の一覧では、MQTT ブローカーによってサポートされている機能と MQTT v3.1.1 の仕様の現在の違いについて詳しく説明します。will メッセージ、保持フラグ、メッセージの順序、QoS 2 はサポートされていません。

MQTT ブローカーと現在の制限事項について詳しくは、こちらをご覧ください。

発行/サブスクライブ メッセージング モデル

発行/サブスクライブ メッセージング モデルは、クライアントへのスケーラブルで非同期の通信を提供します。 これにより、クライアントは多数の接続とメッセージを処理する負荷をサービスにオフロードできます。 発行/サブスクライブ メッセージング モデルにより、クライアントは一対多、多対一、一対一のメッセージング パターンを使用して効率的に通信できます。

  • 一対多のメッセージング パターンを使用すると、クライアントは、メッセージを 1 つだけ発行できます。これは、サービスによって対象のすべてのクライアントにレプリケートされます。
  • 多対一のメッセージング パターンを使うと、クライアントは多数の接続を管理する負担を MQTT ブローカーにオフロードできます。
  • 一対一のメッセージング パターンを使用すると、クライアントの役割に関係なく、制限なしで他のクライアントと通信できます。

名前空間

Event Grid 名前空間は、MQTT ブローカー機能をサポートするリソースと、プル配信機能をサポートするリソースの管理コンテナーです。 MQTT クライアントは、MQTT ブローカーに接続して、メッセージのパブリッシュとサブスクライブを行うことができます。一方、MQTT ブローカーは、クライアントを認証し、パブリッシュとサブスクライブの要求を承認し、対象のクライアントにメッセージを転送します。 名前空間の概念の詳細についてご覧ください。

クライアント

クライアントは、MQTT メッセージを発行およびサブスクライブする IoT デバイスまたはアプリケーションを参照します。

IoT デバイスは、テレメトリを送信してコマンドを受信するためにインターネットに接続されている物理オブジェクトです。 これらのデバイスは、センサー、アプライアンス、マシン、または埋め込みセンサーとソフトウェアを搭載したその他のオブジェクトです。 センサーとソフトウェアを使用すると、相互に通信したり、周囲の環境とやり取りしたりできます。 IoT デバイスの価値は、リアルタイムのデータと分析情報を提供できることにあります。これにより、企業や個人が情報に基づいた意思決定を行い、効率性と生産性を向上させることができます。

IoT アプリケーションは、IoT デバイスとやり取りして、そのデータを処理するように設計されているソフトウェアです。 通常、データ収集、処理、ストレージ、視覚化、分析などのコンポーネントが含まれます。 これらのアプリケーションを使用すると、ユーザーは接続されたデバイスを監視および制御し、タスクを自動化し、IoT デバイスによって生成されたデータから分析情報を得ることができます。

クライアント認証

Event Grid には、接続が許可されているクライアントに関する情報を格納するクライアント レジストリがあります。 クライアントが接続するには、クライアント レジストリにそのクライアントのエントリが存在する必要があります。 クライアントは、MQTT ブローカーに接続するとき、ID レジストリに格納されている資格情報に基づいて MQTT ブローカーに対する認証を行う必要があります。 MQTT ブローカーでは、IoT デバイスの業界標準である X.509 証明書認証と、Azure のアプリケーション認証標準である Microsoft Entra ID がサポートされています。MQTT クライアント認証の詳細について説明します。

アクセス制御

IoT 環境の非常に大きな規模と制約付きデバイス固有のセキュリティ上の課題を考慮すると、アクセス制御は IoT シナリオにとって重要です。 Event Grid は、柔軟なアクセス制御モデルを通じてロールベースのアクセス制御 (RBAC) を提供します。これにより、トピックを発行またはサブスクライブするクライアントの認可を管理できます。

IoT 環境が非常に大規模であることを考えると、各トピックに対するアクセス許可をクライアントごとに割り当てるのは非常に煩雑です。 Event Grid の柔軟なアクセス制御では、クライアントとトピックをクライアント グループとトピック空間にグループ化することで、この規模に関する課題に対応します。 クライアント グループとトピック空間を作成したら、クライアント グループへのアクセス権を付与して、トピック空間を発行またはサブスクライブするようにアクセス許可バインドを構成できます。

Diagram of the access control model.

トピック空間では、クライアント グループ内の各クライアントがその独自のトピックを発行またはサブスクライブするための認可を制御することで、詳細なアクセス制御も提供されます。 この詳細なアクセス制御は、トピック テンプレートの変数を使用して実現されます。 アクセス制御の詳細についてご覧ください。

ルーティング

Event Grid を使用すると、MQTT メッセージを Azure サービスまたは Webhook にルーティングして、さらに処理することができます。 その結果、特にデータ分析、ストレージ、視覚化などのユース ケースにおいて IoT データを使用して、エンド ツー エンドのソリューションを構築できます。 ルーティング構成を使用すると、クライアントから Event Grid 名前空間トピックまたは Event Grid カスタム トピックにすべての MQTT メッセージを送信することができます。 メッセージがトピックに追加されると、トピックからのメッセージを使用するようにイベント サブスクリプションを構成できます。 この機能により、たとえば、Event Grid を使用して、IoT デバイスから Event Hubs、Azure Stream Analytics の順にルーティングして、デバイス テレメトリから分析情報を得ることができます。 ルーティングの詳細についてご覧ください。

Diagram of the MQTT message routing.

Edge MQTT ブローカーの統合

Event Grid は Azure IoT MQ と統合されており、エッジ上の MQTT ブローカー機能とクラウドの Azure Event Grid の MQTT ブローカー機能を橋渡しします。 Azure IoT MQ は、Arc 対応 Kubernetes クラスターで実行される、エッジ コンピューティング用の新しい分散 MQTT ブローカーです。 システム割り当てマネージド ID を使用する Microsoft Entra ID (以前の Azure Active Directory) 認証を使用して Event Grid MQTT ブローカーに接続できるため、資格情報の管理が簡略化されます。 Azure IoT MQ は、IoT デバイスとアプリケーションの高可用性、スケーラビリティ、およびセキュリティを提供します。 Azure IoT Operations の一部としてパブリック プレビューで使用できるようになりました。 Azure IoT MQ を Azure Event Grid の MQTT ブローカーに接続する方法の詳細について説明します

MQTT クライアントのライフ サイクル イベント

クライアント ライフ サイクル イベントを使用すると、アプリケーションはクライアントの接続ステータスまたはクライアント リソースの操作に関するイベントに反応できます。 これにより、クライアントの接続状態を追跡し、クライアント切断の軽減アクションに対応し、自動フェールオーバー中にクライアントがアタッチされた名前空間を追跡できます。 MQTT クライアントのライフ サイクル イベントの詳細を確認してください。

次のステップ

MQTT ブローカーとその主要な概念について詳しくは、次の記事をご覧ください。

概念