Microsoft Azure 自習書シリーズ -...

158
Microsoft Azure 自習書シリーズ IoT この自習書では、Microsoft が提供するパブリッククラウドサービスである Microsoft Azure を利 用し、IoT を利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験 します。 発行日 : 2018 5 28

Transcript of Microsoft Azure 自習書シリーズ -...

Page 1: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ

IoT

この自習書では、Microsoft が提供するパブリッククラウドサービスである Microsoft Azure を利

用し、IoT を利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

します。

発行日 : 2018年 5月 28日

Page 2: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 2 -

更新履歴

版数 発行日 更新履歴

第 1版 2017年 9月 4日 初版発行

第 1.1版 2017年 10月 30日 Azureポータル更新に伴い変更

第 1.2版 2017年 11月 29日 Azureポータル更新に伴い変更

第 1.3版 2017年 12月 26日 表の見やすさなどのエクスペリ

エンス向上のための変更

第 1.4版 2018年 1月 26日 Azure 無料評価版-価格変更に伴

い更新

第 1.5版 2018年 2月 26日 Azure Storage 仮想ネットワー

ク GAに伴いメニュー更新

第 1.6版 2018年 3月 26日 Visual Studio 2017 更新 (15.6)

に伴い画像を差し替え

第 1.7版 2018年 4月 26日 Azureポータル更新に伴い変更

第 1.8版 2018年 5月 28日 Azureポータル更新に伴い変更

Page 3: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 3 -

目次

1. はじめに ................................................................................................................................................................................. 4

2. Microsoft Azureの概要 ..................................................................................................................................................... 6

3. 実習環境の準備 ................................................................................................................................................................. 11

4. (参考)Microsoft Azure 無料評価版のサインアップ ..................................................................................... 15

5. IoT システムの目的 - システムの全体像を計画する........................................................................................ 18

6. データの入り口を制御する – Event Hubs .............................................................................................................. 20

7. データの入り口をよりセキュアに制御する – IoT Hub .................................................................................... 51

8. イベントを受信する - Function App ........................................................................................................................ 75

9. データの流れを制御する – Data Factory ................................................................................................................ 88

10. 流れているデータを分析する – Stream Analytics ......................................................................................... 103

11. 分析と予測を行う – Azure Machine Learning ................................................................................................ 117

12. 可視化する – Power BI .............................................................................................................................................. 135

13. リソースグループの削除.......................................................................................................................................... 155

14. Microsoft Azureに関する情報の入手元 .............................................................................................................. 157

15. Microsoft Azureのお問合せ ..................................................................................................................................... 158

Page 4: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 4 -

1. はじめに

本自習書をご利用いただきありがとうございます。この自習書では、Microsoft が提供するパブリッ

ククラウドサービスであるMicrosoft Azureを利用し、Azure環境で動作する IoTを利用したデータ収集

から分析までの一連の流れをハンズオン形式で体験学習します。

自習書において、あなたは Adventure Works Cycles社(AW社)に勤めている IT管理者です。AW社

は、架空の大規模な多国籍製造企業です。この企業は、北米、ヨーロッパ、およびアジアのマーケット

を対象に、金属製自転車やカーボン製自転車の製造および販売を行っています。従業員 290 人の米国

ワシントン州ボセルの拠点に加え、自社のマーケット基盤全体にわたって複数の地域販売チームを配置

しています。

Page 5: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 5 -

あなたは、Microsoft Azureの IoT Hub、Data Factory、 Stream Analytics等を利用し、センサーデバ

イスからのデータ収集と分析、および機械学習による故障予測のためのシステムをテスト運用するため、

そのインフラを構築しなければなりません。このシステムは、IoT Hub、Stream Analytics、Data Factory

等から構成されます。また、利用状況の可視化のために Power BIを使用します。

このシステムでは、以下の機能を実装します。

・センサーデバイスから送信されるデータを受信します。

・受信したデータをから明らかな異常値を検出します。

・Azure Storageに蓄積します。

・Azure Machine Learning を使用し、故障までの時間を予測します。

・予測結果を含めて、Power BI にて可視化します。

Page 6: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 6 -

2. Microsoft Azure の概要

まず、基礎知識として、Microsoft Azure と Data Factory 等 IoT のために提供されている機能の概要

を学習します。

Microsoft Azureは、Microsoft が提供するオープンで柔軟なエンタープライズレベルのクラウドコ

ンピューティングプラットフォームです。Microsoft Azureでは、Webから、モバイル、コンピューティ

ング、データベース、分析に至るまで、様々なクラウドサービスを提供しています。企業は、Microsoft

Azureを利用することで、より早く、より多くのビジネス目標を達成でき、より経費を節約できます。

Page 7: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 7 -

Microsoft Azureの特徴は、次のとおりです。

●高い生産性を提供

開発者や IT管理者は、Microsoft Azureの統合された管理ツール、テンプレートによる展開、管理

されたサービスを利用することで、より高い成果を生むことができます。

●オープンで柔軟

Microsoft Azureでは、OS、プログラム言語、フレームワーク、ツール、データベース、デバイス

において、オープンで幅広い選択肢を用意しています。App Services では PaaS (Platform as a Service)

環境として、Web アプリケーションのホスティング環境を提供していますが、.NET アプリケーション

だけでなく、Java, node.js, python など、幅広い実行環境を提供しています。

●最高水準のデータ保護

Microsoft Azure は、データの保護とプライバシーに関する業界最高水準のコミットメントを受け

ています。Microsoftは、クラウド プライバシーに関する新たな国際標準である ISO 27018を採用した

最初のメジャークラウドプロバイダーです。

●どこでも

Microsoft Azureは、世界 42の場所でデータセンターを稼働させています。また、今後もデータセ

ンターの数は増える予定です。日本においては、東日本(埼玉)と西日本(大阪)の 2つのデータセン

ターが稼働中であり、日本国内からの利用時に、高いパフォーマンスが確保されます。

●あらゆるビジネスに使用可能

Microsoft Azure は、予算に合わせて利用することができます。例えば、小規模なテスト環境から

大規模なオンラインゲーム環境の提供まで幅広く利用可能です。

●経済的かつスケーラブル

Microsoft Azure は従量課金です。そのため、支払いは使用した分だけとなります。例えば、仮想

マシンの実行は、分単位で課金されるため、負荷に合わせて、適切なスケールアップやスケールダウン

をおこなえば、パフォーマンスを低下することなく、経費を節約できます。

Page 8: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 8 -

Event Hubs、IoT Hubは、多数のデバイスからのイベントを受信し、円滑に処理するサービスを提供

します。IoT では多数のデバイスから高頻度でデータを受信することになります。そのため、すべての

イベントを漏れなく受信することが必要になります。Event Hubs、IoT Hubを使用することで、これら

の問題に容易に対処することが可能になります。

それだけではなく、エンドポイントのセキュリティ、あるいはデバイス認証、双方向通信などの機能

も提供します。

Data Factoryは Azure上で提供されるデータ統合サービスです。データの保管、移動、および処理を

パイプラインとして自動化することができます。Data Factoryは Azure上に保存されているデータだけ

ではなく、オンプレミスのデータソースとも接続することができます。

これにより、収集されたデータを継続的に加工し、分析・可視化を行うことができます。

Page 9: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 9 -

Stream Analyticsは Event Hubs、IoT Hub等から取得したイベントデータをストリーミング処理する

ことを可能にします。イベント処理の流れの中で異常値の検出やデータ加工、分析などの処理を、イベ

ント処理を止めることなくリアルタイムで可能にします。

Azure Machine Learning は Azure 上で提供される機械学習のためのソリューションです。特別なハ

ードウェア等を用意することなく、Webブラウザ上で機械学習モデルの構築、トレーニングが可能です。

トレーニングされた学習モデルは、そのまま Web Service として利用することが可能です。そのた

め、Web アプリケーション、あるいは Stream Analytics等と容易に統合することが可能です。

Page 10: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 10 -

Power BIは無料で利用することが出来るデータの分析・可視化を提供する BI (Business Intelligence)

ツールです。様々なデータソースに接続し、分析のためのレポートを容易に作成、共有することが出来

ます。

作成したレポートは PCだけではなく、スマートフォンやタブレット(iOS, Android)端末からも参照す

ることが出来ます。レポートの作成には、コーディングは不要です。

Page 11: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 11 -

3. 実習環境の準備

この自習書の手順は、次の実習環境を準備することで、実際に試すことができ、理解を深めることが

できます。

●自習用 PC

Windows 10 などの自由に操作可能な Windows コンピューター(物理コンピューター)が 1 台必

要です。また、Webブラウザとして Internet Explorer または Edge Browserを使用します。スピーカー

またはイヤフォンのご用意を推奨いたします。

●Visual Studio

Windows コンピューターには、展開するアプリケーションを作成するために、Visual Studio をイ

ンストールしておきます。本自習書では、Visual Studio 2017を前提として解説いたします。Editionは

問いません。Visual Studioをお持ちでない方は https://www.visualstudio.com/ja/downloads/ よりダウ

ンロード可能です。

●インターネット接続

Windows コンピューターは、インターネットに接続されている必要があります。企業内で実習をお

こなう場合は特に注意が必要です。多くの企業のインターネット接続では、ファイアウォールが介在し

ます。その場合は実習で必要な HTTP/S 接続のプロトコルがブロックされていないことを確認しておく

必要があります。

●Microsoft Azure サブスクリプション

Microsoft Azure サブスクリプションは、Microsoft Azure を使用するための権利です。すでに

Microsoft Azureサブスクリプションをお持ちの場合は、そのサブスクリプションを利用することができ

ます。まだ、 Microsoft Azure サブスクリプションをお持ちでない場合は、実習用に

Page 12: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 12 -

https://azure.microsoft.com/ja-jp/pricing/free-trial/ より、1 か月間の無料評価版をサインアップし、使

用することができます。

ワンポイント

Microsoft Azureの 1か月間の無料評価版のサインアップには、本人確認のため、電話番号(固

定電話または携帯電話)およびクレジットカードの情報が必要です。なお、無料評価版の利用は 1 回

までとなっており、過去すでに利用された方は無料評価版にサインアップいただけません。有償のサ

ブスクリプションに切り替えていただきますようお願いいたします。

●Microsoft アカウント

Microsoft アカウントは、マイクロソフトが提供するクラウドサービスを利用するための ID です。

この自習書では、Microsoft Azureサブスクリプションの利用権をMicrosoftアカウントに割り当てます。

Microsoft アカウントは http://www.microsoft.com/ja-jp/msaccount/default.aspx より、無償で登録でき

ます。

ワンポイント

新しく、Microsoft Azure の 1か月間の無料評価版のサブスクリプションをサインアップする場

合、同時にMicrosoftアカウントを登録することもできます。

●Power BI

Power BIの利用には無料のサインアップが必要です。

Power BIには無料版と有償版があります。機能の相違については、以下のページに詳しく記載され

ています。本自習書の内容は、無料版を前提として記述しています。

Power BI の料金

https://powerbi.microsoft.com/ja-jp/pricing/

Page 13: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 13 -

Power BI の無料版のサインアップにおいては、個人用のメールアドレスは使用できませんのでご注

意ください。具体的には、Gmail, outlook.com 等のメールアドレスは使用できませんので、予め他のメ

ールアドレスをご用意ください。

上図のように outlook.com を使用してサインアップしようとすると下図のようにエラーとなります。

また、Power BI のレポートを作成・編集するために、Power BI Desktop を使用します。Power BI

Desktopは無料で利用できるレポート作成ツールです。Power BI Desktopは以下のページからダウンロ

ードすることが可能です。

Power BI Desktop

https://powerbi.microsoft.com/ja-jp/desktop/

Page 14: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 14 -

ダウンロードボタンをクリックするとインストーラーがダウンロードされます。ダウンロード後、イ

ンストーラーに従って、Power BI Desktop をインストールしてください。

※ダウンロードボタンをクリックすると以下のダイアログが表示されます。

お名前、メールアドレス等の入力が求められますが、右上の[×]をクリックして閉じても構いません。

Page 15: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 15 -

4. (参考)Microsoft Azure 無料評価版のサインアップ

この手順はオプションです。Microsoft Azure サブスクリプションをお持ちでない場合、次の手順を

実行し、Microsoft Azureの 1ヶ月間の無料評価版のサブスクリプションを取得してください。

1. Webブラウザを起動し、https://azure.microsoft.com/ja-jp/pricing/free-trial/ にアクセスします。

2. [無料の Azure アカウントを今すぐ作成しましょう]が表示されます。[無料で始める]をク

リックします。

