Azure といえばクラウドコンピューティングですね。しかし、利用者側の環境(オンプレミス)で動くサービスもいくつかあります。今回はその中の一つ、IoT Edge についてお伝えします。
コンピューターの歴史は、集約と分散が繰り返されて発展してきました。
コンピューターが誕生した当時はとても高価だったため、複数の人が共有して利用することが前提でした。
当然ユーザーの手元に本体はありません。企業や大学など限られた法人が所有するデータセンターに設置されたコンピューターに対して、利用時間を購入して使用していました。
その後、パーソナルコンピューターが生まれ、ユーザーの手元で多くの処理が出来るようになります。
また、複数ユーザーの情報共有やパーソナルコンピューターでは能力が不足する大規模な演算が必要な場合でも、ユーザー側の環境にサーバーを構築することで、外部に依存しない処理環境が構築されました。いわゆる「クラサバ (クライアント/サーバー モデル)」の時代です。
しかし、サーバーをユーザー環境に設置するということにはいくつかの問題がありました。
この問題を解決する方法として、クラウドが脚光を浴びます。
クラウドの世界では、マイクロソフトなどのクラウドサービス提供者から必要な機能を必要な時間だけ購入して利用します。コンピューター黎明期と同じモデルです。
必要な能力を必要な時間のみ購入するので、初期投資が大きいというコスト的な問題は解消します。
また、ハードウェア・ソフトウェアの保守の多くも、クラウドサービス提供者が行ってくれるため、ユーザーの負担は大きく改善されます。
しかし、全てをクラウドに移行するには、障害となる問題もあります。特に直面しやすい問題は下記の点ではないでしょうか。
ユーザーから離れたクラウドの環境にシステムが存在する上で、切り離すことの出来ない問題です。何か手立てはないでしょうか。
解決策があります。
「ユーザー側(=エッジ)で処理をしよう」
まさに名前の通り、エッジ側での IoT です。
クラウドで提供していた IoT 処理の一部をユーザー(エッジ)側に設置したコンピューターで処理をします。それにより、先程挙げた問題が解消するかもしれません。
Azure IoT Hub はクラウドから離れたデバイスのコントロールは可能です。しかし、動かしたい処理は通常の IoTデバイスでは収まりきれない大きな規模になります。エッジ側に設置した IoT Edge 機器をどのように管理するのか探ってみましょう。
IoT Edge で処理するサービスをモジュールと呼びます。執筆時点では下記のモジュールが提供されています。
クラウドの場合、アプリケーションの開発者はクラウド上での各サービスに対して、直接アプリケーションを展開することが出来ました。しかし、IoT Edge デバイスは開発者の環境から直接つながるとは限りません。どのようにモジュールを IoT Edge で実行できるようにするのでしょうか。
それには、モジュールツインと呼ばれる機能を利用します。
Azure IoT Hub にはデバイスツインという機能があります。これはクラウド側で設定したデータをデバイスに送信し、デバイス側で更新されたデータをクラウドに反映することが出来ます。
ピンと来た方もいらっしゃると思いますが、デバイスツインと同じようにクラウドで更新したモジュールをデバイスに送ることができれば、開発者はクラウドのモジュールを更新するだけで、IoT Edgeで動作するモジュールを更新することが出来ます。この機能をモジュールツインと呼びます。
IoT Edge はモジュールツインにより必要なモジュールを実行することが出来ます。
「クラウドの機能をエッジで」というと、難しく大変なイメージがあるかもしれません。
しかし、IoT Edge は Docker というコンテナ仮想技術で構成されています。モジュール開発は既存の技術で可能です。また、IoT Edge 上で動かすモジュールは Azure ポータル上で管理できます。
「そのままデータをクラウドに送信するには問題がある」ということで、IoT の世界に入ることを躊躇していた方は、その問題を解決する方法としてIoT Edge を使用してみませんか。