de:code 2019 [IT53] Azure IoT どう使う？一歩踏み込んで考えてみよう

Microsoft de:code 2019に参加した内容を紹介します。

Chalk Talkなので、スライド公開のみとなっています。
もし間違いなどあれば、ご指摘いただけますと助かります。

# [IT53] Azure IoT どう使う？一歩踏み込んで考えてみよう / 2019年5月29日

![image.png](https://updvha.bl.files.1drv.com/y4mU07BeT_pnXaeDBlmUX44K01o0NZymmGswJcDMDlK_qwnlJk9C1AVFjC19dMSKLNIgKiSIxa0hquY5fwEdHPrtDZIxkrgkenOe7zj00hQ-0CuWy1rK7ye1FjcU1eJMaGWwj15rKNwTflMEwuGeyFQxVDtNXBL_fso3E_2C7sNlXAF9iP5K_5z4n8OdUqQzAXtZqkefVsaUmDl4Fti1Lgppw?width=1280&height=683&cropmode=none)

# TL;DR（要約）

- Azureのサービスの物理的な分類を2つに分類し、「クラウド」と「エッジ」と分けて考えるとわかりやすい。
- Azure IoT Hubは、何十億台ものデバイスをつなげても安定した動作を行うことができるという優位性がある。
- Azure IoT Centralが最もおすすめのサービスである。

# リソース

- [セッション詳細](https://www.microsoft.com/ja-jp/events/decode/2019session/detail.aspx?sid=IT53&kw=IT53)

# 今日話す内容は

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/4ce6955d-191f-704c-07c7-6cb1d245bc7a.png)

1. Azure IoT プロダクトを分類する
2. Azure IoT Hubの仕組みを知る
3. Azure IoT ソリューションを使う
4. エッジへオフロード手段を提供する

# 1. Azure IoT プロダクトを分類する
## Azure Iot関係のサービスのポートフォリオはわかりにくい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/d78907c8-67be-9337-5784-d05d8bd17fc1.png)

Azureで用意されているIoT関係のサービスはとしては、一般的に用意されているポートフォリオを見ると4つに分類されている（この中の、Azure Plug And Playはデバイスを作る側が利用するサービス）

しかし、この分類はわかりにくいところがある

一番上の「Azure Priority Verticals」は、論理的な分類であり、業種別のアイコンが表示されている。業種別のソリューションもMicrosoftは提供しているため、このような分類となっている。

Azure IoT Solusionsから下は物理的な分類となっている。ここが3つの分類となっているが、実際に使う側からするとこの分類はわかりにくい

## 物理的な分類を2つに分類しよう

ポートフォリオの分類は、実際に作るとなるとわかりにくいので、2つに分類するとよい。

- クラウド
    - 分析自動化
    - 大量データ処理
    - 多接続
- エッジ
    - デバイス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/f4992ca7-c4e5-2be1-a8e4-8777b27acaf3.png)

その他については、Azure IoTではなく、共通で使用するサービス群となる

実際のサービスをさらに分類すると、次のようになる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/8c3c2886-0925-0121-c774-9ea035630c16.png)

## Azure IoT Hubとは

Azure IoT Hub = Azure Gatewayと考えるとよい

## Azure IoT Device Provisioning Service

世界中に広がるようなサービスを使うときに必要なサービスとなる。
まず、デバイスから、Provisioning Serviceに、IoT Hubに振り分ける

IotHubのバックエンドとしては、様々なサンプルコードやシナリオがあるので注意して参照していく必要がある。

非常に速い処理、大量な処理があるときは、IoT Hub以降のサービスが追い付かない。そのようなときは、Stream Anaritics, Cosmos DBを使用する．

## Stream Anariticsの使用について

最近はサービスを使用する場合のよくある設計変わってきた。以前は、必ずStream Anariticsを経由していたが、扱う量、スピードがそれほど必要ない場合は、直接Azure Functionを使用してもよい

## Azure AIについて

Azure AIと呼ばれるものの実体はない。Azureを使ったAIのひとくくりをAzure AIと言う。AIを使用した自動化を行う場合は、Azure MLとAzure Cognitive Servicesを使用する

## ソリューションに関する説明

### Azure IoT Central

基調講演でも説明していたが、ワンクリックで簡単に行えるものが、Azure IoT Central

### Azure Sphere と Azure IoT Edge

Azure Sphere と Azure IoT Edgeは違う。頭の中で分類してから選ぶのがいいのではないか

### Data Box Edge

Data Box Edgeは使ったことがないが、買ってきて使用するハードウェアとのセット商品。ブレードサーバーみたいなものなので、気軽に試すものではないかも。


# 2. Azure IoT Hubの仕組みを知る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/a9fad253-1881-f547-a5aa-bff83918a0c3.png)


## Azure IoT Hubを使用するメリットとは

Azure IoT Hubは必要ないんじゃないか。通知も遅いし。。。という話がある。

