Skip to content

MS_AzureIoTEdgeTutorial

nishi_74322014 edited this page Sep 1, 2026 · 1 revision

Azure IoT Edgeチュートリアル

概要

Azure IoT Edge の様々なモジュールをデプロイしていくチュートリアル。

  • Marketplace モジュール
  • カスタム・モジュール
  • Azure の PaaS や SaaS モジュール

補足(IoT Edge のモジュールとは): IoT Edge の「モジュール」は
エッジ デバイス上で動く Docker コンテナである。
クラウド側(IoT Hub)から「どのイメージをどう配置するか」を
デプロイ マニフェスト(deployment.template.json)で指示すると、
デバイス上の IoT Edge ランタイムがそれを取得して起動する。
本ページの 3 種類は「そのイメージをどこから持ってくるか」の違いにあたる。

詳細

Azure IoT Hub の作成は、Azure IoT Hubチュートリアルへ。

Marketplaceモジュールのデプロイ

前提

  • Azure CLI

    • 利用環境はローカルでなくても良い模様。
    • Docker が提案されていたが、WSL でも良いものと思われる。
    • 更に言えば、Azure Cloud Shellでも良いものと思われる
      (...と言うか、実際にAzure Cloud Shellでやった)。
  • IoT Edge デバイス
    以下のどちらでも構築可能。

    • Windows
    • Linux

補足(EFLOW は Linux VM): Azure IoT EFLOW(Edge for Linux on Windows)は
「Windows でも動く」というより、Windows のハイパーバイザ上で
専用の Linux VM を動かす
仕組みである。
IoT Edge のモジュールは Linux コンテナなので、実体は常に Linux 上で動く。

準備

  • IoT Hub の作成

    az iot hub create --resource-group XXXX --name XXXX --sku F1 --partition-count 2
    
  • IoT Edge デバイスを登録

    • デバイスをハブに作成
    • デバイスの接続文字列を確認
  • IoT Edge デバイスの設定

    • Windows の場合はローカルに EFLOW を構成

    • Linux の場合は ARM テンプレートで Azure VM をデプロイ

    • 以下は Linux を個別に設定する際のシェル。

      curl https://packages.microsoft.com/config/ubuntu/18.04/multiarch/prod.list > ./microsoft-prod.list
      sudo mv ./microsoft-prod.list /etc/apt/sources.list.d/
      curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
      sudo mv ./microsoft.gpg /etc/apt/trusted.gpg.d/
      sudo apt-get update
      sudo apt-get install -y moby-engine moby-cli
      sudo apt-get install -y iotedge
      sudo vi /etc/iotedge/config.yaml
      sudo systemctl restart iotedge
      systemctl status iotedge
      sudo iotedge list

    その後、コンフィグ手順は下記参照。
    https://learn.microsoft.com/ja-jp/azure/iot-edge/how-to-provision-devices-at-scale-linux-symmetric

補足(config.yaml は現在 config.toml: 上記の手順は
**IoT Edge 1.1(iotedge パッケージ、設定は config.yaml)**のものである。
1.4 以降は aziot-edge パッケージになり、設定ファイルも
/etc/aziot/config.toml に変わっている
iotedge config apply で適用する)。
moby-engine を使う点は変わらない。

実行

  • IoT Edge モジュールを展開
    Marketplace モジュール(Simulated Temperature Sensor)

  • 生成されたデータを表示する
    コンテナ内部にログインして Shell(Bash)で。

カスタム・モジュールの開発とデプロイ

移行メモ(脱字): 「次にカスタム・の開発とデプロイをやってみる。」の
脱字を「カスタム・モジュールの」に補った。

ローカル環境準備

補足(上記の pip コマンドに注意): pip freeze > uninstall.txt
pip uninstall -y -r uninstall.txt
環境内のパッケージを全部消す操作である。
グローバルの Python 環境で実行すると他のツールも巻き添えになるため、
実際には venv などの仮想環境を作ってから iotedgedev を入れるのが安全である。

Container Registryの準備

デプロイに Container Registry としてAzure Container Registryを使う。

C#のSolution・Projectの準備

  • 以下の CMD のコマンドで C# の Solution・Project を準備

    mkdir iotedgesolution
    cd iotedgesolution
    iotedgedev solution init --template csharp
    
  • 以下を含むいくつかのステップを完了するよう促す

    • Azure への認証
    • Azure サブスクリプションの選択
    • リソースグループを選択または作成
    • Azure IoT Hub を選択または作成
    • Azure IoT Edge デバイスの選択または作成
  • ファイルの修正

カスタム・モジュールのコンテナ化

ココのシェルは VSCode の GitBash ターミナルで実行する。

  • ユーザ ID とパスワードで Azure Container Registry にログイン。
az login
AcrName=osscjpdevinfra
echo $AcrName
RegistryName=$(az acr show --name $AcrName --query loginServer --output tsv)
echo $RegistryName
Password=$(az acr credential show --name $RegistryName --query "passwords[0].value" | sed 's/"//g')
echo $Password

az acr login -n $RegistryName
docker login $RegistryName -u $AcrName -p $Password
  • カスタム・モジュールのコンテナを、ビルド、プッシュ、セット
subscriptionID=$(az account show --query id --output tsv)
userPrincipalName=$(az ad signed-in-user show --query userPrincipalName --output tsv)
location=westus2
hmsRgName=HmsRG
iotHubName=OsscJpDevInfra
iotEdgeID=myedge1

hubConnectionString=$( \
  az iot hub connection-string show \
  -n $iotHubName \
  --key primary \
  --query connectionString -o tsv)

docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t osscjpdevinfra.azurecr.io/filtermodule:0.0.1-amd64 "./modules/filtermodule"
docker push osscjpdevinfra.azurecr.io/filtermodule:0.0.1-amd64
az iot edge set-modules --hub-name $iotHubName --device-id $iotEdgeID --content ./deployment.template.json --login $hubConnectionString

補足(--content に渡すファイル): 上のコマンドは
deployment.template.json を直接渡しているが、
テンプレートには ${MODULES.filtermodule} のような変数が含まれるため、
本来は iotedgedev build などで変数を解決した
config/deployment.amd64.json を渡す。
「エラー発生中」に至らずに済ませるための実務上の注意点である。

PaaS・SaaSモジュールのデプロイ

移行メモ(未記述): 元ページは本節の導入が「ここでは、」で途切れていた。
以降の小節(ローカル環境準備・Solution/Project の準備・コンテナ化)は
記述されているため、そのまま移行した。

Azure Functions や Stream Analytics などの Azure サービスを
モジュールとしてエッジにデプロイする。

PaaS・SaaS のローカル環境準備

以下の VSCode 拡張をインストールしておく。

  • Azure IoT Hub
  • Azure IoT Edge

PaaS・SaaS の C#のSolution・Projectの準備

  • コマンド パレットで、Azure IoT Edge: New IoT Edge solution コマンドを使う。
  • 手順に従って、Solution・Project の設定や、Module のコードを修正する。

PaaS・SaaSモジュールのコンテナ化

参考

Qiita

YouTube

motojin・com

https://www.youtube.com/@motojindotcom

microsoft.com

Microsoft Docs

本 Wiki 内


Tags: クラウド, IoT, Azure

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally