はじめてのIoT EdgeモジュールをLinux仮想デバイスにデプロイする

この記事の内容

  • Azure IoT Hubを作成し、IoT Edgeデバイスを登録する手順を解説します
  • Linux仮想マシンにIoT Edgeランタイムをインストールして構成します
  • Azure Marketplaceから温度センサーのシミュレーターモジュールをデプロイします
  • デバイスからIoT Hubへのテレメトリ送信を確認します
  • Azure Cloud Shellを使ったコマンド操作を中心に、初心者にも分かりやすく説明します

はじめに

この記事ではAzure IoT Edgeのクイックスタートとして、はじめてのIoT EdgeモジュールをLinux仮想デバイスにデプロイする手順を解説します。

IoT Edgeを使用すると、クラウドに送信するデータをエッジデバイス上で処理できるため、より多くのワークロードをクラウドへ送信する前にフィルタリングや分析が可能になります。

このクイックスタートでは、IoT EdgeデバイスとしてAzure仮想マシンを使用します。これにより、テスト用マシンを素早く作成し、終了後に削除できます。

全体の流れ

  1. IoT Hubを作成する
  2. IoT Edgeデバイスをデバイス登録する
  3. IoT EdgeランタイムをLinux仮想デバイスにインストールして開始する
  4. モジュールをIoT Edgeデバイスにデプロイする

前提条件

  • アクティブなAzureサブスクリプション(ない場合は無料アカウントを作成してください)
  • Azure Cloud Shell(またはAzure CLIをインストールしてローカルで使用)

操作はAzure Cloud ShellのBash環境を使用するのが簡単です。ローカルでAzure CLIを使用する場合は、インストール後にログインして最新バージョンに更新してください。


リソースグループの作成

まずはAzure Cloud Shellを起動し、リソースグループを作成します。

az group create --name IoTEdgeResources --location japaneast

ロケーションは日本リージョンであるjapaneastを指定しています。コマンドが成功すると、リソースグループが作成されます。


IoT Hubの作成

次に、IoT Hubを作成します。既存のIoT Hubがあれば流用することも可能です。新規に作成する場合は以下のコマンドを実行します。

az iot hub create \
  --name <ハブ名> \
  --resource-group IoTEdgeResources \
  --sku F1

無料プラン(F1)のIoT HubがIoTEdgeResourcesリソースグループに作成されます。作成には数分かかる場合があります。


IoT Edgeデバイスの登録

IoT HubにIoT Edgeデバイスを登録します。IoT EdgeデバイスはIoT Hubと通信できるよう、デバイスIDをクラウド上に作成する必要があります。

IoT EdgeデバイスはIoT Hub上で「Edge有効」として明示的に宣言します。以下のコマンドでmyEdgeDeviceという名前のデバイスを作成します。

az iot hub device-identity create \
  --device-id myEdgeDevice \
  --hub-name <ハブ名> \
  --edge-enabled

--edge-enabledオプションを付けることで、通常のIoTデバイスではなくIoT Edgeデバイスとして登録されます。

デバイス接続文字列の確認

デバイスの接続文字列を取得し、控えておきます。

az iot hub device-identity connection-string show \
  --device-id myEdgeDevice \
  --hub-name <ハブ名>

接続文字列はホスト名(IoT Hub名)・デバイスID・SharedAccessKeyで構成されています。この文字列は後で仮想マシンに設定します。


IoT EdgeランタイムをインストールしたVM(仮想デバイス)の作成

IoT Edgeランタイムには以下の3つのコンポーネントがあります。

  • IoT Edgeエージェント:デバイス起動時に実行され、IoT EdgeエージェントをBootstrapします
  • IoT Edgeエージェント(モジュール管理):Edgeデバイス上のモジュールの展開と監視を担当
  • IoT Edgeハブ:モジュール間・デバイスとIoT Hub間の通信を管理

ARM templateを使ったVM作成

Azure Resource ManagerテンプレートとAzure CLIを使用して、IoT Edgeランタイム構成済みの仮想マシンを作成します。

az deployment group create \
  --resource-group IoTEdgeResources \
  --template-uri "https://raw.githubusercontent.com/Azure/iotedge-vm-deploy/1.4/edgeDeploy.json" \
  --parameters \
    dnsLabelPrefix='<任意のDNSラベル>' \
    adminUsername='azureUser' \
    deviceConnectionString='<先ほど控えた接続文字列>' \
    authenticationType='password' \
    adminPasswordOrKey='<任意のパスワード>'

デプロイが完了すると、provisioningStateSucceededと表示されます。出力にはSSH接続用のDNS名も含まれます。


IoT Edgeランタイムの動作確認

VMへのSSH接続