これは、何十億台ものデバイスをつなげても安定した動作となるための仕組みがある。そのために反応が数秒かかってします、ということろはある。

しかし、多くのデバイスをつなげた場合の安定動作という点で、Azure IoT Hubの優位性がある。

## デバイスごとの認証

あらかじめ登録し認証したデバイスしか接続できない

## デバイスとクラウド間の接続の仕組み

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/cab16ab4-c2c8-7add-d572-d40513f4ade3.png)

※D2C=デバイスからクラウド
※C2D=クラウドからデバイス

### 通知されるかどうか

図で注目すべき点は、IoT Hubのところで処理が行われている（四角がある）かどうか。
処理が行われておらず、単に通過するものについては、通知が届かない。

例えば、設定変更を行う処理を、ダイレクトメソッドで実装すると、実際に届いたかどうかがわからない。

解決法としては、Desired Propertiesを使用する。

- IoT Hubを書き換える
- IoT Hubからデバイスを書き換える
- デバイス側での実装
    - デバイスが、Desired Propertiesを受け取ったら、Reported Propertiesを呼び出す

という処理が必要となるが、通知を自動化できる

#### 余談

Azure IoT Centralを使用すると、自動的に、Desired ～とReported ～が組み込まれる

## Event Hubs Message Strings

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/76a40de8-e750-b113-94e1-c76d61bd864b.png)

### Partition

送った順番に流れてこないことがある。そこが気になる場合は、パーティションキーを指定するXMLを使用する

### Consumer Group

どの順番に読み取ったかを保持している。途中でサービスが落ちた場合の対策として、チェックポイントが実装されている。

# 3. Azure IoT ソリューションを使う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/cd0dc0df-db8a-93c2-9a2e-e156a325be74.png)

## Azure IoT Solution Accelerators

クリックしたら出来上がるが、自分のAzureの中にたくさんサービスが出来上がる。様々なものを使用する形で
...簡単に言うと出来上がりが複雑なので使い勝手がよくないかな、と思っている

## Azure Time Series Insights

長い時系列のデータを両方保持しないといけない場合に使用する。

## Azure IoT Central

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/ff3bb0a0-6479-5b07-a6eb-dcc012c630e6.png)

もっともおすすめ

### なにがよいか

簡単に作れるし、できるサービスも少ない。

### スケーリングが難しい

欠点を上げるとすれば、サービスが隠蔽されているため、スケーリングするのが難しい。詳細は公開されていないので想像している情報も多い。

### DPSを使うのが前提

基本的には、IoT Centralを使うには、DPSを使うのが前提となっている

### 機能紹介

- Emailに送るとか、Functionsに送ることが簡単にできる
- Continuous Data Exportは注目すべきサービス。リアルタイムに送信することできる
- Event Hubに送ることができるようになったのもよい。

# 4. エッジへオフロード手段を提供する

## Azure Iot Edge

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/c8d2edc8-36a5-17aa-8806-bd5550959218.png)

Azure IoT Edgeとは、上図のように定義されているが、どういう用途の時にどれを使えばよいのかがわかりにくい。

## IoT Edgeの使いどころ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/0981c7da-d6eb-469d-d89c-ce7889ba1a90.png)

ゲートウェイとインテリジェントの時には、Iot Edgeがよいが、直接Edgeに送る時には向いていない。

## クラウドの機能がエッジで動く

Azure IoT Edgeがいいのは、クラウドの機能がエッジで動く。

例えば、Stream Analyticsぇクラウドで作成したものを送る！とするとエッジ側で動く。クラウド側で作った人工知能がエッジで動くのはいい。

### 注意点

- 対応しているサービスと対応していないサービスがある。
- IoT Edgeが動いているCPU等のハードによって動く動かないがある。
    - 例えば、ラズパイで動くということで動かしてみました。Stream Analytics まで動いたので、Computer Visionを動かしてみよう？あれ動かない...ということがあった。ランタイムは動くが、その上に載っているサービスについて、どのCPUで動くかはサービス次第なところがある。

# 関連セッション

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204150/0ba3e87a-18e3-f467-871c-88d8a414a0bc.png)

この中で特に、[IT05 "使える" IoT システムをより簡単に！「Azure IoT Central」と「IoT Plug and Play」のご紹介](https://www.microsoft.com/ja-jp/events/decode/2019session/detail.aspx?sid=IT05&kw=IT05)を聞いておくことをお勧めする

# QA

## Azure Stream Analytics等は、IoTに特化したものではないと思ってよいのか

その通り。IoT Hubに来てしまえば、あとはクラウドの世界。Azure IoTに入っているのは、その組み合わせで使うことが多い。

例えば、Stream Anayticsは、動体センサーで使うことが多い

## 今ちょうど3000台ぐらいでIoT Hubを使用しているが、C2Dが遅い

C2Dは実装の問題上、どうしても遅い。もし遅いことが問題になる要のであれば、IoT Hubには実装されていないので、同等の機能を自分で実装することになる。