【2019年9月版】過去の歴史から学ぶ Azure IoT サービス の変遷 (前編)

#はじめに
皆さん、Azure やってますか？ IoT やってますか？ 儲かってますか？

さて、今回は **Microsoft Azure** で提供されている **IoT 向けサービス** の最新情報について**前編/後編に分けて**整理してみます。

**「もう Azure で IoT やってるよ！」**という方や**「これから IoT やりたいと思っているよ！」** という方に、本記事の内容がお役に立てば幸いです。

#IoT Plug and Play (Preview版) の発表から読み解く、Azure IoT サービスの変遷
**Azure IoT 界隈での新しい話**と言えば、2019月8月22日(US時間)に **IoT Plug and Play Preview版** の提供が開始された事はご存知でしょうか？

[IoT Plug and Play is now available in preview (Microsoft Blog - Announcements)](https://azure.microsoft.com/en-us/blog/iot-plug-and-play-is-now-available-in-preview/)

今回発表された **IoT Plug and Play** は、一言で言えば **IoT デバイス側の開発・実装を効率化する** 新しい仕組みです。

さて、この **IoT Plug and Play** のサービス、どのような目的や背景があって登場したのか気になりませんか？
**これまで提供されてきた Azure の IoT 向けサービスの歴史**を理解すると、その答えが見えてきます。

##IoT システムを構築する上での課題とは？
センサー＆デバイスから収集したデータをインターネット(クラウド)上に送信し、データを分析、可視化、更にデバイス側にフィードバックするような IoT システムの構築においては、**デバイス側とクラウド側の両方の実装スキル**が必要ですよね。

**クラウド側**は Microsoft Azure の PaaS や SaaS を利用して、比較的簡単に構築できるようなサービス群が揃っていましたが、**デバイス側**の構築・実装は目的に合わせて様々なセンサーやデバイスを組み合わせたシステムを個別に開発する必要があり、この部分をどのように効率化するかが、**従来より課題**になっていました。

ここでのポイントは、IoT システムを構築する上では、**クラウド側の課題**と**デバイス側の課題**の両方が存在するという事です。

それでは、**Azure の IoT 向けサービス**が進化する過程において、それぞれの段階で**どのような課題**を**どう解決する**サービスになってきたかを見てみましょう。

##前編/後編 ダイジェスト
- **前編**
 - 第1段階: Azure の **PaaS を組み合わせて** IoT システムを構築する
 - 第2段階: IoT の一般的なシナリオを実現する構成済みのPaaS **「IoT Solution Accelerators」**
- **後編**
 - 第3段階: SaaS型で簡単構築**「Azure IoT Central」**
 - 第4段階: IoT をもっと簡単に**「IoT Plug and Play」**

#第1段階: Azure の PaaS を組み合わせて IoT システムを構築する
**Azure で IoT** と言えば、クラウド側は**「IoT Hub」**や**「Stream Analytics」**などの**PaaS を組み合わせて構築する手法**が一般的でした。

IoTデバイスをクラウドと接続してデータを収集する、集めたデータを分析・加工する、データを蓄積する等の**目的に合わせた PaaS の「部品」**が提供されているため、**これらの「部品」を組み合わせる**事で、オンプレのサーバーや IaaS (仮想マシン) で IoT のシステム構築するよりも、**素早くかつ効率的に**進める事ができるといった特徴があります。

##クラウド側の構築: Azure IoT 向け PaaS
例として、**IoT のシナリオで良く使われる代表的な Azure の PaaS** を簡単に紹介します。
この他にも沢山ありますが、ここでは、まずはどのような種類のPaaSが提供されているかのイメージを掴んで頂ければOKです。

###Azure IoT Hub
IoT デバイスと Azure 間の双方向通信を可能にするマネージド サービス

[[サービス概要] Azure IoT Hub](https://azure.microsoft.com/ja-jp/services/iot-hub/)
[[ドキュメント] IoT Hub のドキュメント](https://docs.microsoft.com/ja-jp/azure/iot-hub/?WT.mc_id=AZ-MVP-4040034)

###Azure Stream Analytics
クラウドからエッジまでのサーバーレス リアルタイム分析

[[サービス概要] Azure Stream Analytics](https://azure.microsoft.com/ja-jp/services/stream-analytics/)
[[ドキュメント] Stream Analytics のドキュメント](https://docs.microsoft.com/ja-jp/azure/stream-analytics/?WT.mc_id=AZ-MVP-4040034)

###Azure IoT のリファレンスアーキテクチャ
そして、これらの PaaS の組み合わせは、**「王道パターン」**や**「お手本」**として**「リファレンスアーキテクチャ」**があります。こんな感じ。

[[ドキュメント] Azure IoT 参照アーキテクチャ](https://docs.microsoft.com/ja-jp/azure/architecture/reference-architectures/iot/?WT.mc_id=AZ-MVP-4040034)

<img width="512" alt="IoT PaaS RefArc.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/e84d5053-dc11-6ad6-1784-62865ec98b23.png">

##デバイス側の実装: Azure IoT SDK / IoT Edge
**「クラウド側は分かったけど、じゃあデバイス側はどうするの？」**と言うと、デバイス側は、オープンソースの **Azure IoT SDK (Azure IoT Hub Device SDK/Service SDK)** を使用してアプリケーションを開発し、デバイス(IoT ゲートウェイなど)に実装します。

**Azure IoT SDK** は、**C や C#(.NET)、Python、Node.js、Java** などのプログラミング言語ごとに SDK が提供されていて、これでクラウド側の Azure IoT Hub と デバイスを接続してデータの送受信やデバイスの管理を実現します。

[GitHub - Azure IoT SDKs](https://github.com/azure/azure-iot-sdks)
[[ドキュメント] Azure IoT Hub SDK の概要と使用方法](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-devguide-sdks/?WT.mc_id=AZ-MVP-4040034)

ちなみに、この辺り、途中で Azure IoT SDK を拡張した **Azure IoT Edge** という新しいSDK も提供され始めました。名前の通り、**「エッジコンピューティング」**を意識した仕様になっています。
※余談ですが、 IoT Edge はリリース当初は*「Azure IoT Gateway SDK」*なんて呼ばれ方をしていて、今でも一部ドキュメント上にその名残が残っていたりします。

ちょっとややこしいのですが、IoT Edge は**アーキテクチャが異なる2つのSDK**がリリースされているので注意しましょう。

**コンテナー技術**を採用し、 Azure の PaaS (Machine Learning や Stream Analytics)をコンテナーモジュール化してエッジデバイス側で実行できるのは **IoT Edge (V2)** のほうです。

[GitHub - Azure IoT Edge (V2)](https://github.com/azure/azure-iotedge)
[GitHub - Azure IoT Edge (V1)](https://github.com/Azure/iot-edge-v1)


#第2段階: IoT の一般的なシナリオを実現する構成済みのPaaS「IoT Solution Accelerators」
さて、第1段階の**「PaaS を組み合わせて IoT システムを構築する」**手法には少々課題がありました。**クラウド側とデバイス側の両方の実装スキルが必要**だという点です。

リファレンスアーキテクチャがあるものの、**「これから IoT を始めたい」**という方は、この辺りが壁となって先に進めるのが難しかったのも事実です。

そこで登場したのが半完成品のソリューションである**「IoT Solution Accelerators」**です。
※また余談ですが、この「IoT Sloution Accelerators」は、リリース当初は*「Azure IoT Suite」*なんて呼ばれ方をしていて、今でも一部ドキュメント上に(略

**「IoT Solution Accelerators」**は、IoT の一般的なシナリオ(例えば、製造装置のリモートモニタリングや、予知保存など)に合わせて、**自動的にPaaSの環境を構築してくれる**ものです。

Azure IoT ソリューションアクセラレータのポータルサイトから対象のシナリオを選択するだけで、自分のAzureの環境に**「必要なPaaSを組み合わせた環境一式」**がデプロイされます。


[Azure IoT ソリューション アクセラレータ](https://www.azureiotsolutions.com/Accelerators)
<img width="672" alt="IoT Sol Acc.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/cc08d129-facf-7b36-c210-8411c3170849.png">

[[ドキュメント] IoT ソリューション アクセラレータのドキュメント](https://docs.microsoft.com/ja-jp/azure/iot-accelerators/?WT.mc_id=AZ-MVP-4040034)

しかも、この**「IoT Solution Accelerators」**は、**「Azure IoT リファレンス アーキテクチャ」**の推奨事項に従って構築されていますので、**IoTシステムとしての完成度が非常に高い**です。

[[ドキュメント] Azure IoT リファレンス アーキテクチャの概要](https://docs.microsoft.com/ja-jp/azure/iot-accelerators/iot-accelerators-architecture-overview/?WT.mc_id=AZ-MVP-4040034)

##IoT Solution Accelerators でリモートモニタリングをデプロイするとどうなる？
試しに、IoT Solution Accelerators のポータルサイトから、**リモートモニタリング(Remote Monitoring)** のソリューションをデプロイしてみます。

- まずは「Remote Monitoring」のソリューションを選んで…
<img width="960" alt="RM002.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/64feaf1c-4534-4d65-4cbd-e28142148f09.png">

- こんなサービスが自動でデプロイされるよ！と教えてくれます。
<img width="461" alt="RM003.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/02ec5542-a6bc-1e2e-2847-ac0e6787ef87.png">

- デプロイするソリューションに名前を付け、デプロイする対象のAzureのサブスクリプションやリージョン(ロケーション)を選んで行きます。(25分くらいでデプロイが完了するみたい)
<img width="960" alt="RM011.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/316ddd59-a158-7d6b-d82d-8fe70a598403.png">

- あとは自動的に事が進みます。(途中でエラーが出ないように、祈りましょう)
<img width="960" alt="RM013.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/c2af4a66-cb84-f384-86c4-84971963d7ea.png">

- 無事にデプロイできたようです。
<img width="960" alt="RM014.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/b48a8cdc-3864-e862-6ae2-623e51bf0bba.png">

- ちなみに、Azure Portal サイト( https://portal.azure.com/ )から見ると、こんな感じで見えます。ちゃんとリソースが作られていますね。
<img width="960" alt="RM016.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/b844a272-138d-c8db-057b-f1b15fa2056f.png">

- 作成された環境(Web Apps)にアクセスすると、デプロイされたリモートモニタリングのソリューションが動いているのが分かります。
<img width="960" alt="RM017.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/04417d46-735b-8d4e-c7e3-dc8ee3218a43.png">

- サンプルのデバイス(チラーとか、トラックとか、エレベーターとか)が動いていて、稼働状況をモニタリングできるようです。
<img width="960" alt="RM018.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/42fc1756-dabf-fd06-1801-7a49ae860103.png">


##それで、IoT Solution Accelerators は実際どうなの？
**「IoT Solution Accelerators」**は、これまで**自分でPaaSの部品を組み合わせる必要があった所**を自動化してくれる、一見、素晴らしいソリューションのように見えます。

でも、**(恐らく)あまり流行りませんでした。**

何故かと言うと、ここで自動作成されるIoTのシステムは、そのまま使用できるというよりも**「カスタマイズして使う前提」**のものです。**完成度が高い反面、逆にカスタマイズがしにくい**という代物だったからです。(もちろん、スキルに依存しますが)

そのため、IoT システム構築の**「お手本」**としては優秀ですが、**あくまでも「お手本」**であり、残念ながら実ビジネスでこれが採用されている話はあまり聞きませんでした。

それに加えて、**「IoT Solution Accelerators」**では、クラウド側の構築は手軽になるものの、**デバイス側の実装**の部分は、**依然、自力で(Azure IoT SDK を使って)開発する**必要があり、デバイス側の実装における課題はまだ残ります。

※「お手本」のソリューションのアーキテクチャとしては優秀なので、興味のある方は是非デプロイして中身のリソース構成を確認してみてください。

#まとめ
ここまで **【2019年9月版】過去の歴史から学ぶ Azure IoT サービス の変遷 (前編)** では、Azure の IoT 向けサービスが、**これまでどのように進化してきたのか** をテーマに、第1段階として **Azure の PaaS を組み合わせて IoT システムを構築する** 方法と、第2段階で登場した **構成済みのPaaS「IoT Solution Accelerators」** について説明しました。

両方とも、**クラウド側の構築は「PaaS の組み合わせが中心」**であり、**デバイス側の実装には「Azure IoT SDK/IoT Edge を使ってアプリケーションを開発する」**必要があります。

つまり、**デバイス側とクラウド側の両方の実装スキル**が必要な状況はまだ解決していません。

この辺りが、続く 第3段階、第4段階で **Azure の IoT 向けサービス**でどのように進化して行くのか、次回、**【2019年9月版】過去の歴史から学ぶ Azure IoT サービス の変遷 (後編)**で説明します。

---
【2019年9月版】過去の歴史から学ぶ Azure IoT サービス の変遷 (後編)は **[こちら](https://qiita.com/ymodek/items/358b7c81e9fec9735a32)** からどうぞ。