クラウドエンジニアブログ

「Azure × IoTプラットフォーム」 事始め③

human01

湯下 達郎

皆さん、こんにちは!
今回も、引き続き 湯下 が担当させていただきます。

今回の投稿では、Azure で提供される IoT プラットフォーム向けのサービスとその詳細をお伝えしていきます。

データ収集

Azure IoT Hub

Azure IoT Hub

Event Hubs

Event Hubs



まずは、データ収集についてですが、これらのサービスは、各デバイスからのデータを受信する「ハブ」として利用されます。

「Azure IoT Hub」は、IoT ソリューションに最適化された、高いパフォーマンスとスケーラビリティを持つデバイス接続/メッセージ送受信サービスです。
数百万台規模のデバイス接続とメッセージングに対応しており、デバイス接続キーの一元管理/暗号化通信/アクセスコントロールといったセキュリティにより保護された双方向通信が可能です。
対応プロトコルは、AMQP 1.0 / MQTT v3.1.1 / HTTP 1.1となり、「Azure IoT Hub」の全てのエンドポイントは SSL/TLS プロトコルを使用しております。

一方で、「Event Hubs」は、秒間数百万件のイベントを受信可能な、コストパフォーマンスに優れたスケーラブルなメッセージ受信サービスです。
「Event Hubs」自体は、IoT ソリューション専用のサービスではなく、汎用的なメッセージング用途として「Service Bus」の1機能としてサービス提供されています。
そのため、デバイスからのデータを直接受け取るだけでなく、「Stream Analytics」で加工したデータを「Event Hubs」に渡して後続の処理につなげる、いわば「データアダプター」としての使い方も可能です。
対応プロトコルは、AMQP 1.0 / HTTP 1.1であり、SSL/TLS による暗号化にも対応しています。

データ受信だけを目的とする場合は、どちらでも対応可能ですが、デバイス接続/管理/デバイス制御まで必要なソリューションでは、それらの機能が標準提供されている「Azure IoT Hub」がオススメです。

データ加工

Stream Analytics

Stream Analytics

HDInsight

HDInsight

Data Fatory

Data Fatory



通常、受信したデータをデータストアに格納する前に、可視化や分析、ログ保管等を目的として、何らかの加工(フィルター、集計、変換、…)をすることになりますが、その際に利用するのが上記のサービスになります。
ただ、一口にデータの加工といっても、リアルタイム処理が必要な場合と、定期的なバッチ処理でも十分な場合があり、システム要件やデータ特性に応じて最適なサービスを選択する必要があります。

まず、「Stream Analytics」は、名前の通り、リアルタイムなストリーミング処理を行うサービスであり、SQL ライクなクエリ言語で必要な処理を記述できます。
下記ドキュメントに、一般的なクエリパターンがまとめられており、とても参考になります。
https://azure.microsoft.com/ja-jp/documentation/articles/stream-analytics-stream-analytics-query-patterns/

データの入力元として「Azure IoT Hub」や「Event Hubs」、「BLOB Storage」に対応しており、出力先としては「BLOB Storage」や「Data Lake Store」、「SQL Database」、「Document DB」、「Event Hubs」、「Power BI」等に対応しています。
特に、ストリーム処理をしたデータを直接「Power BI」上のストレージ領域に格納することが出来るため、リアルタイムで値やグラフが変化する監視用ダッシュボードが簡単に作れます。

次に、「HDInsight」は、「Apache Hadoop」と完全互換な分散処理サービスであり、バッチ処理向けの「MapReduce」だけでなく、ストリーム処理用の「Storm」、インメモリ型準リアルタイム処理の「Spark」が利用可能です。
それ以外にも、NoSQL の「HBase」や DSL である「Hive」や「Pig」も使えます。
「HDInsight」は、入出力用のデータストアとして「BLOB Storage」や「Data Lake Store」が利用でき、大規模な半構造化/非構造化データの高速処理をしたいときに有用です。

最後に、「Data Factory」ですが、これは「Stream Analytics」や「HDInsight」と少し毛色が異なり、任意のデータソースを接続し、自動化されたワークフローを実現する「データ統合サービス」となります。
従って、オンプレミスや Azure 側で様々なデータストア製品・サービスを利用している状況で、相互接続・パイプライン処理が必要な場合に利用することが多いかと思います。

データ保管

SQL Database

SQL Database

BLOB Storage

BLOB Storage

Table Storage

Table Storage

Document DB

Document DB

SQL Data Warehouse

SQL Data Warehouse

Data Lake Store

Data Lake Store



デバイスから収集したデータを、データストアに保管することは単純に見えて、結構頭を悩ますものだったりします。
IoT ソリューションに馴染みの薄い方にとって、収集データはリレーショナルデータベースに格納すれば良いように思えるかもしれません。
しかし、デバイスから送信されるデータは、通常は大量かつ構造化し難いデータとなります。

