Azure IoT Edge for Linux on Windows (EFLOW) のご紹介


概要

先月、Linux用のAzure IoT EdgeをWindowsマシンで動作するAzure IoT Edge for Linux on Windowsがアナウンスされ、Public previewとしてサービス開始されました。略としてEFLOWと呼ばれ、イフローで発音しているようです。
やっと、時間を作って体験させていただきましたので、ご紹介いたします。
これでAzure IoT Edgeを運用するため、WindowsとLinuxのどちらかの選択について悩む必要がなくなりそうです。

EFLOWの構成図

Azure IoT EdgeはHypervisorの基盤でCBL-MarinerというMicrosoftさんが公開したLinuxディストリビューションが仮想マシンとして動作します。
管理はWindows Admin Centerの方で行われてWindowsとCBL Mariner Linux間双方通信しているようです。

EFLOWのシステム要件 (Preview)

  • Windows 10 バージョン 1809 以上 (Pro, Enterprise, Server)
  • vCPU : 4 以上
  • Memory : 2GB 以上

インストールスクリプトの方で、システム要件をチェックします。
クラウドで仮想マシンで動作確認する場合、TPMサポートを確認してください。インストールスクリプトでTPMを無効化するロジックあり、そこでエラーになるケースがあるようです。私もローカルで動作確認しました。

EFLOW 環境のセットアップ

Windows Insider Program 登録とダウンロード

Public Preview版をダウンロードするにはMicrosoft Insider Programの登録が必要です。

登録を終えたら、Windows Server Insider Previewページにアクセスします。

Microsoft Server Previewsの選択リストから「Windows Admin Center Preview - Build 2012」を選択します。

言語は「English」を選択します。

ダウンロードします。
約70MBなどで、すぐにダウンロードできます。

Windows Admin Center インストール

ダウンロードしたファイルを実行してWindows Admin Center (Preview版)をインストールします。デフォルト設定のままでインストールします。




Azure IoT Edge Extensions インストール

Windows Admin Centerを起動します。
Windows Admin Centerはウェブアプリとして動作します。最初アクセス時は証明書選択画面が現れるので、デフォルトの選択された証明書でOKします。

右上のギアアイコンをクリックしてSettings画面に遷移します。

左メニューでGatewayのExtensionsをクリックします。

FeedsのタブメニューをクリックしてAddをクリックします。

下記のFeed URLを追加します。

https://aka.ms/wac-insiders-feed

反映されるまで少し待ちます。(5秒?)
Available extensionsのタブメニューをクリックして「Azure IoT Edge」で検索するとインストール対象の「Azure IoT Edge」が現れます。
インストールをクリックします。

インストールが完了されたら、Installed extensionsタブメニューから「Azure IoT Edge」を検索するとインストール確認することができます。

Azure IoT Edge セットアップ

ここからがAzure IoT Edgeをセットアップする手順となります。方法は二つあります。
Windows Admin Centerで行われる手順とPowerShellで行われる手順です。
両方とも良いどころがありますが、PowerShellの方が手順をまとめやすいのでスクリプトでセットアップします。

PowerShellを管理者モードで実行します。

# Azure IoT Edgeインストーラーファイルをダウンロードします。
$msiPath = $([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest "https://aka.ms/AzureEdgeForLinuxOnWindowsMSI" -OutFile $msiPath

# インストーラーファイルを実行します。
Start-Process -Wait msiexec -ArgumentList "/i","$([io.Path]::Combine($env:TEMP, 'AzureIoTEdge.msi'))","/qn"

# PowerShellの実行ポリシーを確認します。
Get-ExecutionPolicy -List

# PowerShellの実行ポリシーで local machine が AllSigned になってなければ権限を付与します。
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Force

# EFLOW環境を作成します。
Deploy-Eflow

Deploy-Eflow実行時に一回再起動が必要なので、再起動されたら、再度Deploy-Eflowを実行してください。

# 再起動後、PowerShellプロンプト上で再度、実行します。
Deploy-Eflow

Deployment successfulが見えたら、EFLOW環境作成完了です。

デバイスのプロビジョンニング

Azure IoT Hubからデバイスを生成し、作成したEFLOWにプロビジョンニングしますが、方式によってコマンドが異なります。最も簡単なConnection Stringで接続してみます。
ここからは弊社のAzure IoT Edge管理ソリューション WeDX Server を並行で使って確認を行います。
Primary Connection Stringの文字列をPowerShellのCONNECTION_STRING_HEREに書き換えて実行します。

Provision-EflowVm -provisioningType manual -devConnString "<CONNECTION_STRING_HERE>"

プロビジョンニングが完了されたら、SSH接続で初期モジュールを確認してみます。

Ssh-EflowVm
sudo iotedge list

プロビジョンニングまでできました。
これで、Linux用のAzure IoT Edgeモジュールをデプロイして使えば良いです。

Azure IoT Edgeモジュール確認

モジュールデプロイはDevelopment Manifestをデプロイしなければいけないですが、こちらで触れることは手順が長くなってしまいますので、弊社のAzure IoT Edge管理ソリューション WeDX Server でデプロイすることとします。

SimulatedTemperatureSensor

Azure IoT Edge版のHelloworldである、SimulatedTemperatureSensorをでデプロイしてみます。

問題なく、デプロイされてシミュレーションされたテレマトリを確認できます。

Node-RED

Node-RED on IoT Edgeをデプロイしてみます。

問題なく、デプロイされてNode-REDフローとUIが動くことが確認できます。

Live Video Analytics

Live Video Analyticsも現在、Previewですが、デプロイして確認します。

Media Graphのトポロジーは下記のように作成します。

まとめ

Azure IoT Edge for Linux on Windows (EFLOW)はMicrosoftさんのEdgeコンピューティング戦略をある程度、推測できるサービスだと思います。
Windowsの生産性をそのまま活用して数多くあるAMD64のLinux用コンテナーをそのまま使うことができるのでとても魅力的なサービスだと思います。Public Previewですが、早めにGAになってほしいです。