目次
はじめに
ここではiPRO Camera SDKを利用してAzure IoT Edgeデバイス用コンテナアプリを開発する環境を構築する手順を説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}
として記載します。
このチュートリアルはSDK ver.2.00以降のみ対応しています。SDK ver.2.00未満では利用できませんのでご注意ください。また、SDK ver.2.00以降のContainer AdamAppはambaCV5Xアプリのみ開発可能です。
Azure IoT Edge コンテナ版開発で推奨する開発環境
サポート対象となる推奨環境は以下となります。
開発用OS :Linux (64bit)
ディストリビューション :Ubuntu 20.04以降
Azure IoT アプリ用開発ツール:Visual Studio Code + Azure IoT Edge 拡張機能
+ Azure IoT Hub 拡張機能。コンテナレジストリ : Azure Container Registry (開発用にi-PROが提供)
※パートナー様自身で、Docker-hub等を用意いただくことも可能です。
Azure IoT Edgeデバイス向けアプリを開発するためには、Azureアカウントの開設が必要です。Azure のご利用には費用が掛かる可能性があります。
2024/3/15時点では、開発に必要なAzure IoT Hubを無料で使用できるプランもあります
Azure関連の契約はi-PRO株式会社では行っておりませんので、お客様にて実施ください。Azureについて詳細はこちらなどからマイクロソフトにお問い合わせください。
また、推奨環境以外での開発はサポート対象外となります。
開発環境構築手順
Docker環境の準備
開発PCにDocker Engineをインストールします。出典:Docker Engine インストール(Ubuntu 向け) | Docker ドキュメント (matsuand.github.io)
Windows環境で開発したい場合、本ドキュメントでは推奨外となりますが、Docker Desktop for WIndowsやWSLを利用する方法があります。それらの方法をご利用になる場合はそれぞれのドキュメントをご参照ください。
ここでの手順は下記環境にて実施しています。
OS: Ubuntu 22.04.2 LTS (Jammy Jellyfish)
Docker Engineのバージョン: 23.0.1
プロキシ経由でインターネットに接続されている環境の場合、プロキシサーバーの設定を実施しておいてください。
Dockerをインストールする前に、古いバージョンのアンインストールを行います。
sudo apt-get remove docker docker-engine docker.io containerd runc
アンインストールしてよい環境かどうか、事前に確認してください。
Dockerをインストールできるようにするためのアプリをインストールします。
sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release
Dockerの公式GPG鍵を追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
ここでcurlの証明書エラーが出た場合、ca-certificatesが最新ではない、または正しくインストールできていない可能性があります。
sudo apt-get install --reinstall ca-certificates
でca-certificatesを再インストールして直るか、ご確認ください。
Dockerの安定版リポジトリをセットアップします。
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Dockerエンジンをインストールします。
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
dockerコマンドはデフォルトではroot権限が必要なので、ユーザー権限でも実行できるように、dockerグループにユーザーを追加します。
sudo gpasswd -a $(whoami) docker
docker daemonの再起動 またはうまく行かない場合はPC再起動してください。
sudo systemctl restart docker
docker.sockにグループでの書き込み権限を付与します。
sudo chgrp docker /var/run/docker.sock
Dockerが使えるかどうかのテストを行います。
docker run --rm hello-world
以下のように表示されればインストール成功です。
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
成功しなかった場合、下記で成功するか確認してください。
sudo docker run --rm hello-world
ここでPCを再起動します。(必ず再起動を実施してください。)
Windows上にWSL + Docker Engineをインストールする場合、Visual Studio Codeで Remote Development 拡張機能パック をインストールする必要があります。詳細は WSL で VS Code の使用を開始する を参照してください。
qemuインストール
コンテナ版追加アプリを作成するために、開発環境にインストールする必要のある、qemuのインストール方法を記載します。
PCを再起動すると、build可能なアーキテクチャにlinux/arm64が表示されなくなる場合があります。その際は、再度同じ手順でqemuをインストールしてください。
qemuのインストール
sudo apt update sudo apt-get install qemu binfmt-support qemu-user-static # Install the qemu packages sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # This step will execute the registering scripts
docker buildxの準備
experimental 機能や BuildKit を使うため、環境変数を追加設定 & 反映 します。
設定ファイルを開きます。
vi ~/.bashrc
以下を末尾に追加
export DOCKER_CLI_EXPERIMENTAL=enabled export DOCKER_BUILDKIT=1
保存します。
buildxが使えるようになっているか確認します。
docker --help | grep buildx
出力例
buildx* Docker Buildx (Docker Inc., v0.10.5)
現在build可能なアーキテクチャを確認します。
docker buildx ls
出力例
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS default * docker default default running v0.11.7-0.20230525183624-798ad6b0ce9f linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/amd64/v4, linux/386, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
この出力の中に linux/arm64 があれば成功です。
開発環境構築のチェック
環境構築ができたかどうかのチェックを行います。 ※結果は一例ですので、環境によって異なります。
Docker Engineがインストール済みであること
$ docker --version Docker version 23.0.1, build cb74dfc
インストール出来ていない場合はDocker Engineをインストールしてください。
Dockerデーモンが起動中であること
【systemdを使用している場合】$ systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2023-06-28 08:41:48 JST; 5h 6min ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 1051 (dockerd) Tasks: 24 Memory: 199.9M CPU: 5.471s CGroup: /system.slice/docker.service └─1051 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (以下略)
Activeが inactive (dead) になっている場合は、
systemctl start docker
コマンドでサービスを起動してください。【SysVinitを使用している場合】
$ sudo /etc/init.d/docker status * Docker is running
not running と表示される場合は
sudo /etc/init.d/docker start
コマンドでサービスを起動してください。docker buildxがインストールされていること
$ docker --help | grep buildx buildx* Docker Buildx (Docker Inc., v0.10.5)
何も表示されていない場合は、 Docker Buildx に従って個別にインストールしてください。
qemuがインストールされ、Arm64ビットアプリがクロスビルド可能になっていること
以下のリストの中にlinux/arm64
があることを確認してください。$ docker buildx ls default * docker default default running v0.11.7-0.20230525183624-798ad6b0ce9f linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/amd64/v4, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
linux/arm64
がない場合は、qemuをインストールしてください。
Visual Studio CodeにAzure IoT Edge拡張機能およびAzure IoT Hub拡張機能をインストール
Azure IoT Edgeデバイス用アプリを開発するためには、Visual Studio CodeにAzure IoT Edge拡張機能およびAzure IoT Hub拡張機能をインストールします。
Visual Studio Codeを起動します。
左側の拡張機能アイコンをクリックして拡張機能ウィンドウを表示させます。
サーチテキストボックスに “Azure IoT”と入力します。
検索結果から「Azure IoT Edge」「Azure IoT Hub」を順次インストールします。
※WSL環境の場合、これらの拡張機能をWSL環境でも有効にする必要があります。WSL内の任意プロジェクトを開いた状態(WSLで任意プロジェクトフォルダにcdした状態で code .
コマンドなどでVIsual Studio Codeを開く)で拡張機能メニューの「Install in WSL: Ubuntu-20.04」を押下してWSL内にもインストールしてください。
i-PROカメラをAzure IoTに登録する
事前に、i-PROカメラおよび開発用PCをインターネット接続し、Azure IoTと通信できる状態にしておいてください。ここでは下記図のようなネットワーク構成になっている想定で説明します。
i-PROカメラのローカルエリアIPアドレスが192.168.0.10、IDがadmin、パスワードがAdmin123 の想定で説明します。
i-PRO Docker拡張モジュールをインストールする
以下のURLでカメラにアクセスします。
http://192.168.0.10/admin/setup_ca_software.html
クラウド対応を「On」に変更して「設定」を押します。
「拡張モジュール名」の下にある「ファイルを選択」ボタンから拡張モジュールを選択し、「実行」ボタンを押します。拡張モジュールファイルはこちらから取得してください。
拡張モジュールのインストールには数分かかります。
ファームウェアVer. 3.20以降では、セキュリティ対策のために更新したOSSの影響により、Docker拡張モジュール Ver. 1.01が動作しなくなります。一方、Docker拡張モジュール Ver. 2.00は古いファームウェアで動作させることができません。
Docker拡張モジュールをご利用中の場合、ファームウェアバージョンをVer. 3.20に更新する際は、Docker拡張モジュールも更新していただきますようお願いいたします。
ファームウェアVer. 3.10:Docker拡張モジュール Ver. 1.01は動作する。
ファームウェアVer. 3.10:Docker拡張モジュール Ver. 2.00は動作しない。
ファームウェアVer. 3.20:Docker拡張モジュール Ver. 1.01は動作しない。
ファームウェアVer. 3.20:Docker拡張モジュール Ver. 2.00は動作する。
更新順番はどちらでも問題ありませんが、i-PRO設定ツールを使用して更新する場合、初めにファームウェアをVer. 3.20に更新後、Docker拡張モジュールの更新を推奨します。
逆に実行した場合、i-PRO設定ツール上で「失敗しました。」と表示されますが、その後ファームウェアを更新することで、問題なく動作いたします。
以下のように拡張モジュール名が表示されればインストール完了です。
Azure IoT Edge Hubにi-PROカメラを登録する
Azure Portal にログインします。
IoT Hubを選択してリストから各自で準備した項目を選択します。ここでは例として「CV5xIoTHub2」を選択します。
左側のリストの「デバイス管理」から「IoT Edge」を選択します。
IoT Edgeデバイスの追加を選択します。
デバイスIDに任意のデバイス名を入力し、あとはデフォルトのままで「保存」ボタンを押します。
「最新の情報に更新」押下後、作成されたデバイスがリストに表示されることを確認します。
そのデバイスをクリックし、「プライマリ接続文字列」の文字列をコピーします。
コマンドプロンプト等から以下のコマンドを入力します。 すでにIoTコンポーネントが開始されている場合がありますので、以下を送信していったん停止します。
curl -u admin:Admin123 --anyauth "http://[i-PROカメラIPアドレス]/cgi-bin/cadam.cgi?methodName=stopIoTComponent" --verbose
その後以下のコマンドを実施して接続文字列を設定します。
curl --anyauth -u admin:Admin123 "http://[i-PROカメラIPアドレス]/cgi-bin/cadam.cgi?methodName=setConfigIoTComponent&componentType=AzureIoT&connectionType=connectionString&connectionString=[プライマリ接続文字列]" --verbose
200 OKが返却されたら、引き続き以下のコマンドを入力します。
curl -u admin:Admin123 --anyauth "http://[i-PROカメラIPアドレス]/cgi-bin/cadam.cgi?methodName=startIoTComponent" --verbose
自動でAzureと接続します。数分後、Azure Portalで「最新の情報に更新」ボタンを押して以下のようにIoT Edge ランタイムの応答が417になったら認識されています。
応答が表示されるまで初回は時間がかかります。
コンテナレジストリの準備
使用するコンテナレジストリの選択
開発した Container Adamapp をカメラへデプロイ (インストール) するためには、アプリをコンテナレジストリにアップロードする必要があります。アプリの開発フェーズにおいては、以下の手段が選択可能です。
i-PRO が運営するコンテナレジストリを利用する
i-PRO では SDK利用者に使用していただけるコンテナレジストリを用意しています。必要な場合、こちらよりお問い合わせください。商品化に際してはご自身でコンテナレジストリを用意していただくか、サービス運用を行っているサービスプロバイダが保有するコンテナレジストリを使用することを想定しています。ご自身でコンテナレジストリを用意する
すでにご自身でコンテナレジストリを保有されている場合は、そちらを使用することも可能です。
独自のコンテナレジストリを使用する場合の申請方法
i-PRO のカメラはセキュリティ上の理由から、特定のコンテナレジストリのみからイメージを取得することができます。上記2を選択した場合および商品化の際には、こちらよりこのコンテナレジストリのアドレスを申請してください。i-PRO で確認の上、このコンテナレジストリへのアクセスを許可するようにカスタマイズされたプラットフォーム拡張モジュールを提供いたしますので、対象のカメラで更新をお願いします。
Azure IoT Edgeでアプリを開発する
イメージのビルドとレジストリへのPush、デバイスへのデプロイはVisual Studio Code + Azure IoT Edge拡張機能 + Azure IoT Hub拡張機能で一続きに行うことができます。
事前にSDKのzipファイルを任意のフォルダに展開しておいてください。
Visual Studio Code上での初期設定
[SDKフォルダ]直下でVisual Studio Codeを立ち上げます。
cd ${SDK_DIR} code .
メニューの「表示」->「コマンドパレット」から「Azure: Sign In」を選択しAzureにログイン。
ブラウザが起動するので自身の認証情報を入力しログインする。以下のように表示されたらOK。
メニューの「表示」->「コマンドパレット」から「Azure IoT Hub: IoT Hubを選択」を選択し、登録済みのサブスクリプション->IoT Hubを選択する。選択後、左下の「AZURE IOT HUB」以下にIoT Hubおよび登録されているデバイスが表示されます。
これで開発環境の構築は完了です。
WSL環境でうまくいかない場合のチェックポイント
WSL環境でうまくいかない場合は以下をチェックしてください。
Visual Studio Codeの「LOCAL」の拡張機能で以下が有効になっていること
Dev Containers
Remote - SSH, Remote - SSH: Editing Configuration FIles, Remote - Tunnels, Remote Development, Remote Explorer
WSL
Visual Studio Codeの「WSL: UBUNTU-20.04 」の拡張機能で以下が有効になっていること
Azure Account
Azure IoT Edge
Azure IoT Hub
Visual Studio Codeの画面左下が「WSL: Ubuntu-20.04」と表示されていること
Build IoT Edge Solutionでpermission denied と表示される場合、対象のディレクトリに現在のユーザーのアクセス権があるかどうか確認する。
sudo chown -r ipro:ipro [開発ディレクトリ] ※ipro:ipro は例ですので、各環境に合わせて設定ください。
を実行して所有者を変更。
商標について
サイトで使用している商標について掲載します。
・Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc. in the United States and/or other countries. Docker, Inc. and other parties may also have trademark rights in other terms used herein