「[[マイクロソフト系技術情報 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]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS