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

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

さて、今回は [【2019年9月版】過去の歴史から学ぶ Azure IoT サービス の変遷 (前編)](
https://qiita.com/ymodek/items/0bd9b956bfc5479716ba)の続きになる後編です。

##前編/後編 ダイジェスト
- **前編** (前回の内容)
 - 第1段階: Azure の **PaaS を組み合わせて** IoT システムを構築する
 - 第2段階: IoT の一般的なシナリオを実現する構成済みのPaaS **「IoT Solution Accelerators」**

- **後編** (今回の内容)
 - 第3段階: SaaS型で簡単構築**「Azure IoT Central」**
 - 第4段階: IoT をもっと簡単に**「IoT Plug and Play」**

#前編のおさらい
前編では、**これまで提供されてきた Azure の IoT 向けサービスの歴史**を振り返り、

- 第1段階として **Azure の PaaS を組み合わせて IoT システムを構築する** 方法
- 第2段階で登場した **構成済みのPaaS「IoT Solution Accelerators」**

について説明しました。

今回は、その先から現在に至るまで **Azure の IoT 向けサービス** がどのように進化して来たのかを見て行きましょう。

#第3段階: SaaS型で簡単構築「Azure IoT Central」
第1段階や第2段階では、手動か自動かの違いがあるものの、**PaaS を組み合わせてIoT システムを構築する**という手法が主流だったという説明をしました。

この時の課題は、まだまだ **デバイス側とクラウド側の両方の実装スキル** が必要な状況が続いていたという事なんですね。

勿論、第1段階や第2段階の手法は**今でも現役で採用されてる方式**ですが、クラウド開発の経験が無い方からすると、**やはりまだまだ敷居が高い**と感じられるケースも残っていた訳です。

そんなこんなで、Azure IoT に新しく加わったサービスが**「Azure IoT Central」**で、ここで新たに**「SaaS」**という選択肢が増えた形となります。

[Azure IoT Central](https://azure.microsoft.com/ja-jp/services/iot-central/)
[[ドキュメント] Azure IoT Central のドキュメント](https://docs.microsoft.com/ja-jp/azure/iot-central/?WT.mc_id=AZ-MVP-4040034)


**「SaaS」**で提供される **「Azure IoT Central」** は、**クラウド側の構築が不要**になり、予め用意されている**IoTのサービスを設定するだけ**で使えるようになりました。


##SaaS型の Azure IoT Central ってどんなサービス？
見たほうが早い！という事で、Azure IoT Central のポータルサイト( https://apps.azureiotcentral.com/ )から、新しいクラウドアプリケーションを作成してみましょう。

- マイ アプリケーションから**「新しいアプリケーション」**を選択します。
<img width="960" alt="001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/4e4a92c8-c749-24ec-017a-6faa6f413827.png">

- **「支払いプラン」**では**「従量課金制」**の他にも、7日間の無料試用版である*「評価版」*が選択できます。
<img width="496" alt="002.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/cc045ee8-4b0d-e733-7e34-9313297b044f.png">

- **「アプリケーション テンプレート」**では、とりあえず**「サンプル Contoso」**を選べば、簡単に**Azure IoT Central**の雰囲気を掴む事ができるでしょう。
<img width="483" alt="003.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/3fd7d00b-d4bc-9275-f63b-a142ce147b3c.png">

- アプリケーションに名前を付けると、自動的に専用のURLが割り当てられます。
<img width="487" alt="004.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/bdf21cf6-7797-8c5e-c9e5-e0b82e16d858.png">

- **「従量課金制」**を選択した場合には、展開先のサブスクリプションとリージョンを選びましょう。
<img width="487" alt="005.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/59e10929-3fe5-0257-74eb-b46bfa97dee5.png">

- あとは**「作成」**ボタンを押すだけで、アプリケーションのプロビジョニングが開始されます。
<img width="363" alt="006.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/4bdfce05-b88e-4ae8-0876-33d0fb713279.png">

- プロビジョニングが完了した直後のアプリケーションの画面はこんな感じ。
<img width="960" alt="007.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/dd897d4d-6531-7bf1-fca4-57101ab4bb44.png">

- **Azure IoT Central** に仮想デバイス(Refrigerator)が接続され、動作している様子を見る事ができます。
<img width="960" alt="010.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/ca707d07-77df-3c3d-20d3-bf2d67827697.png">

- こんなダッシュボードがサンプルで用意されています。
<img width="960" alt="011.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/38bf439b-888f-d86d-74db-7c5d5aaef9e8.png">

- ここで、Azure Portal サイト( https://portal.azure.com/ )から見ると、こんな感じで見えます。**「IOTC」**というリソースグループの中に、**「IoT Central アプリケーション」**リソースが作られていますね。
<img width="960" alt="008.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/f6689f32-97dd-a4cb-478b-69cdc8635f2a.png">

- ここに注目。**「IoT Solution Accelerators」**と違い、**SaaS型のAzure IoT Central は内部のリソースが見えません。**
<img width="924" alt="009.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/8574ed0a-668b-98ba-42a3-f13079980f7f.png">

##Azure IoT Central の内部アーキテクチャを理解する
Azure IoT Central を利用する上で、SaaS内の細かな内部の仕組みは知る必要はありません。

でも、知っておく事でちょっとスッキリするので、スッキリしたい方は下記のURLを読んでみることをお勧めします。
※実際には、**「IoT Hub」**や**「Time Series Insights」**が内部的に使われていますが、その辺りはユーザーが触る必要が無いため、リソースが隠蔽されているようですね。

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

<img width="508" alt="IoTC_アーキテクチャ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/c5f5d7bc-0978-ddf6-512b-3dddcb37745e.png">


##Azure IoT Central って何でもできるの？
PaaSで自由に部品を組み合わせる構成と違って、**当然出来る事は限定されています。**
デバイスからデータを集めて可視化(グラフ化)したり、予め設定していた特定条件(例えば、温度が50度以上だとか)でアラートメールを発信したり、など。

え？それしか出来ないの？と思われるかもしれませんが、**Azure IoT Central** はサービス単体で利用するだけでなく、例えば、[Microsoft Flow](https://docs.microsoft.com/ja-jp/azure/iot-central/howto-add-microsoft-flow/?WT.mc_id=AZ-MVP-4040034) とか、[Azure Logic Apps](https://docs.microsoft.com/ja-jp/azure/iot-central/howto-build-azure-logic-apps/?WT.mc_id=AZ-MVP-4040034) とか、[Azure Functions](https://docs.microsoft.com/ja-jp/azure/iot-central/howto-trigger-azure-functions/?WT.mc_id=AZ-MVP-4040034) などと連携させる事ができ、その辺りの拡張性も考慮されています。

##Azure IoT Central の登場で、デバイス側の課題は解決したの？
残念ながら、解決していません。
**Azure IoT Central**により、クラウド側の構築は不要になったものの、やはり第1段階の **PaaS 組み合わせ** や第2段階の **IoT Solution Accelerators** と同様に、**デバイス側の実装**の部分は、**依然、自力で(Azure IoT SDK や IoT Edge を使って)開発する**必要があり、まだまだこの課題は残ってしまっていました。

#第3段階までのAzure IoT サービスを整理する
ここまで説明してきた**「PaaSの組み合わせ」「IoT Solution Accelerators」「Azure IoT Central」**の違いをもう少し深く知りたい場合は、下記のURLの情報が有用です。
(Azure IoT Central と Azure IoT ソリューション アクセラレータの比較とか)

[[ドキュメント] IoTサービス](https://docs.microsoft.com/ja-jp/azure/iot-fundamentals/iot-introduction?WT.mc_id=AZ-MVP-4040034#iot-services)

[[ドキュメント] Azure IoT Central と Azure IoT のオプションを比較する](https://docs.microsoft.com/ja-jp/azure/iot-central/overview-iot-options?WT.mc_id=AZ-MVP-4040034)

[[ドキュメント] モノのインターネット (IoT) テクノロジとソリューション: PaaS と SaaS](https://docs.microsoft.com/ja-jp/azure/iot-fundamentals/iot-services-and-technologies/?WT.mc_id=AZ-MVP-4040034)

<img width="507" alt="Azure IoT 比較.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/790443cd-1955-3ad0-93ec-b676fb8c68fc.png">


#第4段階: IoT をもっと簡単に「IoT Plug and Play」
さて、ここでようやく**「IoT Plug and Play」**の登場です。

第3段階の**「Azure IoT Central」**の登場により、**クラウド側の構築スキル** が無くてもIoTのサービスを構築できる環境が整いました。しかしながら、**デバイス側の実装スキル** が必要な状況は依然続いていました。

##Azure Certified for IoT デバイスカタログ
ただし、その間、デバイス側の実装における対策が何も無かったのかと言うとそうではありません。

Azure IoT のデバイス側の実装課題を解決する策として、マイクロソフトは[Azure Certified for IoT デバイス カタログ](https://catalog.azureiotsolutions.com/alldevices)という、IoTデバイスの認定プログラムを提供してきました。

<img width="947" alt="Azure Cert.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/de0400ef-036d-067c-e39d-cf709af218d4.png">


ここには、**Azure IoT Hub との接続テストをパスした IoTデバイス** が掲載されています。IoTデバイスを開発・販売している企業は、この認定を取得する事で自社製品がこのカタログ上に掲載されます。

同時に、このIoTデバイスを購入したユーザーは、**どのような手順や設定をすればIoT Hubと通信できるようになるか**の手順書も公開されているのです。

**「Azure でIoTを始めたい、でもIoTのデバイスはどのようなモノを選定すれば良いか分からない」** といった場合でも、このカタログに掲載されている認定済みデバイスを選択する事で安心して利用できる環境が整いました。

ただ、この**Azure Certified for IoT デバイス カタログ**は全ての問題を解決するには至りませんでした。

なぜなら、(一部のデバイスでは)デバイスを購入した後に、やはり Azure IoT SDK や IoT Edge を使用してデバイス側のアプリケーションの開発と実装が必要(※[前編参照](https://qiita.com/ymodek/items/0bd9b956bfc5479716ba#%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E5%81%B4%E3%81%AE%E5%AE%9F%E8%A3%85-azure-iot-sdk--iot-edge))だったのです。


##IoT Plug and Play が、デバイス側の実装課題を解決する仕組みとは？
**IoT Plug and Play** の登場により、**デバイス側の実装スキル** が必須だった状況が大幅に改善されます。

[前編の冒頭](https://qiita.com/ymodek/items/0bd9b956bfc5479716ba#iot-plug-and-play-preview%E7%89%88-%E3%81%AE%E7%99%BA%E8%A1%A8%E3%81%8B%E3%82%89%E8%AA%AD%E3%81%BF%E8%A7%A3%E3%81%8Fazure-iot-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%A4%89%E9%81%B7)で触れたように、2019月8月22日(US時間)に IoT Plug and Play Preview版 の提供が開始されました。

2019年5月 Microsoft Build 2019 での発表からの経緯は次の通りです。

- [(2019年5月2日) Intelligent edge innovation across data, IoT, and mixed reality (Microsoft Blog - Announcements)](https://azure.microsoft.com/en-us/blog/intelligent-edge-innovation-across-data-iot-and-mixed-reality/)

- [(2019年5月7日) Build with Azure IoT Central and IoT Plug and Play (Microsoft Blog - Announcements)](https://azure.microsoft.com/en-us/blog/build-with-azure-iot-central-and-iot-plug-and-play/)

**IoT Plug and Play** は前述の**Azure Certified for IoT デバイスカタログ**と連動しており、既に **IoT Plug and Play - Pre-certified devices** というカテゴリで、**IoT Plug and Play 対応デバイス**を見つける事ができます。

ざっくり仕組みを説明すると、**IoT Plug and Play 対応デバイスの購入者**は、自身でIoTデバイスのアプリケーション(コード)を書く必要がなく、デバイスメーカー側が用意した **Device capability model(デバイス機能モデル)** と呼ばれるJSONファイルを**Azure Certified for IoT デバイスカタログ**からダウンロードする事で、対象のIoTデバイスがクラウド側(IoT Central や IoT Hub)と通信できる環境が整うというものです。
※IoT Plug and Play の詳細については、別の機会で記事にします。

[[ドキュメント] IoT プラグ アンド プレイのプレビューのドキュメント](https://docs.microsoft.com/ja-jp/azure/iot-pnp/?WT.mc_id=AZ-MVP-4040034)
[GitHub - IoT Plug and Play](https://github.com/Azure/IoTPlugandPlay)

この仕組みにより、**デバイス側の実装スキル** が無いユーザーでも、IoTデバイスを簡単に利用することができるようになります。

#まとめ
**Azure IoT Plug and Play** の登場をきっかけに、**これまで提供されてきた Azure の IoT 向けサービスの歴史**を振り返ってみました。

こうやって見てみると、Azure IoT のサービスは過去の様々な課題を解決しながら改善されてきた事が良く分かります。

今回、Azure の IoT 向けサービスが進化してきた過程を、分かり易く **第1段階～第4段階** と表現しましたが、これは **第4段階(IoT Plug and Play)**だけが最適で最強なサービスだという事を言いたい訳ではありません。

**「PaaS組み合わせ」**も**「IoT Solution Accelerators」**も**「Azure IoT Central」**も、**場面やスキルに応じて使い分けができる** という事です。

- **「IoT 始めてみたいけど、何から手を付けたら良いか分からない」**
- **「Azure の IoT系のサービス、沢山あるけど違いが良く分からない」**

そんなお悩みをお持ちの方に、本記事の内容が少しでもお役に立てれば幸いです！
それでは！