3. [サインイン]が表示されます。Microsoft アカウントのメールアドレスとパスワードを入力

し、[サインイン]をクリックします。まだ、Microsoftアカウントをお持ちでない場合は、[新規登

録]をクリックします。

Page 16: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 16 -

4. [新規登録]をクリックした場合、[アカウントを作成する]が表示されます。自分のメールア

ドレス(自分が日常的に使用しているメールアドレス)と任意のパスワードを指定し、[アカウント

の作成]をクリックします。なお、利用できるメールアドレスを持ちでない場合、[その他のオプシ

ョン]をクリックし、新しい Outlookメール(~@outlook.jp)を作成することもできます。

ワンポイント

ここで登録した Microsoft アカウントが、Microsoft Azure サブスクリプションの管理者(サブ

スクリプション所有者)になります。

5. [サインアップ]が表示されます。サインアップに必要な情報を指定します。なお、サインア

ップには、ショートメッセージ(SMS)またはコールバックを利用した電話による確認とクレジッ

トカードの登録による確認が必要です。確認が完了したら、[サインアップ]をクリックします。

ワンポイント

登録したクレジットカードが勝手に使用されることはありません。

Page 17: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 17 -

6. [Microsoft Azureへようこそ]の[準備が完了するまでしばらくお待ちください]が表示され

ます。しばらく待つと、[サブスクリプションの準備が整いました]が表示されます。[サービスの

管理を開始する]をクリックします。

ワンポイント

Microsoft Azureの 1か月間の無料評価版では、22,500円相当のクレジットが利用可能です。な

お、無料評価版の使用制限に達した場合には、利用している仮想マシンとクラウドサービスの開放が

おこなわれます。もし制限にかかった場合には、翌請求月になるまでは利用が制限されます。ストレ

ージサービスについては、読み取り専用としてアクセスが可能です。

Page 18: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 18 -

5. IoT システムの目的 - システムの全体像を計画する

IoTを使用したシステムにおいては、データの流れ・システムの全体像を計画することが必要となり

ます。まず、データの量について考慮する必要があります。

デバイスから測定値を送信する際に無線 LAN、あるいは携帯電話網を利用して HTTP/S通信を行うの

は非常によくあるケースです。この時、簡単な実験室レベルであれば Web API を使用して受信すれば

よいでしょう。しかしながら実際のシステムに展開する場合には、以下を考慮する必要があります。

・デバイスはいくつありますか?

・送信頻度はどれくらいですか?

・デバイスのセキュリティはどの程度確保する必要がありますか?

例えば 50 個のデバイスが 30 秒ごとに送信を行う場合、平均して 600 ミリ秒に一度 HTTP リクエス

トを受信することになります。デバイスの数が増える、または、送信間隔が短くなるにつれ、1リクエ

ストの処理にかけられる時間は短くなります。これを通常の Web API で考慮しつつ実装するのは非常

に大変です。

これらのデータをどこに保存するのかということも考慮する必要があります。IoTシステムにおいて

よくある流れとしては、蓄積したデータを基に Azure Machine Learning、Hadoopなどで解析して予測

に活かすことになります。その結果、デバイスから送信され、保存されるデータは膨大なものになりま

す。これら膨大なデータを保存するためには、Azure Storageの利用が適しています。

これに対してデバイスのマスター情報などは、Azure SQL Database、あるいは Cosmos DBなどに保

持され、他のシステムでも利用されます。システムによっては Azure上ではなく、オンプレミス環境に

保持されているかもしれません。つまり、Azure Storage と別のデータソースとを結合して利用する必

要があるということになります。これら一連の流れを一から作成することには多くの困難が伴います。

デバイスのセキュリティという観点では、デバイス自体のセキュリティ確保もさることながら、認

証・なりすましに対する対策も考慮する必要があります。

この問題を解決するために、Microsoft Azureでは以下のサービスを提供しています。

⚫ Event Hubs

一秒あたり数百万イベントを受信して処理することができるサービスです。

⚫ IoT Hub

何百万もの IoTデバイスとの間でセキュアな双方向通信を提供するサービスです。

⚫ Data Factory

Azure上だけでなくオンプレミス上のデータと統合してデータの流れを管理するサービスです。

これらを組み合わせることで、IoTデバイスとの連携を容易に構築することが可能になります。

Page 19: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 19 -

ここで注意すべきなのは、Event Hubsと IoT Hubの違いです。どちらもイベントを受信するという

点では同じです。そのため、どちらを使用すべきなのか、どのように違うのかという点を理解する必要

があります。

双方のサービスには異なる点も多くあります。価格も異なりますので、機能の違いを理解した上で、

どちらを利用するかを判断してください。サービスの比較については、以下のリンクを参照してくださ

い。

Azure IoT Hub と Azure Event Hubs の比較

https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-compare-event-hubs

ワンポイント

IoT システムのアーキテクチャについては以下の「Microsoft Azure IoT Reference Architecture」も

ご参照ください。

http://download.microsoft.com/download/A/4/D/A4DAD253-BC21-41D3-B9D9-

87D2AE6F0719/Microsoft_Azure_IoT_Reference_Architecture.pdf (英語)

Page 20: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 20 -

6. データの入り口を制御する – Event Hubs

デバイスが取得した情報を受信するために、Event Hubs を使用します。Event Hubsは毎秒数百万の

イベントを受信し、処理することができます。そのため、多数のデバイスからデータを収集する場合で

も対応することが可能です。

Event Hubs は IoT デバイスだけではなく、アプリケーションからもイベントを受信することが可能

です。そのため、アプリケーションのテレメトリー、システム間連携等にも使用することができます。

※図の出典:Event Hubs とは

https://docs.microsoft.com/ja-jp/azure/event-hubs/event-hubs-what-is-event-hubs

Event Hubs で使用される用語について説明します。

⚫ イングレス

受信するイベントのことを指します。Event Hubsは HTTP/S、AMQP 1.0 を介して受信します。

⚫ エグレス

送信するイベントのことを指します。

⚫ コンシューマー

受信したイベントを利用するプログラム等のことを指します。コンシューマーは AMQP 1.0を介して

接続します。

⚫ スループットユニット

課金対象となる容量単位のことを表します。事前に設定したスループットユニットを超過すると受

信イベントは Exceptionとなり、送信イベントは設定されたスループットユニットまで調整されます。

1スループットユニットには以下の内容が含まれます。

・受信側:1秒当たり 1MB または 1,000 イベント

Page 21: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 21 -

・送信側:1秒当たり 2MB

⚫ 仲介型接続

HTTP/Sを使用する場合、送信システム/デバイスの数にかかわらず接続料金はかかりません。これに

対し、AMQP接続は仲介型接続として計測されます。

⚫ 名前空間

Azureポータル等で作成される 1 つの Event Hubs毎に 1つの名前空間を持ちます。この名前空間毎

に、エンドポイント URLと接続キーが発行されます。

この Event Hubs名前空間の中に複数のイベントハブを作成することができます。名前空間の SASト

ークンとは別に各イベントハブの接続キーを設定することも可能です。

⚫ 共有アクセスポリシー

名前空間またはイベントハブごとに共有アクセスポリシーを設定することが出来ます。この共有ア

クセスポリシー毎に2つの接続キーを持ちます。

また、共有アクセスポリシーは「管理」「送信」「リッスン」の各権限を設定することが可能です。そ

のため、イベントハブへの送信専用キー、受信専用キーなどと使い分けることが可能です。

この Event Hubsを使用し、メッセージを送信するまでを実際に演習します。

Page 22: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 22 -

1. まず Event Hubsの作成を行います。[Azure管理ポータル]の画面左の[新規]→[モノのインターネッ

ト(IoT)]から[Event Hubs]をクリックします。

Page 23: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 23 -

2. [名前空間の作成]ブレードが表示されます。必要なパラメーターを入力します。

パラメーター 値

Name (任意のわかりやすい名前)

価格レベル Basic

Enable Kafka チェックしない

Subscription (サブスクリプション) お使いのサブスクリプションを選択してください

Resource Group (リソースグループ) 新規作成 – AW-RG として作成します

Location (場所) 東日本 または 西日本

Throughput Units 1

Enable Auto-Inflate チェックしない

入力後[Create]ボタンをクリックしてください。

Page 24: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 24 -

3. Event Hubsが作成されます。作成された Event Hubsを開くと、下図のようなブレードが表示され

ます。

ここからイベントハブを作成します。ブレード上部にある[+Event Hub]をクリックしてください。

Page 25: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 25 -

4. イベントハブの作成ブレードが表示されます。必要なパラメーターを入力し、イベントハブを作成

します。

パラメーター 値

Name (名前) (任意のわかりやすい名前)

Partition Count (パーティション数) 2 (デフォルト)

Message Retention(メッセージの保持期間) 1 (デフォルト)

Capture (キャプチャ) オフ (デフォルト)

ここでは価格レベル[Basic]を選択していますので、キャプチャを Onには設定できません。

上記入力後、[Create]ボタンをクリックしてください。作成が終わると、Event Hubs の概要ブレー

ドの下部に作成されたイベントハブが表示されます。

5. 作成したイベントハブに対する共有アクセスポリシーを設定します。

Event Hubs の概要ブレードに表示されているイベントハブをクリックすると、イベントハブの概

要ブレードが表示されます。

Page 26: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 26 -

右側のメニューより[Shared access policies]をクリックしてください。

6. Shared access policiesのブレードが表示されます。

[+追加]をクリックして共有アクセスポリシーを追加します。ここでは「送信専用」と「受信専用」

のキーを作成します。

[+Add]をクリックすると、[Add SAS Policy]のブレードが表示されます。

まず送信専用のアクセスポリシーを作成します。

Page 27: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 27 -

パラメーター 値

ポリシー名 sendOnly

「Send」のみチェック

入力後[作成]ボタンをクリックしてください。作成されると下図のように表示されます。

Page 28: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 28 -

作成されたポリシーをクリックすると詳細情報のブレードが表示されます。この詳細情報より、キ

ー・接続文字列を取得・再生成することが可能です。

受信専用のポリシーも同様に作成します。

パラメーター 値

ポリシー名 receiveOnly

「Listen」のみチェック

Page 29: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 29 -

7. イベントハブに送信するアプリケーションを作成します。

Visual Studio を起動し、新しいコンソールアプリを作成します。

パラメーター 説明 値

選択するテンプレート 作成するプロジェクトの種類

“Visual C#”-“Windowsクラシック デスク

トップ”から「コンソールアプリ(.NET

Framework)」

名前 プロジェクト名

(任意の名称)

※送信処理であることが判りやすい名称を

お勧めします

場所 ソリューションを作成するフ

ォルダー (任意の場所)

ソリューション名 ソリューション名 <規定値>

フレームワーク 使用する.NET Frameworkの

バージョン .NET Framework 4.6.1

Page 30: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 30 -

8. ソリューションエクスプローラーより、作成したソリューションの上から二つ目の C#のアイコン

があるプロジェクト名を右クリックし、[NuGetパッケージの管理]をクリックします。

9. [NuGet パッケージマネージャー]が表示されます。「参照」を選択したうえで、「検索」

に”Eventhubs”を入力すると、Event Hubsに関するパッケージが検索されます。

表示された結果から「Microsoft.Azure.EventHubs」を選択し、[インストール]ボタンをクリックしま