小規模なシステムで、データ量が少なく、比較的シンプルなデータ構造(スキーマ)で、後々のスキーマ変更もそれほど大変ではない場合は、「SQL Databaese」のようなリレーショナルデータベースサービスを利用するのも良いかと思います。
ただ、中~大規模なシステムの場合は、デバイス数やデータ量、データの蓄積ペースも桁違いに大きくなるため、テラバイト~ペタバイト級のスケーラビリティを持ち、かつ書き込み性能がネックにならないデータストアが望ましいです。
そんな場合は、半構造化/非構造化データの保管に対応した「BLOB Storage」や「Data Lake Store」、NoSQL データサービスの「Table Storage」(Key Value Store 型)や「Document DB」(JSON ドキュメント型)がオススメです。

しかし、実際の IoT ソリューションでは、上記のどれか1つのみを使うケースは少なく、保管したいデータに応じて、利用するサービスを組み合わせることが多いです。
例えば、「Stream Analytics」で加工したデータを「BLOB Storage」に永続的に保管しつつ、デバイス情報は「SQL Database」で管理する、といった具合になります。
従って、なるべく早い段階で保管対象のデータ特性/構造を明確にし、最適なサービスを選択する必要があると言えます。

データ分析

Azure Machine Learning

Azure Machine Learning

Power BI

Power BI

Cognitive Services

Cognitive Services



IoT ソリューションにおいて、データ分析はいわば「花形」であり、ビジネスにおける有益な情報をいかに引き出すか、という最もエキサイティングなジャンルになります。

その一方で、データ分析のためのBIシステムは、とにかく複雑で導入/運用コストのかかる「厄介者」という印象が否めないのも事実です。

しかし、Azure には、その常識を覆すような素晴らしいサービスが用意されています。
代表的なものとして、可視化やレポーティングには「Power BI」が、機械学習には「Azure Machine Learing」があり、驚くことに大抵の作業はクリックやドラッグ&ドロップで完了します!

※ちなみに、「Power BI」は厳密には Azure のサービスではなく、Office 365と同じ立ち位置の Microsoft 社の SaaS になります。

「Power BI」には、無料版とPro 版がありますが、デスクトップツールである「Power BI Desktop」はどのユーザーでも無料で利用出来ます。
Excel とほぼ同じ操作性で、様々なデータ(CSV, JSON, TXT, SQL Database, BLOB/Table Storage, HDInsight Spark, Data Lake Store等)のインポートや加工、可視化、レポーティングが可能です。

「Azure Machine Learning」には、標準で様々な学習アルゴリズムが用意されており、学習モデルを構築するための前処理や後処理のためのモジュールも利用できます。
また、Python や R 言語で実装したカスタムスクリプトを追加することで、標準の学習アルゴリズムやモジュールでは足りない処理を、個別にカスタマイズすることも可能です。

さらに、構築した学習モデルを、Web API として外部公開することができ、様々なアプリケーションやユーザに対して、予測ソリューション(機械の予防保全や商品レコメンド等)を提供出来ます。

ちなみに、「データ分析」で分類するとやや語弊があるかもしれませんが、Azure には「Cognitive Services」という人工知能サービスがあります。

https://azure.microsoft.com/ja-jp/services/cognitive-services/

「Cognitive Services」では、大きく分けて「言語」「音声」「視覚」「検索」「知識」に関する人工知能アルゴリズムが、SaaS の形で提供されています。
具体的には、自然言語の裏にある感情/情緒の解釈、音声とテキストの相互変換や発話者認識、写真や動画から顔認識や感情認識といった機能が API 提供されており、簡単に利用することができます。
これらの機能をアプリケーションに組み込むことで、これまで以上の高度なエクスペリエンスとパーソナライゼーションを実現することが可能です。
下記ドキュメントに、各々の API 仕様や実装サンプルがまとめられており、ほとんど手間を掛けずに実装出来ることがお分かり頂けるかと思います。

https://www.microsoft.com/cognitive-services/en-us/documentation

デバイス管理/制御

Web Apps

Web Apps

Azure IoT Hub

Azure IoT Hub



IoT ソリューションにおいては、デバイスからのデータを収集・加工・保管・分析すること以外に、デバイスの管理/制御も同じくらい重要になります。
特に IoT デバイスは、通常は人の手が届かない場所に設置されることが多く、それらの状態を常に把握し、効率的に管理する必要があります。
また、場合によっては、IoT デバイスのファームウェアの更新や設定変更、再起動、接続デバイスの切り離し等のリモート制御も発生します。
つまり、効率的なデバイス管理/制御を実現するために、管理者向けのポータルサイトが必要になります。
具体的には、接続デバイスの稼働状況を確認したり、デバイス登録や設定変更等を行う機能/画面を実装することになります。