デプロイコマンドの出力に表示されたDNS名を使用してVMに接続します。

ssh azureUser@<DNS名>

IoT Edgeサービスの確認

接続後、IoT Edgeランタイムが正常にインストールされているか確認します。

sudo iotedge system status

Runningと表示されれば正常に動作しています。

実行中のモジュール確認

sudo iotedge list

初回デプロイ直後はedgeAgentモジュールのみが表示されます。edgeAgentはデバイスにデプロイする追加モジュールのインストールと起動を支援するモジュールです。


センサーモジュールのデプロイ

IoT EdgeデバイスをクラウドのAzureポータルから管理し、テレメトリを送信するモジュールをデプロイします。

今回使用するのは、温度・湿度・圧力のデータを生成するシミュレートされた温度センサーモジュールです。このモジュールはAzure Marketplaceから入手できます。実際の環境では外部センサーからデータを受け取ることになりますが、開発テスト用にこのシミュレーターが非常に役立ちます。

Azureポータルからの操作手順

  1. Azureポータルにサインインし、作成したIoT Hubに移動します
  2. 左側メニューの「デバイスの自動管理」→「IoT Edge」を選択します
  3. 作成したmyEdgeDeviceを選択します
  4. 上部バーの「モジュールの設定」を選択します

モジュールの追加

  1. 「IoT Edgeモジュール」の下で「追加」ドロップダウンを開き、「Marketplaceモジュール」を選択します
  2. 検索ボックスに「Simulated Temperature Sensor」と入力して選択します
  3. 必要な状態が「running」に設定されていることを確認します

ランタイム設定の更新

「ランタイムの設定」を選択し、edgeHubedgeAgentのイメージフィールドをバージョン1.2に更新します。

  • edgeHubmcr.microsoft.com/azureiotedge-hub:1.2
  • edgeAgentmcr.microsoft.com/azureiotedge-agent:1.2

更新後、「保存」を選択します。

ルートの設定

「ルート」タブで既定のルートを削除します。Marketplaceからモジュールを追加した際に、シミュレートされた温度センサーのメッセージをIoT Hubに送信する専用ルートが自動的に作成されているため、既定のルートは冗長になります。

デプロイの確定

「確認と作成」を選択し、表示されたJSONファイル(デプロイするモジュールの定義)を確認してから「作成」を選択します。

ポイント:デプロイを送信しても、デバイスには即座にプッシュされません。IoT EdgeデバイスはIoT Hubに対して定期的にポーリングを行っており、更新されたデプロイマニフェストを検出すると、クラウドからモジュールイメージをプルしてローカルで起動します。このプロセスには数分かかる場合があります。


デプロイの確認

ポータルでの確認

Azureポータルのデバイス詳細ページで「モジュール」タブを確認します。edgeAgentedgeHubSimulatedTemperatureSensorの3つのモジュールが表示されます。

デプロイが完了すると、ステータスが「running」に変わります。

VMでの確認

SSHで接続したVMで再度モジュール一覧を確認します。

sudo iotedge list

SimulatedTemperatureSensorrunning状態で表示されれば、デプロイ成功です。


テレメトリの確認

デバイス側でのメッセージ確認

温度センサーモジュールが送信しているメッセージを確認できます。

sudo iotedge logs SimulatedTemperatureSensor

ログを見ると、温度・湿度・圧力・タイムスタンプが含まれたメッセージが定期的に送信されているのが確認できます。

IoT Hub側での受信確認

Azure IoT ExplorerなどのツールでIoT Hubに届いているメッセージを確認できます。IoT HubのオーナーレベルのプライマリーConnectionStringを使用して接続し、テレメトリのモニタリングを開始すると、デバイスからのメッセージがリアルタイムで表示されます。


まとめ

このクイックスタートでは、以下の手順でAzure IoT Edgeの基本的な動作を確認しました。

  1. IoT Hubを作成し、クラウド上の管理基盤を用意しました
  2. IoT EdgeデバイスをIoT Hubに登録し、接続文字列を取得しました
  3. Linux仮想マシンにIoT Edgeランタイムをインストールし、デバイスとして接続しました
  4. Azure Marketplaceからシミュレートされたセンサーモジュールをデプロイしました
  5. テレメトリデータがIoT Hubに届いていることを確認しました

Azure IoT Edgeの重要な特徴として、クラウドからモジュールを展開するだけでデバイス自体を変更せずに機能を追加・更新できる点があります。デバイスは定期的にIoT Hubをポーリングして変更を検出し、自律的にモジュールをプルして起動します。

今後のチュートリアルでは、このシミュレートされたセンサーデータをAzure Stream Analyticsなどで分析し、ビジネスインサイトを得る方法を学ぶことができます。