「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[Microsoft Azure IoT]] ---Azure IoT Hub ---[[Azure IoT Edge]] ---[[Azure IoT Central]] ---[[Azure IoT Hub DPS>Azure IoT Hub Device Provisioning Service]] ---[[Azure Digital Twins]] --[[Azureのメッセージング・サービス]] ---[[Azure Event Hubs]] ---[[Azure HDInsight上の Kafka>Azureのメッセージング・サービス#td389d0c]] ---Azure IoT Hub ---[[Azure IoT Central]] ---[[Azure Event Grid]] ---[[Azure Service Bus]] * 目次 [#qe26b80e] #contents *概要 [#f045e7f4] -IoTデバイスの登録・認証・管理を行い、監視/管理する -[[フロントエンド>#l3d3b1f3]]と[[バックエンド>#k3a2bc2b]]の双方向の通信を仲介する **双方向通信の仲介 [#rada73cf] ***デバイス認証 [#bdf2c1eb] デバイス認証によるセキュリティ強化 -[[公開鍵・暗号化>暗号化アルゴリズム#tfda0d72]] -自己署名[[証明書]] -CA署名[[証明書]] ***メッセージ ハブ [#c41c59d3] -双方向通信の中央メッセージ ハブとして機能 --管理するIoTデバイス([[Device Endpoint>#zc944d5d]] --IoTアプリケーション([[Service Endpoint>#sada5bf3]] -[[Azure Event Hubs]]と異なり、~ [[Kafka>Azure Event Hubs#mb379986]] Endpointなどは使えないらしい。 --[[Azure Event Hubs]]との比較は[[コチラ>Azureのメッセージング・サービス#fdd5f5b4]] ***メッセージング パターン [#l744c571] 複数のメッセージング パターンをサポート -ファイルのアップロード -IoTデバイス制御の要求/応答メソッド **ソリューション構築 [#v2678c65] -デバイス管理等の機能が追加されている。 -信頼性が高く、セキュリティで保護された通信を提供 ***接続 [#d26fc7ba] -ほぼすべてのIoTデバイス -何百万ものIoTデバイス -[[大規模なデバイス・プロビジョニング(DPS)>#u70a4b0d]] ***監視 [#cb267f85] イベントを追跡により、ソリューションの正常性維持に役立つ。 -IoTデバイスの作成 -IoTデバイスの障害 -IoTデバイスの接続 ***アプリケーション開発 [#a74dc7e5] Azure IoT Hub SDKを使用して開発。 -Azure IoT Hub Device SDK~ デバイス側のアプリケーションの構築を容易にする。 -Azure IoT Hub Service SDK~ クラウド・サービス側のアプリケーションの構築を容易にする。 -Azure IoT Hub 管理 SDK~ サブスクリプション内の IoT Hub管理アプリケーションの構築を容易にする。 -Azure Provisioning SDK~ DPSを使用してデバイスをIoT Hub にプロビジョニング *詳細 [#nd01d4e2] **機能 [#z26c9c7a] ***スケール調整 [#x5b7e1f7] 毎秒数百万のイベントに対応するようにスケーリングします。 -数百万のIoTデバイスの同時接続 -および IoT ワークロードをサポート ***クォータと制限 [#k4bd9964] DoS攻撃からの保護するため、サブスクリプションごとの IoT ハブの数を制限 https://docs.microsoft.com/ja-jp/azure/azure-subscription-service-limits ***IoTデバイスの構成と制御 [#m422f2bf] -IoTデバイス毎、またはIoTデバイス共通特性に基づいて、IoTデバイスの状態を設定。 -IoTデバイスのデバイス メタデータと状態情報を保存、同期、照会。 -IoTデバイスで報告された状態の変化に自動的に対応。 -ライフサイクル --計画 --プロビジョニング --構成 --監視・制御 --廃棄 ***[[ルーティング>#cccf379e]] [#h17a67a8] **ルーティング [#cccf379e] ***メッセージ・ルーティング [#lc303512] -コードのないルール・ベースのルーティング -HubがIoTデバイスのテレメトリ(稼働データ)を送信する場所を制御 -複数のエンドポイントにメッセージをルーティング --[[ストレージ・コンテナ>Azureのストレージ]] --[[Azure Event Hubs]] --[[Azure Service Bus]] ***イベント・ルーティング [#qa459943] [[Azure Event Grid]]でのルーティング -利用統計情報、デバイスの作成、削除、接続、切断のIoT Hub イベントに対応 --Microsoft.Devices.DeviceCreated~ デバイスが IoT Hub に登録されると発行される。 --Microsoft.Devices.DeviceDeleted~ デバイスが IoT Hub から削除されると発行される。 --Microsoft.Devices.DeviceConnected~ デバイスが IoT Hub に接続されると発行される。 --Microsoft.Devices.DeviceDisconnected~ デバイスが IoT Hub から切断されると発行される。 --Microsoft.Devices.DeviceTelemetry~ デバイス テレメトリのメッセージが IoT Hub に送信されると発行される。 -[[メッセージ・ルーティング>#lc303512]]より[[多様なエンドポイントの種類>Azure Event Grid#g5f8737e]]をサポート **セキュリティ [#s2986cfe] [[参照アーキテクチャ>Microsoft Azure IoT#v12b5062]]に準拠 -セキュリティ保護された通信チャネルを使用 -IoTデバイスを自動的にプロビジョニング -IoTデバイス毎の認証(安全に接続・管理) -IoTデバイスのアクセス制御、接続制御 ***認証・認可 [#ub31fff5] -以下の情報を使用して、アクセス制御を行う。 --デバイスからIoT Hubにアクセスする場合~ ---共有アクセスポリシーでアクセス制御 ---デバイス毎のセキュリティ資格情報でアクセス制御~ ・対称キー~ ・自己署名証明書~ ・CA署名証明書 --ヒトやサービスからIoT Hubにアクセスする場合~ 共有アクセスポリシーでアクセス制御 -共有アクセスポリシーとデバイス毎のセキュリティ資格情報の違い --共有アクセスポリシー ---ヒトやサービスが使用する。 ---ポリシー名とアクセス許可を登録する。 --デバイス毎のセキュリティ資格情報 ---デバイスが使用する。 ---デバイスIDのみ登録(アクセス許可は登録しない)。 -共有アクセスポリシーと対称キーは[[SASトークン>トークン#w01b1c2d]]に変換する。 --SDKを使わずに、接続するには[[SASトークン>トークン#w01b1c2d]]を渡す必要がある。 --[[SASトークン>トークン#w01b1c2d]]は、以下をSHA256で署名して生成する。 ---共有アクセスポリシーの場合~ ・共有アクセスポリシー名~ ・共有アクセスキー~ ・リソースURI~ ・有効期限 ---対称キーからの場合~ ・対称キー~ ・リソースURI~ ・有効期限 ***プロビジョニング [#u70a4b0d] -[[Azure IoT Hub DPS>Azure IoT Hub Device Provisioning Service]] -[[Device Update for IoT Hub>Microsoft Azure IoT#o6983d39]] **IoTデバイスの接続 [#h7f2b238] IoT Hub と対話するアプリケーションを作成できる。 ***プラットフォーム [#s6f75c05] -OS --Linux --Windows --RTOS -ソリューション、開発スイート --[[Azure Sphere]] --Azure RTOS ***プログラミング言語 [#t7ee1ed5] -C -C# -Java -Python -Node.js ***[[通信プロトコル>IoT関連の通信プロトコル]] [#g676757f] -HTTPS -AMQP -MQTT -WebSocket --AMQP over WebSocket --MQTT over WebSocket -カスタム プロトコル --[[Azure IoT Edge]]でプロトコル変換するフィールド ゲートウェイを作成。 --[[Microsoft Azure IoT Protocol Gateway>https://github.com/Azure/azure-iot-protocol-gateway/blob/master/README.md]]のコードをカスタマイズ **[[フロントエンド>#l3d3b1f3]]・[[バックエンド>#k3a2bc2b]] [#gb473504] Hubに接続される[[フロントエンド>#l3d3b1f3]]・[[バックエンド>#k3a2bc2b]] ***[[フロントエンド>Microsoft Azure IoT#c319c129]] [#l3d3b1f3] ***[[バックエンド>Microsoft Azure IoT#r0fe5a00]] [#k3a2bc2b] **Endpoint [#w80ab252] Azure IoT Hubの「Hub」とは、以下の -[[Device Endpoint>#zc944d5d]] -[[Service Endpoint>#sada5bf3]] を繋ぐ「Hub」と言う所から来ているらしい。 ***Device Endpoint(Device ⇔ Hub) [#zc944d5d] デバイス側([[フロントエンド>#l3d3b1f3]] -D2C Endpoint~ D2C メッセージの送信([[Azure Event Hubs]]互換 --時系列テレメトリとアラート --ファイルのアップロード --デバイス ツインの報告されるプロパティ -C2D Endpoint~ C2D メッセージの受信(キューから受信) -ファイル通知の受信~ ファイルのアップロード結果の通知を受信 -ダイレクト メソッド~ 要求 / 応答型パターンに従うダイレクト(疑似Push)メソッド(の要求側) -カスタム エンドポイント~ [[特定のバックエンドにルーティングされる>#lc303512]]。 ※ 実装する際は、言語毎に用意された[[Azure IoT Hub Device SDK>#a74dc7e5]]を使用する。 ***Service Endpoint(Hub ⇔ Service) [#sada5bf3] クラウド・サービス側([[バックエンド>#k3a2bc2b]]) -D2C Endpoint~ D2C メッセージの受信 --時系列テレメトリとアラート --ファイルのアップロード --デバイス ツインの報告されるプロパティ -C2D Endpoint~ C2D メッセージの送信(キューに送信) -ファイル通知の送信~ ファイルのアップロード結果の通知を送信 -ダイレクト メソッド~ 要求 / 応答型パターンに従うダイレクト(疑似Push)メソッド(の応答側) -カスタム エンドポイント~ [[特定のバックエンドにルーティングされる>#lc303512]]。 ※ 実装する際は、言語毎に用意された[[Azure IoT Hub Service SDK>#a74dc7e5]]を使用する。 ***Management Endpoint [#w8559b78] -デバイス ID の管理 --HTTPS REST エンドポイント --デバイス ID の管理 (作成、取得、更新、削除) -デバイス ツインの管理 --HTTPS REST エンドポイント --デバイス ツインのクエリと更新 (タグとプロパティの更新) を実行 -ジョブの管理 --HTTPS REST エンドポイント --ジョブのクエリと管理を実行 ※ 実装する際は、言語毎に用意された[[Azure IoT Hub 管理 SDK>#a74dc7e5]]を使用する。 **メッセージング パターンとプロトコルまとめ [#n962e215] ***マトリックス [#gf5dab3f] |名称|用途|方向|頻度|プロトコル|h |D2Cメッセージ|Cloudへの送信|上り|高|すべてのプロトコル| |C2Dメッセージ|Deviceへの送信|下り|低|すべてのプロトコル| |Desired プロパティ|Twinプロパティの要求|下り|中|MQTT または AMQP| |Reported プロパティ|Twinプロパティの報告|上り|中|MQTT または AMQP| |ダイレクトメソッド|双方向通信|下上|高|方向によって異なる。| |ファイルアップロード|大容量の送信|上り|低|HTTPが必要| ***ポイント [#i93cf920] -基本的に全て単方向通信だが、 -ダイレクト メソッドのみ、~ 要求 / 応答型パターンに従う双方向通信~ (下りのHTTPから始まり、上りは全プロトコルに対応) -WebSocketを使用できる。 --下りは基本的にWebSocketで実装されている。 --例外的に、HTTPのC2Dは疑似Pushで非効率。 --HTTP プロキシ 環境下ではWebSocketで接続可能。~ (WebSocket、MQTT / AMQP over WebSocket ) -ファイルアップロードは以下から構成される。 --ストレージへのアップロード(HTTP) --アップロードの完了通知(全プロトコル) **[[チュートリアル>Azure IoT Hubチュートリアル]] [#y2759ab9] *参考 [#a2ff8f19] -IoT Hubとは?Azureサービス群での位置づけや特徴から実際の使い方~ までを紹介します|Microsoft Azureコラム|東京エレクトロンデバイス~ https://esg.teldevice.co.jp/iot/azure/column/column14.html **matsujirushi’s blog [#t6fe5dd1] -Azure IoT HubのSASトークンについて~ https://matsujirushi.hatenablog.jp/entry/2017/12/23/233924 -IoT Hubへ接続するときの認証やキーなど~ https://matsujirushi.hatenablog.jp/entry/2019/12/31/113519 **Qiita [#ded2bb06] -Azure IoT HubとEvent HubsとBlob Storageと~ Device Provisioning Serviceを上手に使ってコストを最適化するお話し~ https://qiita.com/mstakaha1113/items/b16357a9e7efe7cda5b6 -Azure IoT Hubへのサービス側のアクセスにAzure ADが使えるようになりました~ https://qiita.com/mstakaha1113/items/9ac1b4f13550d7915810 **YouTube [#h87872b5] -[[チュートリアル>Azure IoT Hubチュートリアル#ub607655]] **microsoft.com [#tbdb616e] ***Microsoft Azure [#xc9393a5] -IoT Hub~ https://azure.microsoft.com/ja-jp/services/iot-hub/ -価格 - IoT Hub~ https://azure.microsoft.com/ja-jp/pricing/details/iot-hub/ ***Microsoft Docs [#b3a9a444] -Azure IoT Hub のドキュメント - チュートリアル、API リファレンス~ https://docs.microsoft.com/ja-jp/azure/iot-hub/ --概要 > IoT の概念と Azure IoT Hub~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-concepts-and-iot-hub --[[クイック スタート>Azure IoT Hubチュートリアル#x1817894]]~ --[[チュートリアル>Azure IoT Hubチュートリアル#g4976320]]~ --[[操作方法ガイド>Azure IoT Hubチュートリアル#zfeb2f7c]]~ --~ ... -概念 --開発 ---IoT Hub エンドポイント~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-endpoints ---device-to-cloud 通信に関するガイダンス~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-d2c-guidance ---cloud-to-device 通信に関するガイダンス~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-c2d-guidance ---IoT Hub のデバイス ツインの理解と使用~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-device-twins ---IoT Hub のモジュール ツインの理解と使用~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-module-twins ---IoT Hub からのダイレクト メソッドの呼び出しについて~ https://learn.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-direct-methods ---IoT Hub を使用したファイルのアップロード~ https://learn.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-file-upload ---Azure IoT Hub と Event Grid~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-event-grid --管理 ---Azure IoT Hub のスケーリング~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-scaling --アクセス制御 ---開発者ガイド > IoT Hub のアクセス制御とセキュリティ~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-security --Azure IoT Hub SDK~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-sdks -メッセージング --Azure IoT Hub メッセージについて~ --メッセージング ---Azure IoT Hub メッセージについて~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-messaging --Azure IoT Hub メッセージの形式について~ ---Azure IoT Hub メッセージの形式について~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-messages-construct --Azure IoT Hub の非テレメトリ イベント スキーマ~ ---Azure IoT Hub の非テレメトリ イベント スキーマ~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-non-telemetry-event-schema --Azure IoT Hub の cloud-to-device メッセージの理解~ ---Azure IoT Hub の cloud-to-device メッセージの理解~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-messages-c2d --Azure IoT Hub 組み込みエンドポイントについて~ ---Azure IoT Hub 組み込みエンドポイントについて~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-messages-read-builtin -メッセージ ルーティング --Azure IoT Hub メッセージ ルーティングについて~ --メッセージ ルーティング ---Azure IoT Hub メッセージ ルーティングについて~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-messages-d2c --Azure IoT Hub のカスタム エンドポイントについて~ ---Azure IoT Hub のカスタム エンドポイントについて~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-messages-read-custom --Azure IoT Hub メッセージ ルーティングでのクエリ~ ---Azure IoT Hub メッセージ ルーティングでのクエリ~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-routing-query-syntax --IoT Hub における Event Grid とルーティングの比較~ ---IoT Hub における Event Grid とルーティングの比較~ https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-event-grid-routing-comparison -[[操作方法ガイド>Azure IoT Hubチュートリアル#bac9b6b6]] ***Learn | Microsoft Docs [#u7c2c1a6] -AI エッジ エンジニア~ https://docs.microsoft.com/ja-jp/learn/paths/ai-edge-engineer/ -Azure IoT Hub の概要~ https://docs.microsoft.com/ja-jp/learn/modules/introduction-to-iot-hub/ ---- Tags: [[:クラウド]], [[:IoT]], [[:Azure]]