す。(表示されない場合には、「参照」を選択していることを確認してください。

※表示されるバージョン番号は上図と異なる場合があります。

[変更確認]ダイアログと[ライセンスの同意]ダイアログが表示されますので、それぞれ[OK][同意す

る]をクリックしてください。

Page 31: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 31 -

10. ソリューションエクスプローラーより”Program.cs”を開きます。

まず usingディレクティブを追加します。以下の usingを追加してください。

using System.Threading;

using Microsoft.Azure.EventHubs;

11. 次に、接続に使用するイベントハブ名と接続文字列を設定します。

Program クラス内のメンバーとして、以下の定数を記述します。

const string EVENTHUB_NAME = "";

const string CONNECTION_STRING = "";

上記で作成した定数の内容を設定します。設定する内容は以下の通りです。

パラメーター 設定する値 注意

EVENTHUB_NAME 作成したイベントハブの名前 名前空間名ではありません

CONNECTION_STRING Event Hubsへの接続文字列 (下記参照)

Page 32: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 32 -

接続文字列は Azure管理ポータルより、イベントハブの「共有アクセスポリシー」から取得します。

上図の「sendOnly」をクリックするとポリシー画面が表示されます。表示されている中の

「Connection string – primary key」をコピーして使用します。

※primary key と secondary keyに機能的な差はありません。

Page 33: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 33 -

12. イベントハブにメッセージを送信するメソッドを作成します。

Programクラス内に以下のメソッドを記述します。

static async Task MessageSender(string[] args)

{

var client = EventHubClient.CreateFromConnectionString(CONNECTION_STRING);

while (true)

{

try

{

var message = $"こんにちは {DateTime.Now.Ticks}";

Console.WriteLine($"送信中… {message}");

await client.SendAsync(new EventData(Encoding.UTF8.GetBytes(message)));

}

catch (Exception ex)

{

Console.WriteLine($"例外:{ex.Message}");

}

Thread.Sleep(2000);

}

}

Page 34: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 34 -

13. 次に、エントリーポイントである Main メソッドからの呼び出しを記述します。Main メソッドを

以下のように記述してください。

static void Main(string[] args)

{

MessageSender(args).GetAwaiter().GetResult();

}

これで送信処理の記述は終了です。

完成形のソースコードは以下のようになります。(Event ハブ名、接続文字列はお持ちのものを設定

してください。)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Threading;

using Microsoft.Azure.EventHubs;

namespace EventHubsSending

{

class Program

{

const string EVENTHUB_NAME = "***";

const string CONNECTION_STRING = "***";

static void Main(string[] args)

{

MessageSender(args).GetAwaiter().GetResult();

}

static async Task MessageSender(string[] args)

{

var client = EventHubClient.CreateFromConnectionString(CONNECTION_STRING);

while (true)

{

try

Page 35: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 35 -

{

var message = $"こんにちは {DateTime.Now.Ticks}";

Console.WriteLine($"送信中… {message}");

await client.SendAsync

(new EventData(Encoding.UTF8.GetBytes(message)));

}

catch (Exception ex)

{

Console.WriteLine($"例外:{ex.Message}");

}

Thread.Sleep(2000);

}

}

}

}

実行する([F5]キーを押す)とコンソール上に以下のように表示されます。

※送信処理を止めるには、コンソールウィンドウの右上の☒で閉じてください。

Page 36: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 36 -

14. Azure管理ポータルより、作成した Event Hubsのブレードを表示します。

[概要]をクリックすると、下図のように受信メッセージ数などがメトリックに表示されていること

を確認してください。

Page 37: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 37 -

15. 送信処理を記述しましたので、受信処理を記述します。受信処理では Storage Account を使用しま

す。任意のストレージアカウントをご用意の上、任意の Blobコンテナーを作成してください。

[Azure管理ポータル]の画面左の[新規]→[Storage]→[ストレージアカウント – Blob、File、

Table、Queue]をクリックします。

Page 38: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 38 -

16. [ストレージアカウントの作成]ブレードが表示されます。以下のように設定し[作成]をクリックして

ください。

パラメーター 値

名前 (任意のわかりやすい名前)

デプロイモデル Resource Manager

アカウントの種類 Storage V2 (汎用 v2)

パフォーマンス Standard

レプリケーション ローカル冗長ストレージ(LRS)

アクセスレベル ホット

安全な転送が必須 有効

サブスクリプション お使いのサブスクリプションを選択してください

リソースグループ 既存のものを使用:AW-RG

場所 作成したWeb Appsと同じ場所

仮想ネットワーク 無効

ダッシュボードにピン留めする チェック

Page 39: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 39 -

・ 「アカウントの種類」は「Storage (汎用 v1)」「StorageV2 (汎用 v2)」と「Blobストレージ」の三つ

が選択可能です。本演習では「StorageV2 (汎用 v2)」を利用します。「Blobストレージ」は Blobの

み使用可能なストレージアカウントとなり、価格体系も異なります。「StorageV2 (汎用 v2)」と「Blob

ストレージ」には「ホット層」と「クール層」があります。

・ ホット層

頻繁に読み書きされることを想定したストレージ

ストレージコストは高め、トランザクション料金は安め

・ クール層

読み書きなどの操作が少ないことを想定したストレージ

ストレージコストは安め、トランザクション料金は高め

例えばバックアップデータを保持する場合には、「Blobストレージ」の「クール層」が適しています。

「パフォーマンス」は「Premium」と「Standard」が用意されています。

・ Premium

SSDベースのストレージです。契約容量単位で課金となります。

・ Standard

HDDベースのストレージです。使用した容量とトランザクションで課金となります。

「レプリケーション」は冗長性に関する選択です。「ローカル冗長(LRS)」「ゾーン冗長(ZRS)」「ジオ冗

長(GRS)」「読み取りアクセスジオ冗長(RA GRS)」が用意されています。

・ ローカル冗長ストレージ (LRS)

単一リージョンの単一データセンター内で三重化されます。

・ ゾーン冗長ストレージ (ZRS)

1 or 2 つのリージョン内の複数データセンター内で三重化されます。

ゾーン冗長が適用されるのは ブロック BLOBのみです。(Table, Queue, Fileは利用できません。)

アカウントの種類で StorageV2 (General purpose v2)を選択した場合には、ゾーン冗長は選択できま

せん。

・ ジオ冗長レプリケーション (GRS)

プライマリリージョンで三重化され、セカンダリリージョンでも三重化されます(計 六重化)。

プライマリリージョンで障害が発生すると、セカンダリにフェールオーバーされます。

・ 読み取りアクセスジオ冗長(RA GRS)

GRS + セカンダリからの読み取りアクセス (計 六重化)が提供されます。

通常運用時にも明示的にセカンダリから読み取りを行うことが可能です。

99.99% の読み取り可用性を保証します。

以上を確認の上「作成」ボタンをクリックしてください。

Page 40: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 40 -

17. ストレージアカウントが作成されます。画面右上の[通知]アイコンをクリックし、一覧に[デプ

ロイメントが成功しました]が表示されれば、ストレージアカウントの作成は終了です。次に Blob

コンテナーを作成します。

Azure 管理ポータルより、作成したストレージアカウントを選択し、[BLOB SERVICE]-[コンテナー]

を開きます。

コンテナーの概要が表示されます。ブレード上部のメニューより[+CONTAINER]をクリックして、

新しいコンテナーを追加します。

Page 41: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 41 -

下図のようにパラメーターの入力が求められます。

パラメーター 値

名前 (任意のわかりやすい名前)

パブリック アクセスレベル プライベート(匿名アクセスはありません)

作成した BLOB コンテナー名は後の工程で使用しますので、メモ帳などに張り付けておいてくださ

い。

Page 42: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 42 -

18. 次に、作成したストレージアカウントへの接続文字列を取得します。

予めメモ帳などを開いておくとよいでしょう。

前項と同じストレージアカウントのブレードより[アクセスキー]をクリックします。

表示された Key 情報より、Key1 の接続文字列を使用します。表示されている接続文字列の右のコ

ピーボタンをクリックしてください。

※Key1 と Key2に機能の差はありません。どちらを使用しても構いません。

※ブラウザからクリップボードへのアクセス許可を求めるダイアログが表示されることがありま

す。クリップボードへのアクセスを許可するようにしてください。

コピーした接続文字列は後の工程で使用しますので、メモ帳等に張り付けておいてください。

Page 43: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 43 -

19. 先ほどの送信処理と同様に、Event Hubsから受信するアプリを作成します。

Visual Studio を起動し、新しいコンソールアプリを作成します。

パラメーター 説明 値

選択するテンプレート 作成するプロジェクトの種類

“Visual C#”-“Windowsクラシック デスク

トップ”から「コンソールアプリ(.NET

Framework)」

名前 プロジェクト名

(任意の名称)

※受信処理であることが判りやすい名称を

お勧めします

場所 ソリューションを作成するフ

ォルダー (任意の場所)

ソリューション名 ソリューション名 <規定値>

フレームワーク 使用する.NET Frameworkの

バージョン .NET Framework 4.6.1

Page 44: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 44 -

20. 先ほどの送信処理と同様に、[NuGetパッケージの管理]より以下の2つのパッケージを追加します。

・Microsoft.Azure.EventHubs

・Microsoft.Azure.EventHubs.Processor

21. ソリューションエクスプローラーより”Program.cs”を開きます。

まず usingディレクティブを追加します。以下の usingを追加してください。

using Microsoft.Azure.EventHubs;

using Microsoft.Azure.EventHubs.Processor;

22. 次に、接続に使用するイベントハブ名と接続文字列を設定します。

Program クラス内のメンバーとして、以下の定数を記述します。

const string EVENTHUB_NAME = "";

const string CONNECTION_STRING = "";

const string CONTAINER = "";

const string STORAGE_CONNECTION = "";

上記で作成した定数の内容を設定します。設定する内容は以下の通りです。

パラメーター 設定する値 注意

EVENTHUB_NAME 作成したイベントハブの名前 名前空間名ではありません

CONNECTION_STRING Event Hubsへの接続文字列 (下記参照)

CONTAINER 使用する BLOBコンテナー名 先ほど作成した BLOB CONTAINER 名

STORAGE_CONNECTION 使用する Storage Accountへの

接続文字列

先ほど取得したストレージアカウント

の CONNECTION STRING

接続文字列は Azure管理ポータルより、イベントハブの「共有アクセスポリシー」から取得します。

Page 45: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 45 -

上図の「receiveOnly」をクリックするとポリシー画面が表示されます。表示されている中の

「Connection string – primary key」をコピーして使用します。

※primary keyと secondary keyに機能的な差はありません。

Page 46: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 46 -

23. Program.cs 内に IEventProcessor インターフェイスを実装する MyEventProcessor クラスを追加し

ます。MyEventProcessorクラスの内容は以下のようになります。

class MyEventProcessor : IEventProcessor

{

public async Task CloseAsync(PartitionContext context, CloseReason reason)

{

Console.WriteLine($"受信プロセス終了- {reason}");

if(reason == CloseReason.Shutdown)

{

await context.CheckpointAsync();

}

}

public Task OpenAsync(PartitionContext context)

{

Console.WriteLine($"受信プロセス開始 - {context.EventHubPath}

- {context.ConsumerGroupName} - Partition {context.PartitionId}");

return Task.FromResult<object>(null);

}

public Task ProcessErrorAsync(PartitionContext context, Exception error)

{

throw new NotImplementedException();

}

public async Task ProcessEventsAsync(PartitionContext context,

IEnumerable<EventData> messages)

{

foreach (EventData data in messages)

{

string received = Encoding.UTF8.GetString(data.Body.ToArray());

Console.WriteLine($"受信メッセージ {received} at Partition {context.PartitionId}");

}

await context.CheckpointAsync();

}

}

※紙面の都合上一部折り返しております。

Page 47: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 47 -

24. Programクラス内にMessageReceiverメソッドを追加します。MessageReceiver メソッドは以下の

ようになります。

static async Task MessageReceiver(string[] args)

{

var eventProcessorHost = new EventProcessorHost(

EVENTHUB_NAME,

"$Default",

CONNECTION_STRING,

STORAGE_CONNECTION,

CONTAINER

);

await eventProcessorHost.RegisterEventProcessorAsync<MyEventProcessor>();

Console.WriteLine("受信処理開始");

Console.ReadLine();

await eventProcessorHost.UnregisterEventProcessorAsync();

}

25. Mainメソッドを以下のように記述します。

static void Main(string[] args)

{

MessageReceiver(args).GetAwaiter().GetResult();

}

Page 48: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 48 -

26. これで受信処理の記述は終了です。

完成形のソースコードは以下のようになります。(Event ハブ名、接続文字列、Storage Container名、

Storage接続文字列はお持ちのものを設定してください。)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Microsoft.Azure.EventHubs;

using Microsoft.Azure.EventHubs.Processor;

namespace EventHubReceiving

{

class Program

{

const string EVENTHUB_NAME = "***";

const string CONNECTION_STRING = "***";

const string CONTAINER = "***";

const string STORAGE_CONNECTION = "***";

static void Main(string[] args)

{

MessageReceiver(args).GetAwaiter().GetResult();

}

static async Task MessageReceiver(string[] args)

{

var eventProcessorHost = new EventProcessorHost(

EVENTHUB_NAME,

"$Default",

CONNECTION_STRING,

STORAGE_CONNECTION,

CONTAINER

);

await eventProcessorHost.RegisterEventProcessorAsync<MyEventProcessor>();

Page 49: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 49 -

Console.WriteLine("受信処理開始");

Console.ReadLine();

await eventProcessorHost.UnregisterEventProcessorAsync();

}

}

class MyEventProcessor : IEventProcessor

{

public async Task CloseAsync(PartitionContext context, CloseReason reason)

{

Console.WriteLine($"受信プロセス終了- {reason}");

if(reason == CloseReason.Shutdown)

{

await context.CheckpointAsync();

}

}

public Task OpenAsync(PartitionContext context)

{

Console.WriteLine($"受信プロセス開始 -

{context.EventHubPath} - {context.ConsumerGroupName} –

Partition {context.PartitionId}");

return Task.FromResult<object>(null);

}

public Task ProcessErrorAsync(PartitionContext context, Exception error)

{

throw new NotImplementedException();

}

public async Task ProcessEventsAsync(

PartitionContext context, IEnumerable<EventData> messages)

{

foreach (EventData data in messages)

{

string received = Encoding.UTF8.GetString(data.Body.ToArray());

Console.WriteLine($"受信メッセージ {received}

at Partition {context.PartitionId}");

Page 50: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 50 -

}

await context.CheckpointAsync();

}

}

}

※紙面の都合上一部折り返しております。

実行する([F5]キーを押す)とコンソール上に以下のように表示されます。メッセージが自動的にパ

ーティション分割されていることが確認できます。

27. 【課金に余裕のある方はお試し下さい】

送信処理内で以下のように記述されています。

Thread.Sleep(2000);

1メッセージ送信後、2秒の waitをかけています。

この値を 200(200 ミリ秒)など、小さな値に設定した上で、送信処理と受信処理を同時に実行し

てください。送信されたメッセージが漏れなく受信できていることを確認してください。

Page 51: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 51 -

7. データの入り口をよりセキュアに制御する – IoT Hub

IoT Hub は Event Hubsと同様に、デバイスからのメッセージを受信するためのサービスです。デバ

イスから送信される情報を受信し、処理することができます。

IoT Hub と Event Hubs はよく似たものと考えられます。場合によってはどちらを使用しても良いケ

ースもあるでしょう。しかしながら相違点も多くあります。その相違点に注意してどちらを使用するか

選択してください。以下に IoT Hubと Event Hubsの相違についてまとめます。

IoT Hub Event Hubs

通信パターン 双方向 イングレスのみ

デバイスの状態情報 格納・照会可能

プロトコル

MQTT, MQTT over

WebSockets、AMQP, AMQP

over WebSockets、HTTP/S

AMQP, AMQP over WebSockets,

HTTP/S

セキュリティ デバイスごとの ID管理 イベントハブごとの共有アクセスポリ

シー

操作の監視 デバイス ID、接続等のイベント

情報を提供 集計情報のみ

※詳細な比較については、以下のドキュメントも参照してください。

Azure IoT Hub と Azure Event Hubs の比較

https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-compare-event-hubs

つまり、デバイスごとのきめ細かい管理、あるいは双方向通信などが要求される場合には IoT Hubを

使用する必要があると理解することができます。

例えばアクセスキーの適用範囲は Event Hubs はイベントハブ毎であったのに対し、IoT Hub ではデ

バイス単位で管理することができます。これは、アクセス権を取り消す(revoke)際に、他のデバイスに影

響を及ぼすことなく単一のデバイスに対する revoke操作が可能ということになります。

Page 52: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 52 -

1. まず IoT Hub の作成を行います。[Azure 管理ポータル]の画面左の[新規]→[モノのインターネット

(IoT)]から[IoT Hub]をクリックします。

2. [IoTハブ]ブレードが表示されます。必要なパラメーターを入力します。

Page 53: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 53 -

パラメーター 値

Subscription (サブスクリプション) お使いのサブスクリプションを選択してください

Resource Group (リソースグループ) 既存のものを使用 – AW-RG

Region (場所) 東日本 または 西日本

IoT Hub Name (名前) 任意のわかりやすい名前

入力後、[Next : Size and scale]をクリックします。

サイズとスケールに関する設定画面になります。

パラメーター 値

Pricing and scale tire (価格レベル) F1 : Free tire

Number of F1 Iot Hub units 1 (デフォルト)

※価格レベル「Free」は1サブスクリプションあたり 1 つの IoT Hub のみ使用できます。すでに

「Free」レベルで IoT Hub を使用している場合には、「Free」は選択できません。

Page 54: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 54 -

※【重要】IoT Hub では、「Free」で作成後にから有償の価格レベルに変更することは出来ません。

入力後[Review + create]ボタンをクリックしてください。

ここまでの設定内容が表示されます。内容を確認の上、[Create]ボタンをクリックしてください。

Page 55: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 55 -

3. IoT Hubが作成されます。作成された IoT Hubを開くと、下図のようなブレードが表示されます。

4. ここでは演習で使用している PC を IoT デバイスとして登録します。まず接続のためにデバイスを

登録します。方法としては以下の二通りがあります。

・Azure管理ポータルから登録する

・プログラムを通じて登録する

ここではまず Azure管理ポータルからの登録手順を見ていきます。

Page 56: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 56 -

IoT Hubのブレードより[Device Explorer]を開きます。

Device Explorerのブレードが表示されます。

Page 57: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 57 -

Device Explorer を使用して、Deviceの追加、削除などの管理操作を行うことができます。ここでは

新たに追加します。左上の[+追加]をクリックします。

Page 58: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 58 -

[デバイスの追加]ブレードが表示されます。

ここに以下のパラメーターを設定します。

パラメーター 値

デバイス ID (任意のわかりやすい名前)

認証の種類 対称キー

プライマリキー (入力しない)

セカンダリキー (入力しない)

キーの自動生成 チェック

デバイスを IoT Hubに接続 有効

入力後[保存]をクリックします。

Page 59: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 59 -

Device Explorer 上に追加したデバイスが表示されることを確認してください。

追加されたデバイスをクリックすると、[デバイスの詳細]が表示されます。

これにより、デバイスが追加され、接続に必要なキーおよび接続文字列が取得できるようになりま

した。

Page 60: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 60 -

5. デバイスとしてデータを送信するアプリケーションを作成します。

Visual Studioを起動し、新しいコンソールアプリを作成します。

パラメーター 説明 値

選択するテンプレート 作成するプロジェクトの種類

“Visual C#”-“Windowsクラシック デスク

トップ”から「コンソールアプリ(.NET

Framework)」

名前 プロジェクト名

(任意の名称)

※IoTハブの送信処理であることが判りや

すい名称をお勧めします

場所 ソリューションを作成するフ

ォルダー (任意の場所)

ソリューション名 ソリューション名 <規定値>

フレームワーク 使用する.NET Frameworkの

バージョン .NET Framework 4.6.1

Page 61: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 61 -

6. ソリューションエクスプローラーより、作成したソリューションの上から二つ目の C#のアイコン

があるプロジェクト名を右クリックし、[NuGetパッケージの管理]をクリックします。

Page 62: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 62 -

7. [NuGet パッケージマネージャー ]が表示されます。「参照」を選択したうえで、「検索」

に”microsoft.azure.devices”を入力すると、IoT Hubに関するパッケージが検索されます。

表示された結果から「Microsoft.Azure.Devices.Client」を選択し、[インストール]ボタンをクリック

します。(表示されない場合には、「参照」を選択していることを確認してください。

※表示されるバージョン番号は上図と異なる場合があります。

[変更確認]ダイアログと[ライセンスの同意]ダイアログが表示されますので、それぞれ[OK]と[同意す

る]をクリックしてください。

8. ソリューションエクスプローラーより”Program.cs”を開きます。

まず usingディレクティブを追加します。以下の usingを追加してください。

using Microsoft.Azure.Devices.Client;

using Newtonsoft.Json;

Page 63: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 63 -

9. 次に、接続に使用する DeviceClientクラス、デバイス名と接続文字列を設定します。

Program クラス内のメンバーとして、以下の定数を記述します。

const string DEVICE_NAME = "";

const string CONNECTION_STRING = "";

static DeviceClient client;

上記で作成した定数の内容を設定します。設定する内容は以下の通りです。

パラメーター 設定する値 注意

DEVICE_NAME 任意のわかりやすい名前 Azure管理ポータルで作成したデバイス名

と同じである必要はありません。

CONNECTION_STRING 接続文字列

接続文字列は Azure管理ポータルより、IoT Hubの「Device Explorer」-「デバイスの詳細」から

取得します。

※プライマリキーとセカンダリキーに機能的な差はありません。

Page 64: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 64 -

10. IoT Hubにメッセージを送信するメソッドを作成します。

Programクラス内に以下のメソッドを記述します。

private static async void SendMessageAsync()

{

const double MIN_TEMPERATURE = 0.0;

const double MIN_HUMIDITY = 60.0;

int messageId = 1;

Random rand = new Random();

while (true)

{

double currentTemp = MIN_TEMPERATURE + rand.NextDouble() * 20;

double currentHum = MIN_HUMIDITY + rand.NextDouble() * 20;

var telemetryData = new

{

messageId = messageId++,

deviceId = DEVICE_NAME,

temperature = currentTemp,

humidity = currentHum

};

var messageString = JsonConvert.SerializeObject(telemetryData);

var message = new Message(Encoding.UTF8.GetBytes(messageString));

await client.SendEventAsync(message);

Console.WriteLine($"{DateTime.Now.ToString()} - 送信済み : {messageString}");

await Task.Delay(1000);

}

}

11. 次に、エントリーポイントである Main メソッドからの呼び出しを記述します。Main メソッドを

以下のように記述してください。

static void Main(string[] args)

{

client = DeviceClient.CreateFromConnectionString(CONNECTION_STRING);

SendMessageAsync();

Console.Write("何かキーを押すと止まります");

Console.ReadKey();

}

Page 65: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 65 -

12. これで送信処理の記述は終了です。完成形のソースコードは以下のようになります。(接続文字列

はお持ちのものを設定してください。)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Microsoft.Azure.Devices.Client;

using Newtonsoft.Json;

namespace SendToIotHub

{

class Program

{

const string DEVICE_NAME = "myPC";

const string CONNECTION = "***";

static DeviceClient client;

static void Main(string[] args)

{

client = DeviceClient.CreateFromConnectionString(CONNECTION);

SendMessageAsync();

Console.Write("何かキーを押すと止まります");

Console.ReadKey();

}

private static async void SendMessageAsync()

{

const double MIN_TEMPERATURE = 0.0;

const double MIN_HUMIDITY = 60.0;

int messageId = 1;

Random rand = new Random();

while (true)

{

double currentTemp = MIN_TEMPERATURE + rand.NextDouble() * 20;

double currentHum = MIN_HUMIDITY + rand.NextDouble() * 20;

var telemetryData = new

Page 66: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 66 -

{

messageId = messageId++,

deviceId = DEVICE_NAME,

temperature = currentTemp,

humidity = currentHum

};

var messageString = JsonConvert.SerializeObject(telemetryData);

var message = new Message(Encoding.UTF8.GetBytes(messageString));

await client.SendEventAsync(message);

Console.WriteLine($"{DateTime.Now.ToString()} - 送信済み : {messageString}");

await Task.Delay(1000);

}

}

}

}

実行する([F5]キーを押す)とコンソール上に以下のように表示されます。

※送信処理を止めるには、コンソールウィンドウで何かキーを押してください。

Page 67: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 67 -

13. Azure管理ポータルより、作成した IoT Hubのブレードから「メトリックス」を表示します。

上図のように受信メッセージ数などがメトリックに表示されていることを確認してください。

Page 68: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 68 -

14. 送信処理を記述しましたので、受信処理を記述します。先ほどの送信処理と同様に、新しいコンソ

ールアプリを作成します。Visual Studio を起動し、新しいコンソールアプリを作成します。

パラメーター 説明 値

選択するテンプレート 作成するプロジェクトの種類

“Visual C#”-“Windowsクラシック デスク

トップ”から「コンソールアプリ(.NET

Framework)」

名前 プロジェクト名

(任意の名称)

※IoTハブからの受信処理であることが判

りやすい名称をお勧めします

場所 ソリューションを作成するフ

ォルダー (任意の場所)

ソリューション名 ソリューション名 <規定値>

フレームワーク 使用する.NET Frameworkの

バージョン .NET Framework 4.6.1

15. 先ほどの送信処理と同様に、[NuGetパッケージの管理]より、以下のパッケージを追加します。

・WindowsAzure.ServiceBus

Page 69: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 69 -

※検索ウィンドウで" WindowsAzure.ServiceBus"と全て入力してください。

16. ソリューションエクスプローラーより”Program.cs”を開きます。

まず usingディレクティブを追加します。以下の usingを追加してください。

using Microsoft.ServiceBus.Messaging;

using System.Threading;

17. 次に、接続に使用する DeviceClientクラス、デバイス名と接続文字列を設定します。

Program クラス内のメンバーとして、以下の定数を記述します。

const string CONNECTION_STRING = "";

const string ENDPOINT = "messages/events";

static EventHubClient client;

接続文字列は Azure管理ポータルより、IoT Hubの「共有アクセスポリシー」-「service」から取

得します。

※ここで必要なのは「サービス接続」のアクセス権を持つ接続です。新たに作成しても構いません。

Page 70: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 70 -

※エンドポイント名は”messages/events”とハードコードしています。この名称は上記 Azure管理ポ

ータル上のメニューより「エンドポイント」で確認できます。ここでは変更する必要はありません。

Page 71: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 71 -

18. Program クラス内にメッセージ受信メソッドを ReceiveMessageAsync として追加します。

ReceiveMessageAsyncメソッドを以下のように記述します。

private static async Task ReceiveMessageAsync(string partition, CancellationToken ct)

{

EventHubReceiver receiver = client.GetDefaultConsumerGroup().CreateReceiver(partition);

while (true)

{

if (ct.IsCancellationRequested) { break; }

EventData data = await receiver.ReceiveAsync();

if(data == null) { continue; }

string stringData = Encoding.UTF8.GetString(data.GetBytes());

Console.WriteLine($"受信データ:Patition {partition}¥t{stringData}");

}

Console.WriteLine($"{partition} - 処理キャンセル");

}

※Tips:CreateReceiver の多重定義により、指定日時以降に登録されたイベントのみを読み取るなど

の操作も可能です。

Page 72: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 72 -

19. 次に、エントリーポイントである Main メソッドからの呼び出しを記述します。Main メソッドを

以下のように記述してください。

static void Main(string[] args)

{

Console.WriteLine("受信処理開始:停止には [Ctrl]+[C]を押してください。");

client = EventHubClient.CreateFromConnectionString(

CONNECTION_STRING , ENDPOINT);

string[] partitions = client.GetRuntimeInformation().PartitionIds;

CancellationTokenSource cts = new CancellationTokenSource();

Console.CancelKeyPress += (s, e) =>

{

e.Cancel = true;

cts.Cancel();

Console.WriteLine("キャンセル処理中です");

};

List<Task> tasks = new List<Task>();

foreach (var partition in partitions)

{

tasks.Add(ReceiveMessageAsync(partition, cts.Token));

}

Task.WaitAll(tasks.ToArray());

}

※紙面の都合上一部折り返しております。

Page 73: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 73 -

20. これで送信処理の記述は終了です。完成形のソースコードは以下のようになります。(接続文字列

はお持ちのものを設定してください。)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Microsoft.ServiceBus.Messaging;

using System.Threading;

namespace ReceiveMessage

{

class Program

{

const string CONNECTION_STRING = "***;

const string ENDPOINT = "messages/events";

static EventHubClient client;

static void Main(string[] args)

{

Console.WriteLine("受信処理開始:停止には [Ctrl]+[C]を押してください。");

client = EventHubClient.CreateFromConnectionString(

CONNECTION_STRING,ENDPOINT);

string[] partitions = client.GetRuntimeInformation().PartitionIds;

CancellationTokenSource cts = new CancellationTokenSource();

Console.CancelKeyPress += (s, e) =>

{

e.Cancel = true;

cts.Cancel();

Console.WriteLine("キャンセル処理中です");

};

List<Task> tasks = new List<Task>();

foreach (var partition in partitions)

{

tasks.Add(ReceiveMessageAsync(partition, cts.Token));

Page 74: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 74 -

}

Task.WaitAll(tasks.ToArray());

client.Close();

}

private static async Task ReceiveMessageAsync(string partition, CancellationToken ct)

{

EventHubReceiver receiver =

client.GetDefaultConsumerGroup().CreateReceiver(partition);

while (true)

{

if (ct.IsCancellationRequested) { break; }

EventData data = await receiver.ReceiveAsync();

if(data == null) { continue; }

string stringData = Encoding.UTF8.GetString(data.GetBytes());

Console.WriteLine($"受信データ:Patition {partition}¥t{stringData}");

}

receiver.Close();

Console.WriteLine($"{partition} - 処理キャンセル");

}

}

}

※紙面の都合上一部折り返しております。

実行する([F5]キーを押す)とコンソール上に以下のように表示されます。

※送信処理を止めるには、コンソールウィンドウで[Ctrl]+[C]を押してください。

Page 75: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 75 -

8. イベントを受信する - Function App

Event Hubs、IoT Hubに送信されたイベントを受け取り、Data Factoryで加工する等するために Azure

Storageに保存します。そのための処理を記述する必要がありますが、Function App を使用することで

非常に手軽に記述することができます。

Function App は App Serviceで提供されるアプリケーション実行環境です。いわゆる「サーバーレ

スアーキテクチャ」に基づき「関数」を実行します。その際、展開されるサーバーの管理などは不要と

なります。トリガーにより関数の処理が要求された際に展開され、実行可能になります。処理が終われ

ば自動的にアサインが解除されます。スケーリングも自動的に行われるため、運用などを考慮する必要

がなくなります。

この Function Appを利用して、IoT Hubを監視し、受信したイベントを Azure Storageに保存する処

理を記述していきます。

1. 保存先の Azure Storageを作成します。ここでは Blobに保存します。

Azure管理ポータルから Storage Accountを作成します。[Azure管理ポータル]の画面左の[新規]

→[Storage]→[ストレージアカウント – Blob、File、Table、Queue]をクリックします。

Page 76: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 76 -

2. [ストレージアカウントの作成]ブレードが表示されます。以下のように設定し[作成]をクリックして

ください。

パラメーター 値

名前 (任意のわかりやすい名前)

デプロイモデル Resource Manager

アカウントの種類 StorageV2 (汎用 v2)

パフォーマンス Standard

レプリケーション ローカル冗長ストレージ(LRS)

安全な転送が必須 有効

サブスクリプション お使いのサブスクリプションを選択してください

リソースグループ 既存のものを使用 – AW-RG

場所 作成した IoT Hubと同じ場所

仮想ネットワーク 無効

以上を確認の上「作成」ボタンをクリックしてください。

Page 77: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 77 -

3. ストレージアカウントが作成されます。画面右上の[通知]アイコンをクリックし、一覧に[デプ

ロイメントが成功しました]が表示されれば、作成は終了です。

4. 次に Function Appを作成します。Azure管理ポータルより、Logic Appを新規で作成します。[Azure

管理ポータル]の画面左の[新規]→[Compute]→[Function App]をクリックします。

Page 78: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 78 -

5. 作成パラメーターの入力が求められますので、以下のように入力します。

項目 設定する値

名前 (任意のわかりやすい名前)

リソースグループ 既存のものを使用 – AW-RG

OS Windows

ホスティングプラン 従量課金

場所 作成した IoT Hubと同じ場所

Storage 既存のものを選択

先ほど作成した Storageを選択

Page 79: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 79 -

※Storageについて

この Storageは、Function App の動作ログなどを出力するために使用されますので、必ず必要になり

ます。ここでは IoT Hubから受信したイベントを保存するためにあらかじめ作成しておきましたが、そ

のような目的がないのであれば、[新規作成]を選択しても構いません。[新規作成]を選択した場合、

Storage Account名は自動で付けられます。

作成すると、以下のように Function Appのブレードが表示されます。

ここから新しい関数を作成します。

6. [関数]の横にある[+]をクリックします。

新規作成画面が表示されます。ここでは「カスタム作成」を選択します。

Page 80: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 80 -

テンプレートの一覧が表示されます。言語のプルダウンで[C#]を選択後、[EventHubTrigger – C#]を

選択します。

Page 81: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 81 -

7. 画面の下部に関数名などの入力エリアが表示されます。

必要なパラメーターを入力します。

項目 設定する値

関数名 (任意のわかりやすい名前)

イベント ハブ接続 「新規」を選択します

イベント ハブ コンシューマー グループ (デフォルトのまま)

イベント ハブ名 (デフォルトのまま)

イベント ハブ接続で「新規」を選択すると、以下のようにダイアログが表示されます。

表示された中から[IoT Hub]を選択し、[IoT Hub]のプルダウンから使用する IoT Hub を選択します。

選択後[作成]をクリックします。

Page 82: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 82 -

8. 次に、Functionに出力先の Storageを設定します。

画面左側の関数名の部分を展開し「統合」をクリックします。

トリガーの入出力の設定画面が表示されます。画面右上の「出力」にある「+新しい出力」をクリ

ックします。

出力先の選択肢が表示されます。ここでは[Azure BLOB ストレージ]を選択し、[選択]をクリックし

ます。

Page 83: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 83 -

出力先ストレージのパラメーター設定が表示されます。

以下のように設定します。

項目 設定する値

BLOBパラメーター名 (デフォルトのまま)

パス (デフォルトのまま)

ストレージアカウント接続 プルダウンから「WEBSITE_CONTENT….」を選択

※BLOBパラメーター名はこの後の工程で使用しますので、控えておいてください。

設定後[保存]をクリックしてください。

Page 84: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 84 -

9. 処理本体を記述します。メニューから関数をクリックします。

run.csxの内容が表示されます。以下のように記述してください。

using System;

public static void Run(string myEventHubMessage, TraceWriter log, out string outputBlob)

{

log.Info($"C# Event Hub trigger function processed a message: {myEventHubMessage}");

outputBlob = myEventHubMessage;

}

※run.csx全体を記述しています。記述するべき箇所は、Runメソッド内の以下一行となります。

outputBlob = myEventHubMessage;

Runメソッドの第三引数の変数名は、先ほどの項番 8「Functionに出力先の Storageを設定します。」

で設定した[BLOBパラメーター名]になります。”out”修飾がついているところに注意してください。

コンパイルエラーがある場合、保存後に「ログ」にコンパイルエラーが表示されます。

※赤字で強調されるわけではありませんので注意してください。

Page 85: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 85 -

コンパイルエラーが無い場合には、以下のように表示されます。

コンパイルエラーが無い事を確認した後、「実行」ボタンをクリックして動作を確認します。

例えば上図のように件数が表示され、正常終了することを確認します。また、同様にストレージに

正しく出力されていることを確認してください。

確認後、メニューから「モニター」を選択します。

実行状況が表示されますので確認してください。

Page 86: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 86 -

10. 先ほど(65ページ)作成した IoT Hubへの送信プログラムを実行します。送信後、Function App が

実行され、Blobにデータが順次格納されていることを確認してください。ここでは、Visual Studio

– Cloud Explorer から確認します。

Cloud Explorer は Visual Studio のメニューより[表示(V)]-[Cloud Explorer]で表示されます。

[アカウント管理]でサインイン後、対象の Blob コンテナー をダブルクリックすると内容が表示さ

れます。

Page 87: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 87 -

Visual Studio 上に Blob コンテナーの内容が表示されます。更新ボタンをクリックし、内容を確認し

てください。

Page 88: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 88 -

9. データの流れを制御する – Data Factory

Data Factoryはデータの移動と変換を制御して自動化するサービスです。データ主導のワークフロー

(パイプライン)を作成し、実行します。

この Data Factoryは様々なデータソース、Azure上に限らず、オンプレミスのデータであっても、取

り込み、加工し、他のデータストアに流し込むことができます。例えば、IoT Hubから受信して Storage

に保存されたデータと、オンプレミス上の SQL Server 上のデータをリンクし、加工し、レポート用の

Cosmos DB に保存する等の一連の処理を自動化することができます。その中で、後述する Stream

Analyticsや Azure Machine Learningの処理を組み込むことができます。

Data Factoryは定期的な処理、例えば時間単位、日単位、週単位、月単位での処理を行うことができ

ますので、例えば日ごとの集計レポートなどの作成を自動化させることができます。(これまで見てき

ました Event Hubs、IoT Hubなどとは異なり、イベントベースではない点に注意してください。)

Data Factoryで使用されるコンポーネントについて説明します。

⚫ アクティビティ

アクティビティはデータに対して行う処理を定義します。

「コピーアクティビティ」はデータのコピーを行います。

「コピーアクティビティ」は「ソース(取得元)」と「シンク(出力先)」を持ち、任意のソースから

取得したデータを任意のシンクにコピーすることができます。

これに対して「データ変換アクティビティ」は Hive、Azure Machine Learning等を呼び出して処理を

行うことができます。

⚫ データセット

データセットはデータストア内のデータ構造を表します。各アクティビティは、0個以上の入力デー

タセットと 1つ以上の出力データセットを持ちます。

⚫ リンクされたサービス

Data Factoryがリソースにアクセスするための情報が「リンクされたサービス」です。上記データセ

ットはデータの構造を表しますが、「リンクされたサービス」はそのデータがどこにあるのかを表しま

す。

⚫ パイプライン

パイプラインは一連の処理をグループ化したものです。Data Factory内には 1つ以上のパイプライン

が含まれ、パイプラインには 1つ以上のアクティビティが含まれます。

定義のデプロイ、および処理タイミングなどは、パイプライン単位で設定します。

つまり、まとめると以下のようになります。

どこからデータを持ってくるか、どこに出力するのか=「リンクされたサービス」

Page 89: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 89 -

どのようなデータ形式なのか=「データセット」

なにをするのか=「アクティビティ」

全体構成=「パイプライン」

これを利用して、データの連続的な取得・加工・発行を定義していきます。

実際に、先ほど作成した Blobからデータを取得する Data Factoryを作成します。

Page 90: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 90 -

1. 事前準備として、データを取得・保存する Storage を用意します。この Storage は既存のものでも

新規で作成しても構いません。どちらの場合でも接続文字列が必要となります。Azure 管理ポータ

ルから対象の Storageを開き[アクセスキー]から[接続文字列]を取得してください。

取得した―接続文字列はメモ帳などに控えておいてください。

※Key1と Key2に機能的な差はありません。どちらを使用しても構いません。

2. Azure管理ポータルから Data Factoryを作成します。[Azure管理ポータル]の画面左の[新規]→

[Data + Analytics]→[Data Factory]をクリックします。

Page 91: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 91 -

Data Factory 作成のブレードが表示されますので、[作成]をクリックします。

Page 92: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 92 -

3. [新しいデータ ファクトリ]のブレードが表示されます。必要なパラメーターを入力します。

パラメーター 値

名前 (任意のわかりやすい名前)

サブスクリプション お使いのサブスクリプションを選択してください

リソースグループ 既存のものを使用 – AW-RG

バージョン V1

場所 任意の場所

ダッシュボードにピン留めする チェック

※執筆時点では Data Factoryは日本リージョンでは未提供となっております。

入力後[作成]ボタンをクリックしてください。

Page 93: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 93 -

4. Data Factoryが作成されます。作成された Data Factoryを開くと、下図のようなブレードが表示さ

れます。

ここからリンクされたサービス、データセット、アクティビティ、パイプラインを作成します。

※単にデータコピーだけを行うでしたら、「データをコピー(プレビュー)」でも作成可能ですが、

本自習書では「作成およびデプロイ」からの手順で行います。

5. [作成およびデプロイ]をクリックします。

Data Factory作成ブレードが表示されます。

Page 94: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 94 -

メニューに「新しいデータストア」のみ表示されています。そのほかのメニュー項目は「…項目表示」

をクリックすると表示されます。

6. まずリンクされたサービスを作成します。メニュー上の[新しいデータストア]をクリックします。

接続先が一覧で表示されます。ここでは[Azure Storage]を選択します。

右側に下図のようなブレードが表示されます。接続情報が JSON形式で表示されます。

Page 95: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 95 -

connectionString プロパティを先ほど控えておいた接続文字列に変更し[デプロイ]をクリックしま

す。

「リンクされたサービス」に新しく追加されます。接続文字列がフォーマットとして正しくない場

合、エラー表示されます。

※上図ブレード中の不要な項目は、右クリックで削除できます。

Page 96: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 96 -

7. 次にデータセットを追加します。「…項目表示」から「新しいデータセット」をクリックし、「Azure

BLOBストレージ」を選択します。

先ほどと同様に JSONが表示されます。以下のように設定します。

{

"name": "AzureBlobDatasetTemplate",

"properties": {

"structure": [

{

"name": "data",

"type": "String"

}

],

"published": false,

"type": "AzureBlob",

"linkedServiceName": "AzureStorageLInkedService",

"typeProperties": {

"folderPath": "outdata",

"format": {

"type": "JsonFormat"

}

},

"availability": {

"frequency": "Hour",

"interval": 1

}

}

}

入力後、「デプロイ」をクリックします。

Page 97: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 97 -

8. 次に出力先を指定します。先ほど作成したデータセットを選択し、「複製」をクリックします。

name の値と folderPath の値を変更し、「デプロイ」をクリックします。たとえば下のようなコー

ドになります。

{

"name": "AzureBlobDatasetTemplate2",

"properties": {

"structure": [

{

"name": "data",

"type": "String"

}

],

"published": false,

"type": "AzureBlob",

"linkedServiceName": "AzureStorageLinkedService",

"typeProperties": {

"folderPath": "processed",

"format": {

"type": "JsonFormat"

}

},

"availability": {

"frequency": "Hour",

"interval": 1

}

}

}

Page 98: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 98 -

9. これまでと同様に、新しいパイプラインを作成します。「…項目表示」から「新しいパイプライン」

をクリックします。

ここではコピーをしたいので、「アクティビティの追加」から「コピー アクティビティ」を選択し

ます。

「コピー アクティビティ」を追加すると、以下のように”activities”に項目が追加されます。

Page 99: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 99 -

Page 100: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 100 -

このパイプラインの内容を以下のように変更します。

※”activities”に項目が追加される際、上図のように"activities"が選択された状態で挿入されます。こ

こでは挿入された部分のみではなく、全部を以下のように変更します。

{

"name": "PipelineTemplate",

"properties": {

"description": "copy",

"activities": [

{

"type": "Copy",

"typeProperties": {

"source": {

"type": "BlobSource"

},

"sink": {

"type": "BlobSink",

"writeBatchSize": 0,

"writeBatchTimeout": "00:00:00"

}

},

"inputs": [

{

"name": "AzureBlobDatasetTemplate"

}

],

"outputs": [

{

"name": "AzureBlobDatasetTemplate2"

}

],

"policy": {

"timeout": "1.00:00:00",

"concurrency": 1,

"retry": 3

},

"scheduler": {

"frequency": "Hour",

"interval": 1

},

"name": "CopyActivityTemplate"

Page 101: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 101 -

}

],

"start": "2017-08-30T00:00:00Z",

"end": "2017-08-31T00:00:00Z"

}

}

注意すべき項目は以下の通りです。

パラメーター 値

description 任意の説明文字列

inputs.name 先ほど作成した入力データセットの名前

outputs.name 先ほど作成した出力データセットの名前

start 任意の未来日付時刻(UTC)

end start以降の日付時刻(UTC)

入力後、「デプロイ」をクリックします。

以上でリンクされたサービス、データセット、パイプラインの作成は終了です。

Page 102: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 102 -

10. データファクトリのブレードから「ダイアグラム」をクリックします。

作成したパイプラインの構成が図で表示されますので確認してください。

Page 103: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 103 -

10. 流れているデータを分析する – Stream Analytics

Stream Analytics はストリーミングデータを対象とした分析を提供します。

例えば、SQL Server、SQL Database に対してクエリを行うことは難しくありません。しかしながら、

Event Hubs, IoT Hubなどからリアルタイムに送信されるイベントに対してクエリを行うためには、一旦

SQL Databaseなどに格納してからクエリを行う必要がありました。

この Stream Analyticsは Event Hubs、IoT Hubからのイベントに対するクエリを提供します。実行し

たクエリ結果を BLOB, SQL Database Cosmos DBに保存するだけではなく、Event Hubsに送信すること

もできるので、リアルタイムな異常検出などに使用することも可能です。

Stream Analytic のクエリは SQL によく似たクエリ言語が提供されています。そのため、SQLに慣れ

た方でしたら簡単に習得することが可能です。必要に応じてユーザー定義関数を作成することもできま

すので、柔軟な処理が可能となります。この機構を利用して、Stream Analytics 内で Azure Machine

Learning を呼び出すことも可能です。

このクエリの中で注意すべきなのが「ウィンドウ関数」です。ウィンドウ関数は、受信したデータを

どのようなタイムスケールで集計するかを規定します。このウィンドウは指定した期間が終了した(=

ウィンドウが終了した)時に結果を出力します。

Page 104: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 104 -

ウィンドウ関数は以下の 3種類が提供されています。

⚫ タンブリング ウィンドウ (TumblingWindow)

データストリームを個別の時間で分割します。例えば 10秒ごとのスケールで分割するケースなどが

これにあたります。

⚫ ホッピング ウィンドウ (HoppingWindow)

タンブリング ウィンドウのように時間で分割しますが、タンブリング ウィンドウと異なる点はウ

ィンドウが重複してもよいという点になります。そのため、一つのイベントが複数のウィンドウに含ま

れる可能性があります。

⚫ スライディング ウィンドウ (SlidingWindow)

タンブリング ウィンドウ、ホッピング ウィンドウとは性質が異なります。スライディング ウィン

ドウはウィンドウ内に必ず1つ以上のイベントが含まれます。下図の例では、10 秒のスライディング

ウィンドウを使用しています。各イベント発生時から 10 秒間のイベントがウィンドウに含まれます。

Page 105: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 105 -

しかしながら、イベントが含まれないウィンドウは返却されません。

上記 3つのウィンドウ関数ですが、図中のクエリサンプルで Group byを使用している点に注意して

ください。ウィンドウ関数は Group by で指定する必要があります。

Page 106: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 106 -

1. 事前準備として、IoT Hubのコンシューマーグループ(消費者グループ)を追加します。Event Hubs、

IoT Hubを Stream Analyticsの入力として使用する際には、Stream Analytics毎にコンシューマーグ

ループを指定することがベストプラクティスとして推奨されます。

Azure管理ポータルから作成済みの IoT Hubを開き、メニューから[エンドポイント]を選択します。

表示されたエンドポイントから[Events]を選択してください。

Page 107: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 107 -

選択後、以下のように[プロパティ]ブレードが表示されます。

[消費者グループ]の入力エリアに”stream”と入力し、[保存]をクリックしてください。

これにより、IoT Hubにコンシューマーグループ”stream”が追加されます。

この追加されたコンシューマーグループに対して、Stream Analyticsから接続します。

Page 108: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 108 -

2. Stream Analyticsの作成を行います。[Azure管理ポータル]の画面左の[新規]→[モノのインターネッ

ト(IoT)]から[Stream Analytics job]をクリックします。

Stream Analytics job 作成のブレードが表示されますので[作成]をクリックします。

Page 109: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 109 -

3. [新しい Stream Analytics job]ブレードが表示されます。必要なパラメーターを入力します。

パラメーター 値

ジョブ名 (任意のわかりやすい名前)

サブスクリプション お使いのサブスクリプションを選択してください

リソースグループ 既存のものを使用 – AW-RG

場所 東日本 または 西日本

ダッシュボードにピン留めする チェック

ホスティング環境 クラウド

ストリーミングユニット 1

入力後[作成]ボタンをクリックしてください。

Page 110: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 110 -

4. Stream Analytics job が作成されます。作成された Stream Analytics jobを開くと、下図のようなブ

レードが表示されます。

5. まず入力ソースを設定します。「入力」をクリックします。

Page 111: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 111 -

入力ソースの一覧が表示されます。「+ストリーム入力の追加」をクリックします。

以下のように入力ストリームの選択が求められます。ここでは[IoT Hub]を選択します。

下図のように[IoT Hub 新規入力]のブレードが表示されます。

Page 112: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 112 -

パラメーター 値

入力のエイリアス (任意のわかりやすい名前)

「サブスクリプションから IoT Hubを選択する」をチェック

サブスクリプション (お使いのサブスクリプション)

IoT Hub (先ほど作成した IoT Hub)

エンドポイント メッセージング

共有アクセスポリシー名 (表示されているものから選択してください)

コンシューマーグループ stream (先ほど作成した IoT Hubのコンシューマーグループ)

イベントシリアル化形式 JSON

エンコード UTF-8

イベントの圧縮タイプ なし

※イベントハブの場合でも IoT Hubの場合でも、同一サブスクリプション内であれば自動的に認証

情報、エンドポイント情報などを取得できるのがポイントです。

「入力のエイリアス」に適切な名称を設定し、使用する IoT Hub を確認後[作成]をクリックしてく

ださい。

Page 113: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 113 -

6. 同様に[出力]の設定を行います。[ジョブ トポロジ]の[出力]から「+追加」とすると、先ほどと同様、

プルダウンで出力先を選択します。ここでは[Blobストレージ]を選択します。

Page 114: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 114 -

[Blobストレージ]を選択すると、以下のように[Blobストレージ 新規出力]ブレードが表示されま

す。

パラメーター 値

出力エイリアス (任意のわかりやすい名前)

「サブスクリプションから Blob Storage を選択す

る」をチェック

サブスクリプション (お使いのサブスクリプション)

ストレージアカウント 任意のストレージアカウント

コンテナー 新しいコンテナーを作成する

コンテナー stream

パスパターン logs/{date}/{time}

イベントシリアル化形式 JSON

エンコード UTF-8

フォーマット 改行区切り

必要なパラメーターを入力し、[作成]をクリックします。

Page 115: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 115 -

7. [クエリ]を作成します。表示されている[クエリ]の上にある[クエリの編集]をクリックしてください。

クエリの編集ブレードが表示されます。

入力エリアに以下のように記述します。

SELECT

System.Timestamp time,deviceId, count(*)

INTO

streamout

FROM

testIoTHub

GROUP BY deviceId, TumblingWindow(second,2)

※2 秒ごとに IoT Hub の入力を Device ID ごとにグループ化して取得し、タイムスタンプと Device

ID、および Device IDごとのイベント数を Blobに jsonとして出力します。

記述後、保存してください。

Page 116: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 116 -

8. Stream Analytics の[概要]ブレードを表示し、[開始]をクリックしてください。これにより Stream

Analyticsの動作が開始されます。

動作開始後、先ほど(65 ページ)作成した IoT Hub へのデータ投入アプリケーションを動作させて

ください。

そののち、Visual Studio あるいは Azure Storage Explorerなどで出力先の Blobを確認してください。

Blobの確認方法は 86ページを参照してください。

生成された Blobをダウンロードしてメモ帳などで開くと、下図のように表示されます。

Page 117: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 117 -

11. 分析と予測を行う – Azure Machine Learning

蓄積されたデータを基に分析と予測を行うために、Azure Machine Learning を利用できます。Azure

Machine Learningを利用することにより、特別なハードウェア無しでも機械学習モデルを構築し、利用

することが可能になります。

機械学習モデルの作成には”ML Studio”と呼ばれるWeb サイトを使用します。つまり、全てブラウザ

上で作業を行うことが可能になります。

「モジュール」と呼ばれる部品をドラッグ&ドロップで配置・接続することで、学習モデルを構築し

ていきます。機械学習アルゴリズムも提供されていますので、自力で機械学習アルゴリズムを構築する

必要はありません。

Page 118: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 118 -

構築した機械学習モデルはWeb Serviceとして Publishすることができるので、デスクトップアプリ

ケーション、あるいは Azure上の各アプリケーション、サービスなどから呼び出すことができます。例

えば Stream Analyticsから「関数」という形で呼び出すことも可能です。下図は Stream Analyticsの[新

規関数追加]ブレードです。

機械学習モデルのトレーニングに使用するデータセットは、Azure Storage、SQL Database などから

取得できるので、これまでの演習で Azure Storage などに蓄積されたデータを基に、独自の予測モデル

を構築することができます。

⚫ 機械学習アルゴリズムについて

機械学習のアルゴリズムが提供されていますが、どれを使用すべきかという点で悩む方が多いと思

われます。アルゴリズムの選択については、以下ドキュメントにて解説されていますので、合わせてお

読みいただくことをお勧めいたします。

Microsoft Azure Machine Learningのアルゴリズムの選択方法

https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-algorithm-choice

また、機械学習・データサイエンスにお馴染みがない方は以下のドキュメントも参考にしてください。

初心者向けデータサイエンスビデオ 1:5つの質問

https://docs.microsoft.com/ja-jp/azure/machine-learning/machine-learning-data-science-for-

beginners-the-5-questions-data-science-answers

ここでは、ML Studioで用意されているサンプルデータを使用して、機械学習モデルの作成からWeb

Serviceの Publishまでを実習します。

Page 119: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 119 -

1. ブラウザからML Studio にアクセスします。

https://studio.azureml.net/

[Sign Up]をクリックすると、以下のようにメニューが表示されます。

Azure Machine Learningは Azureサブスクリプション無しでも利用することができます。

それぞれの違いを以下にまとめます。

ポイント

Guest Workspace 8時間のお試し版。Web Service への Publishはできません。

お試し期間経過後消去されます。

Free Workspace 無料でお使いいただけます。10GB までのストレージが利用でき

ます。マイクロソフトアカウントのみで利用可能です

Standard Workspace Azure サブスクリプションが必要です。ストレージは Azure サ

Page 120: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 120 -

ブスクリプションの Storageを使用します。

より高いパフォーマンスを提供し、SLAの対象となります。

この演習では Freeを使用します。実運用の場合、前述の Stream Analytics、Data Factoryと連携す

る場合などは、Standard Workspaceを使用してください。

したがって、ここでは「Free Workspace」の[Sign In]をクリックしてください。

サインイン画面が表示されます。お持ちのマイクロソフトアカウントでサインインしてください。

※すでにマイクロソフトアカウントでサインイン済みの場合には、サインイン画面が表示されない

場合があります。

2. サインインすると下図のようにML Studioの experimentsが表示されます。

この Experimentsが、機械学習モデルになります。この Experimentsを作成し、Web Serviceとして

Publishしていきます。

Page 121: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 121 -

上図の例では複数の Experimentsが表示されていますが、初めてサインインする場合には、下図のよ

うに一覧には何も表示されません。

3. これより新しい Experiment を作成します。画面左下の[+NEW]をクリックしてください。

Page 122: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 122 -

以下のように作成メニューが表示されます。ここでは[Blank Experiment]をクリックしてください。

以下のように新しい Experimentの作成画面が表示されます。

中央の灰色部分を「キャンバス」と言います。ここに左側にある「パレット」からモジュールをド

ラッグ&ドロップで配置します。

Page 123: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 123 -

4. まず、Experimentに名前を付けます。

キャンバス左上の”Experiment created on …”と記述されている部分が Experiment の名称になりま

す。この部分を編集することでタイトルをつけることができます。

このタイトルは一意なものである必要はありませんが、先ほどの一覧に表示される名称になります

ので、分かりやすい名称を付けておくことをお勧めします。

5. 使用するサンプルデータセットを配置します。

パレットの”Saved Dataset”を展開すると”Samples”が表示されます。この”Samples”をさらに展開す

ると、用意されているサンプルデータセットが表示されます。

表示されているサンプルデータセットから[Adult Census Income Binary Classification dataset]を選

択します。

※Tips :

パレット横のスクロールバー付近をクリックしてパレットの横幅を調整することができます。

Page 124: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 124 -

選択した[Adult Census Income Binary Classification dataset]をドラッグ&ドロップでキャンバスに

配置してください。

配置されたデータセットの下に①と表示されます。これは出力ポイントを表します。出力ポイント

をクリックすると以下のようにメニューが表示されます。

Page 125: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 125 -

メニューから[Visualize]をクリックすることで内容を確認することができます。

この演習では、このサンプルデータを使用して、最終カラムである”income”の値を予測させま

す。”income”は”<=50K”(5万以上) と”>50K”(5万未満)の二つのデータで構成されています。

この Visualize ウィンドウで内容を確認しましたが、各列にタイトルがついている点に注意してく

ださい。これは元データにすでにタイトル行が存在しているためです。これにより、この後の工程

では列番号ではなく列名で参照することができます。

例えば独自のデータセットを使用する場合、タイトル行を用意しておくことでML Studio上での作

業が容易になります。

Visualizeウィンドウは右上の[x]をクリックするか[ESC]キーで閉じることができます。

Page 126: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 126 -

6. データを学習用と評価用に分割します。これには”Split Data”モジュールを使用します。

パレットの上部に検索ウィンドウがあります。ここに”split”と入力することで絞り込みされます。

検索された Split Dataモジュールを先ほどと同様、キャンバスにドラッグ&ドロップで配置します。

配置したモジュールの上に〇がついています。これはモジュールの入力ポイントを表します。

したがって、この Split Dataは、入力が1つ、出力が2つであることがわかります。ここでは 1つ

目の出力ポイントを学習用に、2つ目の出力ポイントを評価用に使用します。

また、Split Data モジュールに赤いマーカーが表示されています。これはエラーがあることを表し

ています。マウスカーソルを合わせることで、エラー内容を確認することができます。

Page 127: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 127 -

“Input port Dataset is unconnected”と表示されています。つまり、Split Dataの入力が未定義である

ということです。ここでは、先ほど配置したデータセットを入力にします。

“Adult Census Income Binary…”データセットの出力ポイントから Split Dataの入力ポイントにドラ

ッグすることで接続することができます。

Split Data の入力ポイントが緑になっています。これは、型が合っているので接続可能であること

を示しています。赤になっている場合には接続できません。

正しく接続されると下図のように表示されます。

次に、Split Data のプロパティを設定します。Split Data を選択した状態で、キャンバス右の

[Properties]を確認してください。

この Split Dataは入力されたデータを 2つの出力ポートに分割します。ここでは分割割合を指定し

Page 128: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 128 -

ます。” Fraction of rows in the first output dataset” が「1つ目の(左側の)出力ポイントから出力

されるデータの割合」になります。ここでは 0.8と設定します。

これにより、1つ目の出力ポイントから 80%、2つ目の出力ポイントから 20%のデータが出力され

ることになります。

7. 学習モデルのトレーニングを行う Train Model モジュールを配置します。先程の Split Dataと同様

に、検索ボックスに「train mo」を入力して絞り込みます。絞り込まれた結果から”Train Model”モ

ジュールを選択し、Split Dataモジュールの下に配置します。

Train Model モジュールには入力ポイントが 2つあります。Split Dataで分割した学習用データはこ

の 2つの入力ポイントのどちらに接続すべきでしょうか?実際に Split Dataの左出力ポイントから

ドラッグすると、下図のように表示されます。

Train Modelの左入力ポイントは赤くなっているため、接続できないことが判ります。従って、Train

Modelの右入力ポイントに接続します。

Train Model の左入力ポイントに接続するものは何でしょう?マウスカーソルを合わせると下図の

ように表示されます。

Page 129: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 129 -

“Untrained model (ILearnerDotNet)”と記述されています。つまり、トレーニング前のモデルを接続

すれば良いことが判ります。

この学習モデルの目的は”income”の予測であり、結果は 50Kを超えるか超えないかの 2つになりま

す。つまり、2分類を行うモデルを使用することになります。

ここではまず”Two-Class Boosted Decision Tree”を使用することにします。パレットより” Two-Class

Boosted Decision Tree”を選択肢、キャンバスに配置します。配置した” Two-Class Boosted Decision

Tree”の出力ポイントを Train Modelの左入力ポイントに接続します。

次に、Train Model に対して、どのカラムが学習の対象であるのかを設定します。画面右側の

Propertiesを使用します。Train Modelを選択肢、右側の Propertiesを確認してください。

”Launch column selector”をクリックします。ダイアログが表示されますので、”With Rules”を選択

し、”Include” “column names” を選択します。右側にカラム名の一覧が表示されますので”income”

を選択してください。選択後、ダイアログ右下のチェックをクリックしてダイアログを閉じます。

Page 130: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 130 -

設定後の Propertiesには下図のように表示されます。

8. トレーニングされたモデルをスコアリングします。パレットより”Score Model”を配置します。

Score Modelの左入力ポイントに Train Modelの出力を接続します。右入力ポイントには、Split Data

の左出力ポイント、つまり評価用データを接続します。

Page 131: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 131 -

9. スコアリングしたモデルを評価します。パレットより Evaluate Modelを選択肢、キャンバスに配置

します。

10. これで作成としては終了です。下部のメニューより”RUN”をクリックします。

各モジュールに緑のチェックが順次表示されます。この緑のチェックが「実行済み」を表します。

全てのモジュールにチェックが入れば、実行終了です。また、キャンバス右上にも”Finished running”

と表示されます。

では実行結果を見てみましょう。Evaluate Modelの出力ポイントをクリックし、Visualizeを選択し

ます。下図のように評価結果が表示されます。

Page 132: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 132 -

ここに表示されている評価結果を基に、学習モデルの精度を評価・判定していきます。

11. 次に、作成した学習モデルを Web Service に変換します。画面下部のメニューより”SET UP WEB

SERVICE”から”Predictive Web Service [Recommended]”をクリックします。

Page 133: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 133 -

自動的にモデルが変形され、予測用の実験が作成されます。

この時、キャンバス上に”Training experiment”と”Predictive experiment”の二つのタブが表示されて

いる点に注意してください。

先程まで作成していたものが”Training experiment”になります。Web Service として使用するの

が”Predictive experiment”になります。

この Predictive experiment を一度 RUNさせてください。RUN終了後、Web Service にデプロイ出

来るようになります。

12. RUN終了後、メニューより”DEPLOY WEB SERVICE”をクリックします。

Web Service の詳細が表示されます。

Page 134: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 134 -

REQUEST/RESPONSEのリンクをクリックすることにより、ヘルプページが表示されます。

エンドポイント、認証キー、およびサンプルコードが表示されていますので、Web サービスへのア

クセスにはここを参照すれば良いことが判ります。

また、先程のWeb Serviceの一覧ページに Excelのアイコンが表示されています。

これをクリックすることにより Web サービスへの呼び出しを含む Excel ファイルがダウンロードさ

れます。これを使用して、機械学習モデルを利用することも可能です。

Page 135: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 135 -

12. 可視化する – Power BI

Power BI を使用して、格納されたデータのレポートを作成します。あらかじめ Power BI へのサイン

アップを済ませておいてください。

ここでは以下のようなレポートを作成します。

送信された気温を棒グラフに表示し、データ一覧と平均気温・平均湿度を表示します。

Stream Analyticsから Azure Storage Tableに投入し、その内容をグラフ化します。

事前に先程作成した Storageのエンドポイントとアクセスキーを予め取得しておいてください。

1. まず準備として、Stream Analyticsからの出力に Storageを追加します。

Azure管理ポータルから先程作成した Stream Analyticsを開き、実行中であれば停止してください。

※入出力、クエリは、実行中には変更できません。そのため停止させます。

Page 136: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 136 -

2. [ジョブ トポロジ]の[出力]から出力先を追加します。

表示された[出力]ブレード左上の[+追加]をクリックします。

下図のように[新規出力]ブレードが表示されます。[シンク]は[テーブルストレージ]を選択します。

Page 137: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 137 -

パラメーター 値

入力エイリアス powerbi

シンク テーブルストレージ

インポートオプション 現在のサブスクリプションのテーブルストレージを使う

ストレージアカウント (先ほど作成したストレージアカウント)

テーブル名 (任意の判りやすい名前)

パーティーションキー Time

行キー deviceId

バッチサイズ 1

設定後[作成]をクリックしてください。

Page 138: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 138 -

3. 次にクエリの編集を行います。先程の[ジョブ トポロジ]より[クエリ]を選択します。

クエリ編集のブレードが表示されますので、クエリを以下のように変更します。

SELECT

System.Timestamp time,deviceId, count(*)

INTO

streamout

FROM

testIoTHub

GROUP BY deviceId, TumblingWindow(second,2);

SELECT

System.Timestamp time,deviceId, temperature, humidity

INTO

powerbi

FROM

testIoTHub;

※既に記述されていたクエリの終端にセミコロン(;)を追加している点に注意してください。

変更後[保存]してください。

保存完了後、再度 Stream Analyticsを開始して、先程(65ページ)作成した IoT Hub へのデータ投

入アプリケーションを動作させてください。Stream Analytics が正常に起動し、しばらくしてから

指定した Storage テーブルにデータが出力されていることを確認してください。

Page 139: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 139 -

4. ここから Power BI Desktop を使用してレポートを作成していきます。Power BI Desktop を起動

してください。起動すると以下のように表示されます。

ここで[サインイン]をクリックします。

ここで事前に作成しておいたアカウントでサインインします。アカウントをまだ作成していない場

合には、サインインボタン下のリンクから作成することができます。

Page 140: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 140 -

サインイン後、下図のように表示されます。右上にお名前が出ていることを確認してください。

※お名前の部分をクリックするとアカウント設定、アカウント切り替えなどのメニューが表示され

ます。

Page 141: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 141 -

5. レポートで使用するデータソースの設定を行います。[ホーム]→[データを取得]→[さらに表示

…]をクリックします。

データの取得元一覧が表示されます。ここでは[Azure]を選択して絞り込みます。

Page 142: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 142 -

6. [Azure]をクリック後、使用できる Azure のサービス一覧が表示されます。ここでは[Microsoft

Azure テーブル ストレージ]を選択し[接続]をクリックしてください。

ストレージアカウント名または URL の入力が求められます。先程控えておいたストレージアカウン

ト名を入力し、[OK]をクリックしてください。

アクセス方法の設定が求められます。先ほど控えておいたアクセスキーを設定し、[接続]をクリッ

クしてください。

Page 143: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 143 -

※接続情報は記録されます。同じデータソースを再度使用する際には再度キーを入力する必要はあ

りません。

以下のようにテーブル一覧が表示されます。使用するテーブルをチェックします。データを確認後

[編集]をクリックします。

Page 144: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 144 -

別ウィンドウで「クエリ エディター」が表示されます。

“Content”の列が全て”Record”となっていますので、これを展開します。”Content”列の見出し右側に

「展開コントロール」が表示されています(「↰↱」と表示されているアイコンです)。これをクリッ

クするとフィールドの一覧が表示されます。ここで必要なフィールドを選択して[OK]をクリックし

ます。

内容を確認し、[OK]をクリックしてください。これにより必要なカラムが追加されました。

Page 145: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 145 -

湿度(humidity)と気温(temperature)のカラムヘッダに”ABC 123”と表示されています。これは文字列

として認識されたということを表しています。これを数値型に変更します。”ABC 123”と表示されて

いる箇所をクリックしてください。

[10進数]を選択します。これにより、humidity列は数値型として認識されます。

同様にして、time列を[日付/時刻]に変更してください。

設定後、[ホーム]→[閉じて適用]をクリックします。

右側「フィールド」にクエリ エディタで指定された各列が表示されていることを確認してくださ

い。

Page 146: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 146 -

7. まず棒グラフを作成します。「視覚化」から棒グラフを選択します。

画面上にグラフのイメージが表示され、「視覚化」の下側にカラム設定が表示されます。

Page 147: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 147 -

以下のように設定します。

パラメーター 値

軸 Content.time

凡例 Content.deviceId

値 Content. temperature

上図のように表示されますが、日単位のグラフでは見にくいのでこれを調整します。”Content.time”

の横に▼が表示されています。これをクリックし、”Content.time”に変更します。

これにより、表示されているグラフは以下のようになります。

※幅・高さなどは適宜調整してください。

Page 148: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 148 -

8. マトリックスを作成します。先程作成したグラフが選択されていないことを確認後、「視覚化」

からマトリックスを選択します。

※グラフが選択状態ですとグラフが表示変換されます。

行と列、値の設定が「視覚化」の下に表示されます。以下のように設定します。

パラメーター 値

Content.time

先程と同様に、「日付の階層」ではなく Content.time

としてください。

列 Content.deviceId

値 Content.humidityの平均

Content. temperatureの平均

※▼をクリックすることで、値の種類(合計、平均、カウントなど)を変更できます。

Page 149: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 149 -

これにより、以下のようなマトリックスが作成されます。

9. 平均気温、平均湿度の表示を追加します。先程のマトリックスと同様に、「視覚化」より「カー

ド」を選択します。

「フィールド」に Content.humidityを設定し、値の種類を「平均」に変更します。

Page 150: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 150 -

これにより、平均湿度のカードが以下のように表示されます。

Content. temperatureについても同様にカードを追加します。

ここまでの操作により、レポート全体は以下のように表示されます。

Page 151: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 151 -

10. ここまでできたところで、Power BI に発行します。メニューの[ホーム]から「発行」をクリッ

クしてください。

これまで保存していない場合には、保存確認のダイアログが表示されます。[保存]をクリックして、

作成したレポートを保存しておきます。

ファイル保存ダイアログが開きますので、適切なフォルダー・ファイル名で保存してください。

保存後、自動的に Power BI に発行されます。

Page 152: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 152 -

発行が完了すると、ダイアログは下図のように変化します。

「Power BI で (保存したファイル名)を開く」のリンクをクリックしてください。

ブラウザが表示され、Power BI のサインインが求められます。ご自身のアカウントでサインインし

てください。

Page 153: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 153 -

サインインするとワークスペースが表示されます。

「レポート」をクリックすると、発行されているレポートの一覧が表示されます。

Page 154: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 154 -

表示されている行をクリックすると、レポートの内容が表示されます。

以上で IoT デバイスからテレメトリデータを受信しレポートを作成するまでの手順が完了しました。

Page 155: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 155 -

13. リソースグループの削除

最後の手順では、リソースグループを削除します。単純にWeb Appを削除すると、Webアプリケー

ションだけが削除され、関連するストレージアカウント、Application Insightsなどのリソースが残存し

ますが、リソースグループを削除すると、そのリソースグループ内のすべてのリソースが削除されます。

次の手順ではリソースグループ「AW-RG」を削除し、その中にある 2 台の仮想マシンのリソース

をすべて削除します。なお、この手順を実行すると、実習で構築したシステムが削除されるため、まだ、

検証を続けたい場合は、検証の完了後におこなってください。

1. Azure管理ポータルの[スタート画面]より[AW-RG]のタイルをクリックします。

2. [AW-RG]と[設定]が表示されます。コマンドの[削除]をクリックします。

3. [”AW-RG”を削除しますか?]が表示されます。[リソースグループ名を入力してください]に「AW-

RG」と入力し、[削除]をクリックします。

4. リソースグループとその中のすべてのリソースが削除されます。画面右上の[通知]をクリックし、

リソースグループが削除するまで待機します。リソースグループが削除されるまで約 10 分、時間

が掛かります。

5. Azure管理ポータルの画面左のジャンプバーより[リソースグループ]をクリックします。

Page 156: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 156 -

6. [リソースグループ]が表示されます。一覧にリソースグループ「AW-RG」がないことを確認しま

す。

Page 157: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 157 -

14. Microsoft Azure に関する情報の入手元

Microsoft Azure に関する最新の情報は、次のWebサイトから入手できます。

●Azure の公式ページ(各国共通)

製品情報、価格、技術情報など、Azureに関するすべての情報への入口です。Azureをお使いのお客

様は、右上の「ポータル」をクリックすると Azureのポータルにログインすることができます。ポータ

ルでは、Azure上で構築したアプリケーションの管理、課金状況の確認などができます。

http://azure.microsoft.com/ja-jp/

●Azure サイトの歩き方

日本のお客様用に作成されたコンテンツが満載です。

http://aka.ms/jp/azure

●サポートエンジニアによるブログ サイト

よくお問い合わせをいただく技術・課金・サポートに関する内容をまとめたものです。サポートに問

い合わせる前に、まずはここをご参照ください。

http://blogs.msdn.com/b/dsazurejp/

http://blogs.msdn.com/b/jpsql/ (SQL データベース / SQL Server)

●MSDN フォーラムの Azure フォーラム

Azure に関する技術的な質問に対して、これまでの投稿から情報を入手するのみならず、自分の質問

を投稿し、他のユーザーやMVP (Most Valuable Professional) からの回答を得られることが期待できま

す。開発者(DEVELOPER)サポート / 標準(STANDARD)サポート契約ではカバーしていない “How

To” や “仕様” に関する質問も、このフォーラムをご活用ください。

https://social.msdn.microsoft.com/Forums/ja-JP/home?category=azure

Page 158: Microsoft Azure 自習書シリーズ - download.microsoft.comdownload.microsoft.com/.../Hands-on-08-IoT.pdf · 用し、IoTを利用したアプリケーションの作成から操作までの一連の流れをハンズオン形式で学習体験

Microsoft Azure自習書シリーズ IoT

- 158 -

15. Microsoft Azure のお問合せ

Microsoft Azure では、お問い合わせ内容に応じて窓口を用意しております。お問い合わせの内容に

応じて各窓口をご利用ください。なお、Premierのお客様は、Premier窓口をご利用いただけます。

お問合せ内容 料金 窓口名 連絡方法 お問い合わせ方法

製品や機能の概要、価格、

ライセンスなどの情報の

収集や購入前相談

無償 Cloud Direct 電話

「Cloud Direct」で

検索してくださ

い。

課金、サブスクリプショ

ンに関するお問い合わ

せ、請求書払いへの変更、

クォータ増加の依頼

無償 Microsoft Azure 新ポータ

ル Azure 新ポー

タル※1 ※3

技術的なお問い合わせ 有償 Microsoft Azure 新ポータ

ル※2

※1 : 電話窓口はありません。

※2 : 有償のサポートプランが必要です。

※3 : お問い合わせ方法につきましては、次の Blogをご参照ください。

サポートにお問い合わせする方法について

http://blogs.msdn.com/b/dsazurejp/archive/2013/10/31/10462044.aspx

なお、ポータルサイトにアクセスできない場合は、次のどちらかの方法でお問い合わせください。

窓口名 / 連絡方法 お問い合わせ方法

カスタマー インフォメーションセンター

電話番号:0120-41-6755

営業時間:平日 9:00 – 17:30

窓口担当者に、「Azure について問い合わせがし

たい」 とお伝えください。Azure 担当者より折

り返しご連絡いたします。