Azure IoT ソリューション アクセラレータ 500時間ぐらい触ったので知見を共有する

この記事では、Azure IoT ソリューション アクセラレータを使ってみたい方に向けて、私が500時間ぐらい触って理解したことを共有します。

この記事を読むことで下記のメリットが得られるように記載しています。

  • アクセラレータの概要がわかる
  • 費用感がわかる
  • カスタマイズする場合の注意ポイントがわかる

私はMicrosoftの関係者ではありませんが、少しアクセラレータをいじる機会がありました。
アクセラレータは、あまりニーズがないように思えますが、無駄に少し詳しくなってしまったので、
これからこちらを使ってみたいと考えてる人に役に立てればと思い、その知見を共有したいと思います。

Azure IoT ソリューションアクセラレータとは?

簡単に言うと、Azureサービスを活用した IoT システムのテンプレート提供サービスです。

Azureサービスを使ってIoTシステムを作りたいとニーズを持つお客様に向けのサービスで、ポチポチと簡単な画面操作をするだけで、ある程度構築済みのプログラムコードとAzure サービスのセットがデプロイされます。

コードはオープンソースになっているので、あとはお客様の要件に合わせてカスタマイズされることが推奨されています。

テンプレートとしてデプロイできるシナリオは4つあります。

  1. リモート監視
  2. コネクテッドファクトリ
  3. 予測メンテナンス
  4. デバイスシミュレーション

私が触ったのは、リモート監視のシナリオのみですので、そちらを紹介します。
他のシナリオについては、公式ドキュメントをご参照ください。
https://docs.microsoft.com/ja-jp/azure/iot-accelerators/about-iot-accelerators

リモート監視シナリオでは、3つデプロイ形式が選べます。

  • Standard:Azure Kubernetes Sevice と Azure サービスで構成されたもの
  • Basic:Azure 仮想マシンとAzureサービスで構成されたもの
  • Local:Azureサービスのみ

リモート監視シナリオは、複数のDockerコンテナで、フロントエンドとバックエンドを実現していて、それをどこに置くかでデプロイオプションが分かれています。
Standardでは、Azure Kubernetes Serviceで複数コンテナを起動して、Azureサービスと連携します。
Basic では、Azure上のVM1台の中で、docker-composeで複数コンテナを起動して、Azureサービスと連携します。
Localでは、開発端末で、複数コンテナを起動して、Azureサービスと連携します。

私が使ったのは、Basic と Localです。
AKSを使うほどの用途ではなかったので、Standardは使いませんでした。

リモート監視シナリオ

IoTデバイスのリモート監視システムになります。

IoTデバイスのセンサーデータの可視化やリモート操作などの管理がしたい方向けのシナリオです。

メニューには、ダッシュボード、IoTデバイス管理、アラートルール管理、メンテナンス管理などに該当する画面があります。

ダッシュボード

ダッシュボードでは、下記などが表示されています。

  • デバイス位置マップ
  • デバイスのセンサーデータに対するアラート件数
  • デバイスのセンサーデータの時系列の折れ線グラフ
  • アラートルールごとのアラート件数の棒グラフ

IoTデバイス管理

IoTデバイス管理では、下記のことができます。

  • 定義済みのデバイスの登録
  • デバイスのタグやプロパティという情報の修正
  • デバイスの削除
  • デバイスであらかじめ定義した処理の実行(デバイスを遠隔で操作するための機能)

デバイスモデルというデバイス仕様を定義したデバイスのみ登録できます。
デバイスモデルはJSON形式で定義され、そのファイルはVMサーバ上に存在します。

デバイスには、2種類存在し、1つ目は、既存のシミュレータ用のデバイスです。
2つ目は、物理デバイスです。(例えば、Raspberry Piです。)

デバイスを新規追加したい場合は、デバイスモデルのJSONファイルを作ってVMサーバ上に配置する必要があります。

デバイスの編集はできず、タグやプロパティという付加情報を修正できるのみです。

デバイスの削除は、物理のデバイスのみできます。既存のシミュレーション用のデバイスは削除できません。
(これが微妙)

デバイスの処理実行は、デバイスをリモートで操作するための機能です。
このリモート操作で実行できる処理については、デバイス側であらかじめコーディングしておかないといけません。

アラートルール管理

アラートルール管理では、下記のことができます。

  • アラートルールの登録
  • アラートルールの編集
  • アラートルールの削除
  • アラートルールの有効・無効

アラートルールというのは、あるセンサーデータの値が指定の条件を満たしたらアラートを生成するというルールです。
例えば、IoTデバイスの温度が閾値以上だったら「温度が高すぎる」というアラートを生成することができます。

メンテナンス管理

メンテナンス管理では、以下のことができます。

  • 発生したアラートの表示
  • アラートのステータス変更(確認中、クローズ)
  • アラートの削除
  • ジョブの表示

発生したアラートを確認して、そのステータスを管理する画面です。

保守運用者がアラートを見て、リモート操作でデバイスに既定処理を実行したり、現地の人に連絡して対処してもらうことを想定しているのかもしれません。

ジョブというのは、リモート操作で実行した処理をジョブとして実行状態を確認できます。

