開発環境構築(Container AdamApp for Azure IoT Edge編)

 

目次


 

はじめに


ここではiPRO Camera SDKを利用してAzure IoT Edgeデバイス用コンテナアプリを開発する環境を構築する手順を説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}として記載します。

このチュートリアルはSDK ver.2.00以降のみ対応しています。SDK ver.2.00未満では利用できませんのでご注意ください。また、SDK ver.2.00以降のContainer AdamApp for Azure IoT Edgeは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を無料で使用できるプランもあります

参考 価格 - IoT Hub | Microsoft Azure

Azure関連の契約はi-PRO株式会社では行っておりませんので、お客様にて実施ください。Azureについて詳細はこちらなどからマイクロソフトにお問い合わせください。

また、推奨環境以外での開発はサポート対象外となります。

 

開発環境構築手順


Docker環境の準備

開発PCにDocker Engineをインストールします。出典:Docker Engine インストール(Ubuntu 向け) | Docker ドキュメント (matsuand.github.io)

こでの手順は下記環境にて実施しています。

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

 

Dockerの安定版リポジトリをセットアップします。

 

Dockerエンジンをインストールします。

 

dockerコマンドはデフォルトではroot権限が必要なので、ユーザー権限でも実行できるように、dockerグループにユーザーを追加します。

 

docker daemonの再起動 またはうまく行かない場合はPC再起動してください。

 

docker.sockにグループでの書き込み権限を付与します。

  

Dockerが使えるかどうかのテストを行います。

 

以下のように表示されればインストール成功です。

 

成功しなかった場合、下記で成功するか確認してください。

ここでPCを再起動します。(必ず再起動を実施してください。)

 

qemuインストール

コンテナ版追加アプリを作成するために、開発環境にインストールする必要のある、qemuのインストール方法を記載します。

 

qemuのインストール

 

docker buildxの準備

  • experimental 機能や BuildKit を使うため、環境変数を追加設定 & 反映 します。

  • 設定ファイルを開きます。

  • 以下を末尾に追加

    保存します。

  • buildxが使えるようになっているか確認します。

    出力例

     

  • 現在build可能なアーキテクチャを確認します。

    出力例

    この出力の中に linux/arm64 があれば成功です。

 

開発環境構築のチェック

環境構築ができたかどうかのチェックを行います。 ※結果は一例ですので、環境によって異なります。

  • Docker Engineがインストール済みであること

    インストール出来ていない場合はDocker Engineをインストールしてください。

  • Dockerデーモンが起動中であること
    【systemdを使用している場合】

    Activeが inactive (dead) になっている場合は、systemctl start docker コマンドでサービスを起動してください。

    【SysVinitを使用している場合】

    not running と表示される場合は sudo /etc/init.d/docker start コマンドでサービスを起動してください。

  • docker buildxがインストールされていること

    何も表示されていない場合は、 Docker Buildx に従って個別にインストールしてください。

  • qemuがインストールされ、Arm64ビットアプリがクロスビルド可能になっていること
    以下のリストの中に linux/arm64 があることを確認してください。

    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」を順次インストールします。

20240123-103100.png

※WSL環境の場合、これらの拡張機能をWSL環境でも有効にする必要があります。WSL内の任意プロジェクトを開いた状態(WSLで任意プロジェクトフォルダにcdした状態で code . コマンドなどでVIsual Studio Codeを開く)で拡張機能メニューの「Install in WSL: Ubuntu-20.04」を押下してWSL内にもインストールしてください。

20240123-103101.png

 

i-PROカメラをAzure IoTに登録する

事前に、i-PROカメラおよび開発用PCをインターネット接続し、Azure IoTと通信できる状態にしておいてください。ここでは下記図のようなネットワーク構成になっている想定で説明します。

 

i-PRO Docker拡張モジュールをインストールする

カメラWEBブラウザからインストールする方法に付いて説明します。
i-PRO設定ツールを用いることで、複数のカメラに同時にインストールすることも可能です。i-PRO設定ツールを使用する手順についてはこちらを参照ください。

以下のURLでカメラにアクセスします。

クラウド対応を「On」に変更して「設定」を押します。

「拡張モジュール名」の下にある「ファイルを選択」ボタンから拡張モジュールを選択し、「実行」ボタンを押します。拡張モジュールファイルはこちらから取得してください。

以下のように拡張モジュール名が表示されればインストール完了です。

 

Azure IoT Edge Hubにi-PROカメラを登録する

Azure Portal にログインします。

 

IoT Hubを選択してリストから各自で準備した項目を選択します。ここでは例として「CV5xIoTHub2」を選択します。

 

左側のリストの「デバイス管理」から「IoT Edge」を選択します。

 

IoT Edgeデバイスの追加を選択します。

 

デバイスIDに任意のデバイス名を入力し、あとはデフォルトのままで「保存」ボタンを押します。

「最新の情報に更新」押下後、作成されたデバイスがリストに表示されることを確認します。

 

そのデバイスをクリックし、「プライマリ接続文字列」の文字列をコピーします。

コマンドプロンプト等から以下のコマンドを入力します。 すでにIoTコンポーネントが開始されている場合がありますので、以下を送信していったん停止します。

 その後以下のコマンドを実施して接続文字列を設定します。

200 OKが返却されたら、引き続き以下のコマンドを入力します。

自動でAzureと接続します。数分後、Azure Portalで「最新の情報に更新」ボタンを押して以下のようにIoT Edge ランタイムの応答が417になったら認識されています。

 

コンテナレジストリの準備

使用するコンテナレジストリの選択

開発した Container Adamapp for Azure IoT Edge をカメラへデプロイ (インストール) するためには、アプリをコンテナレジストリにアップロードする必要があります。アプリの開発フェーズにおいては、以下の手段が選択可能です。

  1. i-PRO が運営するコンテナレジストリを利用する
    i-PRO では SDK利用者に使用していただけるコンテナレジストリを用意しています。必要な場合、こちらよりお問い合わせください。商品化に際してはご自身でコンテナレジストリを用意していただくか、サービス運用を行っているサービスプロバイダが保有するコンテナレジストリを使用することを想定しています。

  2. ご自身でコンテナレジストリを用意する
    すでにご自身でコンテナレジストリを保有されている場合は、そちらを使用することも可能です。

 

独自のコンテナレジストリを使用する場合の申請方法

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を立ち上げます。

 

メニューの「表示」->「コマンドパレット」から「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 と表示される場合、対象のディレクトリに現在のユーザーのアクセス権があるかどうか確認する。

    を実行して所有者を変更。

 

商標について

サイトで使用している商標について掲載します。

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