概要
先月、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になってほしいです。