その他

その他のメニューとして、パッケージとデプロイというもの追加されたのですが、こちらは全然触っていないのでどんな機能なのかわかっていません。
知りたい方は公式ドキュメントをご参照ください。
https://docs.microsoft.com/ja-jp/azure/iot-accelerators/iot-accelerators-remote-monitoring-bulk-configuration-update

メリット・デメリット

メリット

この製品のメリットとしては、下記と考えています。

  • Azure IoT リファレンスアーキテクチャに沿って構築されたシステムの参考にできる
  • アクセラレータをカスタマイズして独自のIoTシステムを構築できる

Azure IoT リファレンスアーキテクチャの実物として参考になるので、これを参考に作るのはいいかもしれません。
ただ、結構理解するのに苦労したので、本当に参考になるのかわかりません。

カスタマイズして独自のIoTシステムを作れるというのは、可能性を感じるのですが、
正直必要技術レベルが高めなので、プロを集めた方が良いです。

デメリット

デメリットとしては、下記です。

  • テンプレートなのでそのまま使えない可能性が高い
  • カスタマイズ費用がかかる
  • 日本語対応してない

結局のところ、テンプレートになので、本当にこれで使えるの?となります。
そのままちょっと使ってみようというのは、ないかもしれません。
IoTシステムでお試ししたいなら、Azure IoT Central というSaaSを提供しているので・・・。

カスタマイズしないといけなくなったらその分の費用を誰かが持たないといけません。
また、必要とされるエンジニアのレベルが高めに感じるので、結構かかるんじゃないかなという気がします。

日本語対応に関しては、簡単にチュートリアルや操作方法を理解するなら公式ドキュメントがあるのですが、
いざシステムをカスタマイズしようとしたときに参考となるのは、GitHub上の英語のドキュメントしかありません。
それにすべて丁寧に書いてあるわけではないので正直わかりづらいところもあります。

加えて、公式ドキュメントでは、画面キャプチャが日本語表記になっていますが、実物では日本語対応していません。
日本語の文言ファイルを作成すれば1日、2日できますが、微妙に英語メッセージが直書きになっている部分もあったので、
そこを突き詰める場合は修正する必要があります。

これっておいくら万円?

Basicをデプロイして、そのままの状態にしておくと、1日当たり約 3,000円ほどかかりました。
※バージョン 3.0.0のもの

そのため、月額的には約10万飛んで行きます。

使用しているサービスは、下記になります。

  • App Service
  • Virtual Machine
  • ブロック Blob Storage
  • IP アドレス
  • Managed Disks
  • IoT Hub
  • Stream Analytics
  • Cosmos DB
  • Time Series Insights

停止して費用を減らせるものもあるのですが、停止できないものもあります。
ここはカッチリしてなかったので正確ではないですが、止めて数万減らせるぐらいです。
止められるものは、下記だったと思います。(ご使用の場合は各自確かめてください。)

  • App Service
  • Virtual Machine
  • Stream Analytics

カスタマイズするためには?

個人的な意見ですが、下記のようなエンジニアが必要となると考えています。

  • 英語ドキュメントへの苦手意識が弱い
  • Docker の使い方がわかる
  • Azure サービスに抵抗がない
  • 他人のコードを読むことに嫌がらない
  • フロントエンド開発で、React, Redux などを使ったことがある
  • バックエンド開発で、.NET C#、もしくは、Java を使ったことがある
    (又は、違う方法で実現できる人)

共通的な点としては、上4つです。
世界には沢山いるのでしょうが、私の周りではあまり見たことありません。

フロントエンド側は、React, Reduxの他に RxJS、Redux-Observable、グラフを描画するライブラリなどを使用しています。
そういったものが吸収できる人だといいでしょう。

バックエンド側は、既存のソースが .NET C#、もしくは、Javaで書かれているので、それに合わせるならそれで
合わせないなら、違う方法で開発できるエンジニアに頼みましょう。

Azureのサービスとして、Stream Analytics に関しては、私は使い方をマスターできなかったので、手をいれませんでした。
もし、いじる必要がある場合は、こちらに詳しい方がいるといいです。

上記以外として、デバイス側のプログラムを書く場合、
公式ドキュメントでは、C と Node.js (Javascript) を使用したが紹介されていますので、
それができそうなエンジニアが必要になるでしょう。
私の場合は、Javascriptが書けるので、それで作りました。

上記のようなエンジニアがいるパートナー会社、もしくは、フリーランスなど頼る必要があるかもしれません。

最後に

ここまで読んでくださった方ありがとうございます。
Azure IoT ソリューションアクセラレータについていかがでしたでしょうか。
理解できましたでしょうか。

GitHub上のリモート管理のリポジトリは、バージョン3.0.0(2019/04/18の更新)から更新されていません。
あまり使われていないのでしょうか。

私はこれを500時間ぐらい触りましたが、発展していないようで悲しいです。
せめてこれから明るくなることに期待します。
また、これからアクセラレータについて知りたい方のためになれば幸いです。

ご質問ございましたら、コメントいただければ、回答いたします。
ありがとうございました。

-クラウド
-,

© 2020 tako-xyz