【デモ解説】インフラ管理者のための IoT Edge / IoT Hub 入門 — デバイス接続からデータ転送まで

この記事の内容

  • Raspberry Pi オンラインシミュレーターを使って IoT Hub にデバイスを登録する方法
  • 接続文字列(Connection String)を使ったデバイスとクラウドの接続手順
  • Azure IoT Explorer でリアルタイムにメッセージを監視する方法
  • Azure Stream Analytics を使って IoT Hub のデータを Blob Storage に転送する手順
  • 入力・出力・クエリの設定によってさまざまな Azure サービスへデータを流し込める仕組みの概要

はじめに

本記事は、ハイブリッドクラウド研究会(HCCJP)第20回勉強会(2021年5月14日開催)での登壇内容のうち、デモ部分を抜粋して解説したものです。

デモのシナリオは次のとおりです。エッジデバイスにセンサーが取り付けられており、そのセンサーが読み取ったデータを IoT Hub に送信し、さらにそのデータが Azure の各サービス群に流れていく、という一連の流れを実際に動かして確認します。


使用するツール・サービス

今回のデモでは以下を使用します。

  • Raspberry Pi Azure IoT オンラインシミュレーター — 実機がなくても動作確認できるブラウザベースのシミュレーター
  • Azure IoT Hub — デバイスとクラウドを接続するマネージドサービス
  • Azure IoT Explorer — IoT Hub に接続してデータの確認やデバイス制御ができるデスクトップアプリ
  • Azure Stream Analytics — ストリーミングデータをリアルタイムに処理して他のサービスへ転送するサービス
  • Azure Blob Storage — 転送先のストレージ

ステップ1: IoT Hub にデバイスを作成する

まず、Azure ポータルで IoT Hub を開き、デバイスを新規作成します。

  1. IoT Hub のリソースを開きます
  2. 左メニューから 「IoT デバイス」 を選択します
  3. 「新規」 をクリックして、デバイスを作成します
  4. デバイス ID に任意の名前(例: pi)を入力して保存します

デバイスが作成されると、プライマリ接続文字列(Primary Connection String) が発行されます。この接続文字列は、ホスト名・デバイス ID・共有アクセスキーを組み合わせたもので、デバイスがクラウドと通信する際に使用します。


ステップ2: Raspberry Pi シミュレーターを接続する

次に、Raspberry Pi Azure IoT オンラインシミュレーターを開きます。シミュレーター上にはデバイスのコードがあらかじめ記述されており、接続文字列を貼り付けるだけで動作します。

コード内の connectionString の部分に、先ほどコピーしたプライマリ接続文字列を貼り付けます。

const connectionString = 'HostName=<your-iothub>.azure-devices.net;DeviceId=pi;SharedAccessKey=<your-key>';

設定が完了したらシミュレーターを起動します。シミュレーターはセンサーデータ(温度・湿度など)を定期的にメッセージとして送信し続けます。送信されるメッセージには以下のような情報が含まれています。

{
  "messageId": 1,
  "deviceId": "RaspberryPi-Web-Client",
  "temperature": 26.0,
  "humidity": 65.0
}

ステップ3: Azure IoT Explorer でデータを確認する

Azure IoT Explorer を使って、IoT Hub に届いているメッセージをリアルタイムに確認します。

IoT Hub への接続

  1. Azure IoT Explorer を起動します
  2. 「Add connection」 をクリックします
  3. IoT Hub の接続文字列を入力します(デバイスの接続文字列ではなく、IoT Hub 自体の接続文字列を使用します)

IoT Hub の接続文字列は、Azure ポータルの IoT Hub リソースから 「設定」→「共有アクセス ポリシー」 で確認できます。ポリシー名の一覧から 「iothubowner」 を選択し、プライマリ接続文字列をコピーします。

  1. 接続文字列を貼り付けて保存します

メッセージのモニタリング

接続が完了すると、登録済みのデバイスが一覧表示されます。先ほど作成したデバイスを選択し、「Start」 をクリックするとモニタリングが開始されます。

Raspberry Pi シミュレーターから継続的に送信されているイベントが、リアルタイムで流れてくる様子を確認できます。イベントには温度・湿度などのセンサーデータが含まれており、数値が順次更新されていくのが見えます。


ステップ4: Azure Stream Analytics で他サービスへ転送する

IoT Hub に届いたデータをさらに Azure の他のサービスへ流し込む方法として、Azure Stream Analytics ジョブを使用します。

Stream Analytics ジョブの作成

  1. Azure ポータルで 「Stream Analytics ジョブ」 を新規作成します
  2. ジョブ名(例: iot-job)を入力します
  3. リソースグループと場所を選択します
  4. ホスティング環境は 「クラウド」 を選択して作成します

入力の設定

ジョブが作成されたら、まず入力を定義します。

  1. 「入力」 を選択します
  2. 入力ソースとして 「IoT Hub」 を選択します
  3. サブスクリプションから対象の IoT Hub を選択して保存します

出力の設定

次に出力先を定義します。Stream Analytics では以下のようなさまざまな Azure サービスを出力先として指定できます。

  • Azure Blob Storage
  • Azure Functions
  • Event Hubs
  • Service Bus
  • SQL Database
  • Cosmos DB など

今回は Blob Storage を出力先として設定します。

  1. 「出力」 を選択します
  2. 出力先として 「Blob ストレージ」 を選択します
  3. 対象のストレージアカウントを選択します
  4. コンテナーを新規作成(例: iot-hub-test)して保存します

クエリの設定

入力から取得したデータをどのように加工して出力するかをクエリで定義します。今回はすべてのデータをそのまま流し込む設定にします。

SELECT *
INTO [出力エイリアス]
FROM [入力エイリアス]

クエリを保存してテストを実行すると、IoT Hub から取得できているデータを確認できます。

ジョブの開始

設定が完了したら 「ジョブの開始」 をクリックします。開始時刻として「現在」または特定の時刻を指定できます。IoT Hub はデータの到着時刻を記録しているため、過去の時点を指定して再処理することも可能です。

ジョブが実行中になると、Blob Storage 側にデータが格納され始めます。ダウンロードして中身を確認すると、以下のような JSON 形式でデータが入っていることが確認できます。

{
  "messageId": 1,
  "deviceId": "RaspberryPi-Web-Client",
  "temperature": 26.0,
  "humidity": 65.0,
  "EventProcessedUtcTime": "...",
  "EventEnqueuedUtcTime": "..."
}

時間が経つにつれてファイルサイズが増えていき、Stream Analytics がストリームデータを継続的に Blob Storage へ書き込んでいる様子を確認できます。


まとめ

今回のデモでは、Raspberry Pi オンラインシミュレーターから Azure IoT Hub へデータを送信し、Azure IoT Explorer でリアルタイムに確認したあと、Azure Stream Analytics を使って Blob Storage へ転送するまでの一連の流れを確認しました。

Stream Analytics の出力先には Blob Storage 以外にも Azure Functions や各種データストアを指定できるため、入力・出力・クエリを組み合わせることで、IoT デバイスから送られてくるデータをさまざまな Azure サービスへ柔軟に流し込むことができます。特に出力先として Azure Functions を使えば、任意のロジックを実行することも可能です。IoT Hub を起点としたデータパイプラインの構築において、Stream Analytics は手軽に導入できる強力な選択肢の一つです。