デバイスのインフラストラクチャと接続
この概要では、一般的な Azure IoT ソリューションでデバイスがクラウドに接続する方法に関する主要な概念について説明します。 この記事では、ゲートウェイやブリッジなどのオプションのインフラストラクチャ要素についても紹介します。 各セクションには、追加の詳細とガイダンスを提供するコンテンツへのリンクが含まれています。
IoT Central アプリケーションは、IoT Hub と Device Provisioning Service (DPS) サービスを内部で使用します。 そのため、この記事の概念は、IoT Central を使用して IoT シナリオを探求するか、IoT Hub と DPS を使用してソリューションを構築するかにあてはまります。
一般的な IoT ソリューションのコンポーネントの概要を次の図に示します。 この記事は、図に示されているゲートウェイとブリッジを含む、デバイスと IoT クラウド サービス間の接続を中心に説明します。
プリミティブ
Azure IoT デバイスは、次のプリミティブを使用してデータをクラウド サービスと交換します。 デバイスが使用するものは次のとおりです。
- "デバイスからクラウドへの" メッセージ。クラウドに時系列テレメトリを送信します。 たとえば、デバイスに接続されているセンサーから収集された温度データです。
- "デバイス ツイン"。状態データをクラウドと共有および同期します。 たとえば、デバイスはデバイス ツインを使用して、制御するバルブの現在の状態をクラウドに報告し、クラウドから目的の目標温度を受け取ることができます。
- "デジタル ツイン"。デジタル世界のデバイスを表します。 たとえば、デジタル ツインは、デバイスの物理的な場所、その機能、および他のデバイスとの関係を表すことができます。
- "ファイル アップロード"。キャプチャされた画像やビデオなどのメディア ファイル用です。 断続的に接続されるデバイスは、テレメトリ バッチを送信できます。 デバイスはアップロードを圧縮して帯域幅を節約できます。
- "ダイレクト メソッド"。クラウドからコマンドを受け取ります。 ダイレクト メソッドはパラメーターを使用し、応答を返すことができます。 たとえば、クラウドはダイレクト メソッドを呼び出して、デバイスの再起動を要求できます。
- "クラウドからデバイスへの" メッセージ。クラウドから一方向の通知を受け取ります。 たとえば、更新プログラムをダウンロードする準備ができていることを示す通知です。
詳細については、「device-to-cloud 通信に関するガイダンス」および「cloud-to-device 通信に関するガイダンス」を参照してください。
デバイスに接続するクラウド エンドポイント
Azure IoT ハブは、デバイスがデータをクラウドと交換できるようにするデバイスごとのエンドポイントのコレクションを公開します。 たとえば、次のエンドポイントが該当します。
- D2C メッセージの送信。 デバイスは、このエンドポイントを使用して、デバイスからクラウドへのメッセージを送信します。
- デバイス ツインのプロパティを取得して更新します。 デバイスは、このエンドポイントを使用して、そのデバイス ツインのプロパティにアクセスします。
- ダイレクト メソッド要求の受信。 デバイスは、このエンドポイントを使用して、ダイレクト メソッドの要求をリッスンします。
すべての IoT ハブには、デバイスをハブに接続するために使用される一意のホスト名があります。 ホスト名の形式は iothubname.azure-devices.net
です。 いずれかのデバイス SDK を使用する場合、個々のエンドポイントの完全な名前を知る必要はありません。SDK が提供する抽象化のレベルは高いためです。 ただし、デバイスは、接続先の IoT ハブのホスト名を認識する必要があります。
デバイスは、IoT ハブに対してセキュリティで保護された接続を次のように確立できます。
- 直接接続。この場合、ホスト名を含む接続文字列をデバイスに渡す必要があります。
- DPS を使用した間接接続。この場合、デバイスは既知の DPS エンドポイントに接続して、割り当てられている IoT ハブの接続文字列を取得します。
DPS を使用する利点は、IoT ハブに固有の接続文字列をすべてのデバイスには構成しなくても済むことです。 代わりに、既知の一般的な DPS エンドポイントに接続するようにデバイスを構成し、そこで接続の詳細を検出させます。 詳細については、Device Provisioning Serviceに関するページを参照してください。
エンドポイントへの自動再接続の実装の詳細については、「デバイス再接続を管理して回復性のあるアプリケーションを作成する」を参照してください。
デバイスの接続文字列
デバイスの接続文字列は、IoT ハブに安全に接続するために必要な情報をデバイスに提供します。 接続文字列には、次の情報が含まれます。
- IoT ハブのホスト名。
- IoT ハブに登録されたデバイス ID。
- デバイスが IoT ハブへのセキュリティで保護された接続を確立するために必要なセキュリティ情報。
認証
Azure IoT デバイスは、TLS を使用して、接続先の IoT ハブまたは DPS エンドポイントの信頼性を検証します。 デバイス SDK には、IoT ハブへのセキュリティで保護された接続を確立するために現在必要な DigiCert Global Root G2 TLS 証明書が含まれています。 詳細については、「IoT Hub でのトランスポート層セキュリティ (TLS) のサポート」および「Azure IoT Hub Device Provisioning Service (DPS) の TLS サポート」を参照してください。
Azure IoT デバイスは、Shared Access Signature (SAS) トークンと X.509 証明書のいずれかを使用して、IoT ハブに対して自身を認証できます。 運用環境では、X.509 証明書をお勧めします。 認証の詳細については、次を参照してください。
- X.509 CA 証明書を使用して IoT Hub に対してデバイスを認証する
- SAS トークンを使用して IoT Hub に対してデバイスを認証する
- DPS 対称キーの構成証明
- DPS X.509 証明書の構成証明
- DPS トラステッド プラットフォーム モジュールの構成証明
- IoT Central のデバイス認証の概念
デバイスと IoT ハブの間で交換されるすべてのデータが暗号化されます。
IoT ソリューションのセキュリティの詳細については、「IoT ソリューションのセキュリティ アーキテクチャ」を参照してください。
プロトコル
IoT デバイスは、IoT Hub または DPS エンドポイントに接続するときに、次のいくつかのネットワーク プロトコルのいずれかを使用できます。
- MQTT
- WebSocket 経由の MQTT
- Advanced Message Queuing Protocol (AMQP)
- AMQP over WebSocket
- HTTPS
Note
IoT Hub では、MQTT の機能のサポートが制限されています。 ソリューションに MQTT v3.1.1 または v5 のサポートが必要な場合は、Azure Event Grid での MQTT サポートをお勧めします。 詳細については、IoT Hub と Event Grid での MQTT サポートの比較に関するページを参照してください。
デバイスがクラウドに接続するためのプロトコルを選択する方法の詳細については、次を参照してください。
- Azure IoT Hub でのプロトコルのサポート
- MQTT プロトコルを使用した DPS との通信
- HTTPS プロトコルを使用した DPS との通信 (対称キー)
- HTTPS プロトコルを使用した DPS との通信 (X.509)
産業用 IoT シナリオは、多くの場合、Open Platform Communication Unified Architecture (OPC UA) の業界標準のオープン インターフェイスを使用します。 Azure クラウドへの接続を有効にするには、Azure IoT Operations を使用します。 詳細については、「Azure IoT Operations とは」を参照してください。
接続パターン
IoT デバイスがクラウドへの接続に使用する接続パターンには、次の 2 つの大きなカテゴリがあります。
永続的な接続
ソリューションが "コマンドと制御" 機能を必要とするときは、永続的な接続が必要です。 コマンドと制御のシナリオでは、IoT ソリューションがデバイスにコマンドを送信して、ほぼリアルタイムでその動作を制御します。 永続的な接続では、クラウドへのネットワーク接続が維持され、中断が発生するたびに再接続されます。 IoT ハブへの永続的なデバイス接続には、MQTT と AMQP のいずれかのプロトコルを使用してください。 IoT デバイス SDK は、IoT ハブへの永続的な接続を作成するために、MQTT と AMQP の両方のプロトコルを有効にします。
エフェメラル接続
エフェメラル接続は、デバイスが IoT ハブにテレメトリを送信するための簡単な接続です。 デバイスはテレメトリーを送信した後、接続を切断します。 デバイスは、送信するテレメトリが増えると再接続します。 エフェメラル接続は、コマンドとコントロールのシナリオには適していません。 デバイス クライアントが実行する必要がある内容がテレメトリの送信のみの場合は、HTTP API を使用できます。
フィールド ゲートウェイ
フィールド ゲートウェイ (エッジ ゲートウェイとも呼ばれることもあります) は、通常、オンプレミスの IoT デバイスの近くにデプロイされます。 フィールド ゲートウェイは、IoT デバイスに代わってクラウドとの通信を処理します。 フィールド ゲートウェイで行うことできる操作は次のとおりです。
- プロトコル変換を実行します。 たとえば、Bluetooth 対応デバイスをクラウドに接続できるようにします。
- オフラインと切断のシナリオを管理します。 たとえば、クラウド エンドポイントに到達できないときにテレメトリをバッファリングします。
- テレメトリをクラウドに送信する前に、テレメトリのフィルター処理、圧縮、または集計を行います。
- エッジでロジックを実行して、クラウド内のデバイスに代わって実行ロジックに関連する待機時間を削除します。 たとえば、温度のスパイクを検出し、それに反応してバルブを開きます。
Azure IoT Edge を使用して、オンプレミス環境にフィールド ゲートウェイをデプロイできます。 IoT Edge には、フィールド ゲートウェイを大規模にデプロイして管理できる一連の機能が用意されています。 IoT Edge には、一般的なゲートウェイ シナリオを実装するために使用できる一連のモジュールも用意されています。 詳細については、「Azure IoT Edge とは」を参照してください
IoT Edge デバイスは、IoT ハブに対して永続的な接続を維持できます。 ゲートウェイは、デバイスのテレメトリーを IoT Hub に転送します。 このオプションは、IoT Edge デバイスに接続されたダウンストリーム デバイスをコマンドで制御できます。
ブリッジ
デバイス ブリッジを使用すると、Microsoft 以外のクラウドに接続されているデバイスを IoT ソリューションに接続できます。 Microsoft 以外のクラウドの例としては、Sigfox、Particle Device Cloud、The Things Network などがあります。
オープンソースの IoT Central デバイス ブリッジは、テレメトリを IoT Central アプリケーションに転送する翻訳ツールとして機能します。 詳しくは、「Azure IoT Central デバイス ブリッジ」をご覧ください。 デバイスを IoT ハブに接続するための Microsoft 以外のブリッジ ソリューション (Tartabit IoT Bridge など) があります。
次のステップ
Azure IoT ソリューションでのデバイス接続の概要を確認したので、次に推奨される手順をいくつか以下に示します。