Azure Stack Edge 上の Ubuntu VM に IoT Edge をデプロイする
適用対象: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
この記事では、Azure Stack Edge デバイスで稼働している Ubuntu VM に IoT Edge ランタイムをデプロイする方法について説明します。 新規の開発作業の場合は、この記事で説明されるセルフサービスのデプロイ方法が最新のソフトウェア バージョンを使用するため、この方法を使用してください。
大まかな流れ
フローの概要は次のとおりです。
- IoT Hub または Azure IoT Hub Device Provisioning Service (DPS) インスタンスを作成または識別します。
- Azure CLI を使用して Ubuntu 20.04 LTS VM イメージを取得します。
- Ubuntu イメージを Azure Stack Edge VM イメージ ライブラリにアップロードします。
- 次の手順を使用して、Ubuntu イメージを VM としてデプロイします。
- VM の名前、ユーザー名、パスワードを指定します。 別のディスクの作成は省略可能です。
- ネットワーク構成を設定します。
- [詳細設定] タブで準備された cloud-init スクリプトを指定します。
前提条件
開始する前に、以下の項目があることを確認します:
有効化した Azure Stack Edge デバイス。 詳細の手順については、「Azure Stack Edge Pro GPU を有効化する」を参照してください。
最新の Ubuntu 20.04 VM イメージ (Azure Marketplace のイメージまたは取り込むカスタム イメージ) にアクセスします。
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
「Azure Marketplace イメージを検索する」の手順を使用して、VM イメージを取得します。
cloud-init スクリプトを準備する
IoT Edge ランタイムを Ubuntu VM にデプロイするには、VM のデプロイ中に cloud-init スクリプトを使用します。
次のいずれかのセクションにある手順を使用します。
対称キーのプロビジョニングを使用する
DPS を使用せずにデバイスを IoT Hub に接続するには、このセクションの手順を使用して、VM 作成の [詳細設定] ページに cloud-init スクリプトを準備し、IoT Edge ランタイムと Nvidia のコンテナー ランタイムをデプロイします。
既存の IoT Hub を使用するか、新しい Hub を作成します。 IoT Hub を作成するには次の手順に従います。
IoT Hub に Azure Stack Edge デバイスを登録するには次の手順に従います。
デバイスの IoT Hub からプライマリ接続文字列を取得し、[DeviceConnectionString] の下の場所に貼り付けます。
対称キー プロビジョニング用の cloud-init スクリプト
#cloud-config
runcmd:
- dcs="<DeviceConnectionString>"
- |
set -x
(
# Wait for docker daemon to start
while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do
sleep 3
done
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
#install Nvidia drivers
apt install -y ubuntu-drivers-common
ubuntu-drivers devices
ubuntu-drivers autoinstall
# Install NVIDIA Container Runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
apt update
apt install -y nvidia-container-runtime
fi
# Restart Docker
systemctl daemon-reload
systemctl restart docker
# Install IoT Edge
apt install -y aziot-edge
if [ ! -z $dcs ]; then
iotedge config mp --connection-string $dcs
iotedge config apply
fi
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
reboot
fi ) &
apt:
preserve_sources_list: true
sources:
msft.list:
source: "deb https://packages.microsoft.com/ubuntu/20.04/prod focal main"
key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)
mQENBFYxWIwBCADAKoZhZlJxGNGWzqV+1OG1xiQeoowKhssGAKvd+buXCGISZJwT
LXZqIcIiLP7pqdcZWtE9bSc7yBY2MalDp9Liu0KekywQ6VVX1T72NPf5Ev6x6DLV
7aVWsCzUAF+eb7DC9fPuFLEdxmOEYoPjzrQ7cCnSV4JQxAqhU4T6OjbvRazGl3ag
OeizPXmRljMtUUttHQZnRhtlzkmwIrUivbfFPD+fEoHJ1+uIdfOzZX8/oKHKLe2j
H632kvsNzJFlROVvGLYAk2WRcLu+RjjggixhwiB+Mu/A8Tf4V6b+YppS44q8EvVr
M+QvY7LNSOffSO6Slsy9oisGTdfE39nC7pVRABEBAAG0N01pY3Jvc29mdCAoUmVs
ZWFzZSBzaWduaW5nKSA8Z3Bnc2VjdXJpdHlAbWljcm9zb2Z0LmNvbT6JATUEEwEC
AB8FAlYxWIwCGwMGCwkIBwMCBBUCCAMDFgIBAh4BAheAAAoJEOs+lK2+EinPGpsH
/32vKy29Hg51H9dfFJMx0/a/F+5vKeCeVqimvyTM04C+XENNuSbYZ3eRPHGHFLqe
MNGxsfb7C7ZxEeW7J/vSzRgHxm7ZvESisUYRFq2sgkJ+HFERNrqfci45bdhmrUsy
7SWw9ybxdFOkuQoyKD3tBmiGfONQMlBaOMWdAsic965rvJsd5zYaZZFI1UwTkFXV
KJt3bp3Ngn1vEYXwijGTa+FXz6GLHueJwF0I7ug34DgUkAFvAs8Hacr2DRYxL5RJ
XdNgj4Jd2/g6T9InmWT0hASljur+dJnzNiNCkbn9KbX7J/qK1IbR8y560yRmFsU+
NdCFTW7wY0Fb1fWJ+/KTsC4=
=J6gs
-----END PGP PUBLIC KEY BLOCK-----
packages:
- moby-cli
- moby-engine
write_files:
- path: /etc/systemd/system/docker.service.d/override.conf
permissions: "0644"
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local
DPS を使用する
デバイスを DPS および IoT Central に接続するには、このセクションの手順を使用します。 VM を作成するときに IoT Edge ランタイムをデプロイするための script.sh ファイルを準備します。
既存の IoT Hub と DPS を使用するか、新しい IoT Hub を作成します。
- IoT Hub を作成するには次の手順に従います。
- DPS を作成し、IoT Hub を DPS スコープにリンクするには、次の手順に従います。
DPS リソースに移動し、個々の登録を作成します。
- [デバイス プロビジョニング サービス]>[登録の管理]>[個々の登録の追加] を選択します。
- [構成証明の種類と IoT Edge デバイスの対称キー]で [True] が選択されていることを確認します。 既定では [False] が選択されています。
- DPS リソース ページから次の情報を取得します。
- 登録 ID。 IoT Hub のデバイス ID と同じ ID を使用することをお勧めします。
- [概要] メニューで使用できる ID スコープ。
- [個別登録] メニューのプライマリ SAS キー。
IoT Hub (ID スコープ) と DPS (登録 ID、対称キー) の値をコピーして、スクリプト引数に貼り付けます。
IoT Hub DPS 用 cloud-init スクリプト
#cloud-config
runcmd:
- dps_idscope="<DPS IDScope>"
- registration_device_id="<RegistrationID>"
- key="<Symmetric Key>"
- |
set -x
(
wget https://github.com/Azure/iot-edge-config/releases/latest/download/azure-iot-edge-installer.sh -O azure-iot-edge-installer.sh \
&& chmod +x azure-iot-edge-installer.sh \
&& sudo -H ./azure-iot-edge-installer.sh -s $dps_idscope -r $registration_device_id -k $key \
&& rm -rf azure-iot-edge-installer.sh
# Wait for docker daemon to start
while [ $(ps -ef | grep -v grep | grep docker | wc -l) -le 0 ]; do
sleep 3
done
systemctl stop aziot-edge
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
#install Nvidia drivers
apt install -y ubuntu-drivers-common
ubuntu-drivers devices
ubuntu-drivers autoinstall
# Install NVIDIA Container Runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | tee /etc/apt/sources.list.d/nvidia-container-runtime.list
apt update
apt install -y nvidia-container-runtime
fi
# Restart Docker
systemctl daemon-reload
systemctl restart docker
systemctl start aziot-edge
if [ $(lspci | grep NVIDIA | wc -l) -gt 0 ]; then
reboot
fi
) &
write_files:
- path: /etc/systemd/system/docker.service.d/override.conf
permissions: "0644"
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime --log-driver local
IoT Edge ランタイムをデプロイする
IoT Edge ランタイムをデプロイすることは、上記の cloud-init スクリプトを使用して VM を作成する操作の一部です。
VM と IoT Edge ランタイムをデプロイする手順の概要を次に示します。
Azure Marketplace から Ubuntu VM イメージを取得します。 詳細な手順については、「Azure Marketplace イメージを使用して Azure Stack Edge 用の VM イメージを作成する」の手順に従います。
- Azure portal で Azure Marketplace に移動します。
- Azure CLI がインストールされている Azure Cloud Shell またはクライアントに接続します。 詳細な手順については、「Azure Cloud Shell での Bash のクイックスタート」を参照してください。
Note
シェル セッションを閉じると、シェル セッション中に作成されたすべての変数が削除されます。 セッションをもう一度開くには、変数を再作成する必要があります。
c. 次のコマンドを実行して、サブスクリプションを設定します。
az account set –subscription <subscription id>
「Azure Marketplace イメージを検索する」の手順を使用して、Azure Marketplace で Ubuntu 20.04 LTS イメージを検索します。
Ubuntu 20.04 LTS イメージの例:
$urn = Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202007160
Marketplace イメージから新しいマネージド ディスクを作成します。 詳細な手順については、「Azure Marketplace イメージを使用して Azure Stack Edge 用の VM イメージを作成する」を参照してください。
マネージド ディスクから Azure Storage アカウントに VHD をエクスポートします。 詳細な手順については、「マネージド ディスクから Azure Storage に VHD をエクスポートする」を参照してください。
VM イメージを使用して Ubuntu VM を作成するには、次の手順に従います。
[詳細設定] タブで cloud-init スクリプトを指定します。VM を作成するには、「Azure portal 経由で GPU VM をデプロイする」または「Azure portal 経由で VM をデプロイする」を参照してください。
cloud-init で適切なデバイス接続文字列を指定して、IoT Hub または DPS デバイスに接続します。 詳細な手順については、「対称キーを使用したプロビジョニング」または「IoT Hub DPS を使用したプロビジョニング」を参照してください。
VM の作成時に cloud-init を指定しなかった場合は、VM の作成後に IoT Edge ランタイムを手動でデプロイする必要があります。
- SSH 経由で VM に接続します。
- VM にコンテナー エンジンをインストールします。 詳細な手順については、「対称キーを使用して Linux 上に IoT Edge デバイスを作成してプロビジョニングする」または「クイックスタート - Azure portal を使用して IoT Hub DPS をセットアップする」を参照してください。
IoT Edge ランタイムを確認する
IoT Edge ランタイムが稼働していることを確認するには、次の手順に従います。
Azure portal で IoT Hub リソースに移動します。
IoT Edge デバイスを選択します。
IoT Edge ランタイムが稼働していることを確認します。
IoT Edge デバイス構成のトラブルシューティングを行う方法については、「IoT Edge デバイスのトラブルシューティング」を参照してください。
IoT Edge ランタイムの更新
VM を更新するには、「IoT Edge を更新する」の手順に従います。 Azure IoT Edge の最新バージョンを見つけるには、Azure IoT Edge リリースに関する記事を参照してください。
次のステップ
Ubuntu VM にIoT Edge モジュールをデプロイして実行するには、「IoT Edge モジュールをデプロイする」の手順を参照してください。
Nvidia の DeepStream モジュールをデプロイするには、「GPU を使用して Azure Stack Edge Pro上の Ubuntu VM に Nvidia DeepStream モジュールをデプロイする」を参照してください。
NVIDIA DIGITS をデプロイするには、「あらかじめ用意されている NVIDIA モジュールで GPU を有効にする」を参照してください。