Azure IoT HubとAzure IoT Edge、各SDKの位置づけ

Build 2017 Keynoteにも挙がっていた、Azure IoT Edge。

channel9.msdn.com

Stream AnalyticsやMachine Learningをエッジ側で動作させようというもので、とても興味深いものですが、そのAzure IoT Edgeを詳しく解説するイベントがあったので参加しました。

algyan.connpass.com

タイトルが「Deep Deep Dive」とDeepが2回w

マイクロソフト太田さんが2時間休憩なしで説明しまくるという、結構ハードなイベントでした。

イベントの内容は後日資料、動画が公開される予定なので、それを見てもらうとして、、、

イベントの後に、某氏から「EdgeとかDevice SDKとかの関係が良く分からない。」と聞かれたので、復習&整理しておこうと思い、ブログ書くことにしました。

Azure IoT Hub

現在、マイクロソフトはデバイスをAzureに接続する手段として、Azure IoT Hubを提供しています。下図のとおり、デバイスとバックエンドを仲介&スケーリングすることで、何百万台ものデバイスの同時接続することができます。

f:id:matsujirushix:20170902211748p:plain 画像元リンク

Azure IoT Hubとデバイスの接続

上図の左側にあたる、デバイスからAzure IoT Hubへの接続は、具体的にはAMQPやMQTT、HTTPで接続、通信するのですが、さまざまなデバイスで容易に接続できるよう、いくつものOS、言語でAzure IoT Hubに接続するライブラリが提供されています。これをAzure IoT Hub device SDKといいます。

Azure IoT Hubとバックエンドの接続

上図の右側にあたる、Azure IoT Hubからバックエンドへの接続は、Azure IoT Hub service SDKが提供されています。

Azure IoT HubとDevice SDKの位置づけ

図示するとこのような位置づけで、Azure IoT Hub device SDKは"device"という名称が付いているものの、全てのデバイスに入れるものではなく、Azure IoT Hubに接続するデバイスで使用するものです。

f:id:matsujirushix:20170902215615p:plain画像元リンク(一部変更)

省電力デバイス -> 〇〇〇 -> Azure IoT Hub

Azure IoT Hubへの接続にはAzure IoT Hub device SDKを使うことは分かりましたが、BLEデバイスなどの極めて省電力なデバイスでこれらの機能(実際はAMQPなど)を載せるのは不可能です。このようなときは、ゲートウェイを設置して、省電力デバイスの代わりにAzure IoT Hubへ接続を代行します。このゲートウェイを実装するために、Azure IoT Gateway SDKというものが提供されています。(いました)

ゲートウェイからエッジに

バックエンドで実行していた分析をオフラインでも実行したい、とか、通信コストを削減したいというニーズが高まり、それに伴いバックエンドの機能をデバイスの近くで実行するためのコンセプトが発表されました。それがAzure IoT Edgeです。

実体は、前述のAzure IoT Gateway SDKAzure IoT Edgeと改名して、そこに機能拡張が進められています。

下図のように、現状はまだゲートウェイ+αですが、順次整備されていくものと思います。

f:id:matsujirushix:20170902223613p:plain 画像元リンク

まとめ

  • 直接、Azure IoT Hubまで到達できるデバイスは、Azure IoT Hub device SDKを使う。
  • 直接、Azure IoT Hubに到達できないデバイス、省電力デバイスなどは、Azure IoT Edgeを経由して、Azure IoT Hubへ接続。

f:id:matsujirushix:20170902222643p:plain

各ライブラリ、コードの所在は以下のとおりです。

  - Azure IoT SDK for C

    - Azure IoT Hub device SDK for C

    - Azure IoT Hub service SDK for C

  - Azure IoT SDK for .NET

    - Azure IoT device SDK for .NET

    - Azure IoT service SDK for .NET

  - …