一例ではありますが、管理者向けのポータルサイト基盤として「Web Apps」を利用することで、ほとんど手間無くスケーラブルな Web サイトを構築できます。
「Web Apps」は、「Windows Server」と「IIS」をベースとした PaaS であり、開発言語は「.NET Framework」をはじめとして、「Java」や「PHP」、「Python」等が利用できるため、システム要件に最適なものを選択可能です。

※「Web Apps」は、「Azure App Service」を構成する1つのサービスであり、他にはモバイルバックエンドの「Mobile Apps」やワークフロー基盤の「Logic Apps」、API 基盤の「API Apps」があります。
※「Web Apps」は、Azure ポータルや公式ドキュメント等で、「Webアプリ」と表記されることがあります。

また、デバイスのリモート制御については、標準で双方向通信に対応した「Azure IoT Hub」を経由させる実装が、一般的かと思います。
なお、本稿作成時にはまだプレビュー段階ですが、「Azure IoT Hub」に「デバイス管理」機能が提供されており、より低コストに管理/制御の仕組みを実装することが可能です。

https://azure.microsoft.com/ja-jp/documentation/articles/iot-hub-device-management-overview/

認証/スケジューラ/通知

Azure Active Directory

Azure Active Directory

Web Jobs

Web Jobs

Scheduler

Scheduler

Azure Automation

Azure Automation

Notification Hubs

Notification Hubs



これらのサービスを利用した認証や定期ジョブ実行、ユーザ通知は、IoT ソリューションにおいて必須というわけではありませんが、セキュリティ要件や運用要件に応じて適宜ご利用ください。
特に、「Web Jobs」は非常に便利な機能であり、簡単に「.cmd/.bat/.exe/.ps1/.sh/.php/.py/.js」等の実行ファイルを配置し、オンデマンドやスケジュールで実行することが出来ます。
これは、先程ご紹介した「Web Apps」の1機能であり、バックエンドで稼働する定期バッチとして利用できます。(例えば、5分に1回の頻度で、デバイスの死活を監視する処理等)
※ちなみに、実行ファイルの配置方法は2通りあって、1つ目はファイルを ZIP 化して、Azure ポータルからアップロードする方法で、2つ目は Visual Studio で Web Jobs プロジェクトを作成し、Visual Studio から配置する方法です。

ジョブの定期実行やプロセスの自動化という点では「Azure Automation」もありますが、これはどちらかというと IaaS 寄りのサービスになります。
というのも、「Azure Automation」では標準で「Windows PowerShell」や「Windows PowerShell DSC」、「Azure PowerShell」が利用できるため、例えば、仮想マシンの起動/停止の自動化や、デプロイ時における OS/ミドルウェア設定の自動化といった使われ方が多いです。
ただ、仮想マシンを一切使用しない IoT ソリューションを構築する場合、あまり恩恵を受けられ無さそうに思えますが、先程紹介した「HDInsight」と合わせて利用するとコスト削減に役立つかもしれません。
「HDInsight」のクラスター(ヘッドノードやワーカーノード)は、仮想マシンのように「停止する」という概念はなく、課金を止めるにはクラスター自体を削除する必要があります。
そのため、クラスターを常時稼働させる必要が無い場合は、「Azure Automation」で自動的にクラスターを削除/再作成するジョブを構成することで、ランニングコストや人的コストの削減が可能になります。

デバイス開発

Azure IoT Hub デバイスSD

Azure IoT Hub デバイスSD



ここまで、IoT プラットフォーム向けの Azure サービスを紹介してきましたが、いざデバイス上で動かすアプリケーションを開発するとなると、まず「どうやって Azure IoT Hub に接続すればいいの?」となると思います。
全ての Azure サービスで提供されている REST API を利用して、スクラッチで実装する方法も無くはないですが、通常は、効率的かつ堅牢性の高い開発を行うために Microsoft 社提供の「Azure IoT Hub デバイス SDK」を利用することになります。
この SDK は、下記ドキュメントにまとめられている通り、C/C#/Java/Node.js 向けに提供されています。
また、Microsoft 社が動作検証を行ったデバイスの OS 種別/バージョン/通信プロトコル/ハードウェアについても記載されているので、是非ご覧頂ければと思います。

https://azure.microsoft.com/ja-jp/documentation/articles/iot-hub-tested-configurations/

なお、「Azure IoT Hub」の代わりに「Event Hubs」を利用する場合は、.NET Framework 向けの「Azure .NET SDK」にて実装する形になります。

https://azure.microsoft.com/ja-jp/documentation/articles/event-hubs-programming-guide/

今回の投稿では、データ収集から分析、その周辺に関するサービスを、ひと通りお伝えしましたが、主な機能や利用ケースを何となくでもイメージ頂けたでしょうか?
次回では、具体的なシステム構成例や実際の活用事例をご紹介しつつ、本シリーズのまとめをしたいと思います。


次回予告



どうぞよろしくお願いします!(‘∀‘)

【総合】お問い合わせ

ソリューションに関する全般的なお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録