チュートリアル: 入れ子になった IoT Edge 階層に接続済みレジストリをデプロイする
このチュートリアルでは、Azure CLI コマンドを使用して Azure IoT Edge デバイスの 2 層の階層を作成し、各層で接続済みレジストリをモジュールとしてデプロイします。 このシナリオでは、上層のデバイスはクラウド レジストリと通信します。 下層のデバイスは、上層にある親である接続済みレジストリと通信します。
IoT Edge での接続済みレジストリの使用の概要については、「Azure IoT Edge で接続済みレジストリを使用する」を参照してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
Azure IoT Hub。 デプロイ手順については、「Azure portal を使用して IoT Hub を作成する」を参照してください。
Azure 内の 2 つの接続済みレジストリ リソース。 デプロイ手順については、Azure CLI または Azure portal を使用するクイックスタートを参照してください。
- 上層では、接続済みレジストリは、ReadWrite または ReadOnly のいずれかのモードにできます。 この記事は ReadWrite モードを前提としており、接続済みレジストリ名は環境変数
$CONNECTED_REGISTRY_RW
に保存されます。 - 下層では、接続済みレジストリは ReadOnly モードである必要があります。 この記事は、接続済みレジストリ名が環境変数
$CONNECTED_REGISTRY_RO
に保存されることを前提としています。
- 上層では、接続済みレジストリは、ReadWrite または ReadOnly のいずれかのモードにできます。 この記事は ReadWrite モードを前提としており、接続済みレジストリ名は環境変数
クラウド レジストリにイメージをインポートする
az acr import コマンドを使用して、次のコンテナー イメージをクラウド レジストリにインポートします。 これらのイメージを既にインポートしている場合は、この手順をスキップします。
接続されたレジストリのイメージ
入れ子になった IoT Edge のシナリオをサポートするには、接続されたレジストリのランタイムのコンテナー イメージがプライベート Azure コンテナー レジストリで使用できる必要があります。 接続されたレジストリのイメージをプライベート レジストリにインポートするには、az acr import コマンドを使用します。
# Use the REGISTRY_NAME variable in the following Azure CLI commands to identify the registry
REGISTRY_NAME=<container-registry-name>
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/acr/connected-registry:0.8.0
IoT Edge と API プロキシのイメージ
入れ子になった IoT Edge で接続されたレジストリをサポートするには、IoT Edge と API プロキシのモジュールをデプロイする必要があります。 これらのイメージをプライベート レジストリにインポートします。
IoT Edge API プロキシ モジュールを使用すると、同じポート (443 など) で HTTPS プロトコルを使用して複数のサービスを公開できます。
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/azureiotedge-agent:1.2.4
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/azureiotedge-hub:1.2.4
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/azureiotedge-api-proxy:1.1.2
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/azureiotedge-diagnostics:1.2.4
Hello-world イメージ
接続されたレジストリをテストするには、hello-world
イメージをインポートします。 このリポジトリは、接続されたレジストリに同期され、接続されたレジストリのクライアントによってプルされます。
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/hello-world:1.1.2
接続済みレジストリの構成を取得する
各接続済みレジストリを階層内の IoT Edge デバイスにデプロイするには、Azure 内の接続済みレジストリ リソースから構成設定を取得する必要があります。 必要に応じて、接続済みレジストリごとに az acr connected-registry get-settings コマンドを実行して構成を取得します。
既定では、設定情報に同期トークンのパスワードは含まれていません。接続済みレジストリをデプロイするには、これも必要です。 必要に応じて、--generate-password 1
または --generate-password 2
パラメーターを渡してパスワードの 1 つを生成します。 生成されたパスワードを安全な場所に保存します。 もう一度取得することはできません。
警告
パスワードを再生成すると、同期トークンの資格情報がローテーションされます。 以前のパスワードを使用してデバイスを構成した場合は、構成を更新する必要があります。
# Use the REGISTRY_NAME variable in the following Azure CLI commands to identify the registry
REGISTRY_NAME=<container-registry-name>
# Run the command for each registry resource in the hierarchy
az acr connected-registry get-settings \
--registry $REGISTRY_NAME \
--name $CONNECTED_REGISTRY_RW \
--parent-protocol https
az acr connected-registry get-settings \
--registry $REGISTRY_NAME \
--name $CONNECTED_REGISTRY_RO \
--parent-protocol https
コマンドの出力には、レジストリ接続文字列と、関連する設定が含まれます。 次の出力例は、myconnectedregistry という名前の接続されたレジストリと親レジストリ contosoregistry の接続文字列を示しています。
{
"ACR_REGISTRY_CONNECTION_STRING": "ConnectedRegistryName=myconnectedregistry;SyncTokenName=myconnectedregistry-sync-token;SyncTokenPassword=xxxxxxxxxxxxxxxx;ParentGatewayEndpoint=contosoregistry.eastus.data.azurecr.io;ParentEndpointProtocol=https"
}
配置マニフェストを構成する
配置マニフェストは、IoT Edge デバイスにデプロイするモジュールを記述した JSON ドキュメントです。 詳しくは、「IoT Edge モジュールをどのように使用、構成、および再利用できるかを理解する」を参照してください。
Azure CLI を使用して接続済みレジストリ モジュールを各 IoT Edge デバイスにデプロイするには、次の配置マニフェストを JSON ファイルとしてローカルに保存します。 前のセクションの情報を使用して、各マニフェストで関連する JSON 値を更新します。 コマンドを実行して構成をデバイスに適用するとき、次のセクションのファイル パスを使用します。
上層の配置マニフェスト
上層のデバイスのために、次の内容を含む配置マニフェスト ファイル deploymentTopLayer.json
を作成します。 このマニフェストは、「クイック スタート: 接続済みレジストリを IoT Edge デバイスに展開する」で使用したものと似ています。
Note
クイックスタートを使用して接続済みレジストリを上層の IoT Edge デバイスに既にデプロイしている場合、入れ子になった階層の上層でそのレジストリを使用できます。 階層でこれを構成するには、このチュートリアルのデプロイ手順を変更します (これは示されていません)。
接続されたレジストリ モジュールの設定
前のセクションのトークン資格情報と接続文字列を使用して、
env
ノード内の関連する JSON 値を更新します。次の環境変数は、
env
ノードでは省略可能です。変数 説明 ACR_REGISTRY_LOGIN_SERVER
一意のホスト名または FQDN を指定します。 使用された場合、接続されたレジストリでは、このログイン サーバー値に対して行われた要求のみが受け入れられます。
値が指定されていない場合、接続されたレジストリには、任意のログイン サーバー値を使用してアクセスできます。ACR_REGISTRY_CERTIFICATE_VOLUME
接続されたレジストリに HTTPS 経由でアクセスできる場合は、HTTPS 証明書が格納されているボリュームをポイントします。
設定されていない場合、既定の場所は/var/acr/certs
です。ACR_REGISTRY_DATA_VOLUME
接続されたレジストリによってイメージが格納される既定の場所 /var/acr/data
を上書きします。
この場所は、コンテナーのボリューム バインドと一致している必要があります。重要
接続されたレジストリが 80 および 443 とは異なるポートでリッスンする場合は、
ACR_REGISTRY_LOGIN_SERVER
値 (指定されている場合) にポートを含める必要があります。 例:192.168.0.100:8080
.API プロキシ モジュールが使用されていない場合は、接続されたレジストリの
HostPort
バインドを設定する必要があります。 例:"createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"],\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"8080\"}]}}}"
API プロキシ モジュールの設定
- API プロキシは、
NGINX_DEFAULT_PORT
として構成されたポート 8000 でリッスンします。 API プロキシ設定の詳細については、IoT Edge の GitHub リポジトリを参照してください。
{
"modulesContent": {
"$edgeAgent": {
"properties.desired": {
"modules": {
"connected-registry": {
"settings": {
"image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/acr/connected-registry:0.8.0",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"]}}"
},
"type": "docker",
"env": {
"ACR_REGISTRY_CONNECTION_STRING": {
"value": "ConnectedRegistryName=<REPLACE_WITH_CONNECTED_REGISTRY_NAME>;SyncTokenName=<REPLACE_WITH_SYNC_TOKEN_NAME>;SyncTokenPassword=REPLACE_WITH_SYNC_TOKEN_PASSWORD;ParentGatewayEndpoint=<REPLACE_WITH_CLOUD_REGISTRY_NAME>.<REPLACE_WITH_CLOUD_REGISTRY_REGION>.data.azurecr.io;ParentEndpointProtocol=https"
}
},
"status": "running",
"restartPolicy": "always",
"version": "1.0"
},
"IoTEdgeAPIProxy": {
"settings": {
"image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-api-proxy:1.1.2",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8000/tcp\":[{\"HostPort\":\"8000\"}]}}}"
},
"type": "docker",
"env": {
"NGINX_DEFAULT_PORT": {
"value": "8000"
},
"CONNECTED_ACR_ROUTE_ADDRESS": {
"value": "connected-registry:8080"
},
"BLOB_UPLOAD_ROUTE_ADDRESS": {
"value": "AzureBlobStorageonIoTEdge:11002"
}
},
"status": "running",
"restartPolicy": "always",
"version": "1.0"
}
},
"runtime": {
"settings": {
"minDockerVersion": "v1.25",
"registryCredentials": {
"cloudregistry": {
"address": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io",
"password": "<REPLACE_WITH_SYNC_TOKEN_PASSWORD>",
"username": "<REPLACE_WITH_SYNC_TOKEN_NAME>"
}
}
},
"type": "docker"
},
"schemaVersion": "1.1",
"systemModules": {
"edgeAgent": {
"settings": {
"image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-agent:1.2.4",
"createOptions": ""
},
"type": "docker",
"env": {
"SendRuntimeQualityTelemetry": {
"value": "false"
}
}
},
"edgeHub": {
"settings": {
"image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/azureiotedge-hub:1.2.4",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
},
"type": "docker",
"status": "running",
"restartPolicy": "always"
}
}
}
},
"$edgeHub": {
"properties.desired": {
"routes": {
"route": "FROM /messages/* INTO $upstream"
},
"schemaVersion": "1.1",
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
}
}
}
下層の配置マニフェスト
下層のデバイスのために、次の内容を含む配置マニフェスト ファイル deploymentLowerLayer.json を作成します。
下層の配置ファイルは上層の配置ファイルに全体的に似ています。 違いは次のとおりです。
クラウド レジストリからではなく、上層の接続済みレジストリから必要なイメージをプルします。
上層の接続済みレジストリを設定するときに、ローカルで必要なすべてのイメージ (
azureiotedge-agent
、azureiotedge-hub
、azureiotedge-api-proxy
、acr/connected-registry
) が同期されるようにします。 下層の IoT デバイスは、上層の接続済みレジストリからこれらのイメージをプルする必要があります。上層の接続済みレジストリで認証を行うために、下層で構成された同期トークンが使用されます。
クラウド レジストリの FQDN ではなく、上層の接続済みレジストリの IP アドレスまたは FQDN を使用して、親ゲートウェイ エンドポイントが構成されます。
重要
次の配置マニフェストでは、親の接続済みレジストリをホストするデバイスの IP アドレスまたは FQDN として $upstream
が使用されます。 ただし、$upstream
は環境変数ではサポートされません。 接続済みレジストリは、親ゲートウェイ エンドポイントを取得するために環境変数 ACR_PARENT_GATEWAY_ENDPOINT
を読み取る必要があります。 $upstream
を使用する代わりに、接続済みレジストリは、別の環境変数からの IP アドレスまたは FQDN の動的解決をサポートしています。
入れ子になった IoT Edge では、親デバイスの IP アドレスまたは FQDN と同等の環境変数 $IOTEDGE_PARENTHOSTNAME
が下層にあります。 親 IP アドレスまたは FQDN のハードコーディングを回避するために、この環境変数を、接続文字列で ParentGatewayEndpoint
の値として手動で置き換えてください。 この例の親デバイスは、ポート 8000 で nginx
を実行するため、$IOTEDGE_PARENTHOSTNAME:8000
を渡します。 また、ParentEndpointProtocol
で適切なプロトコルを選択する必要もあります。
{
"modulesContent": {
"$edgeAgent": {
"properties.desired": {
"modules": {
"connected-registry": {
"settings": {
"image": "$upstream:8000/acr/connected-registry:0.8.0",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"]}}"
},
"type": "docker",
"env": {
"ACR_REGISTRY_CONNECTION_STRING": {
"value": "ConnectedRegistryName=<REPLACE_WITH_CONNECTED_REGISTRY_NAME>;SyncTokenName=<REPLACE_WITH_SYNC_TOKEN_NAME>;SyncTokenPassword=<REPLACE_WITH_SYNC_TOKEN_PASSWORD>;ParentGatewayEndpoint=$IOTEDGE_PARENTHOSTNAME:8000;ParentEndpointProtocol=https"
}
},
"status": "running",
"restartPolicy": "always",
"version": "1.0"
},
"IoTEdgeApiProxy": {
"settings": {
"image": "$upstream:8000/azureiotedge-api-proxy:1.1.2",
"createOptions": "{\"HostConfig\": {\"PortBindings\": {\"8000/tcp\": [{\"HostPort\": \"8000\"}]}}}"
},
"type": "docker",
"version": "1.0",
"env": {
"NGINX_DEFAULT_PORT": {
"value": "8000"
},
"CONNECTED_ACR_ROUTE_ADDRESS": {
"value": "connected-registry:8080"
},
"NGINX_CONFIG_ENV_VAR_LIST": {
"value": "NGINX_DEFAULT_PORT,BLOB_UPLOAD_ROUTE_ADDRESS,CONNECTED_ACR_ROUTE_ADDRESS,IOTEDGE_PARENTHOSTNAME,DOCKER_REQUEST_ROUTE_ADDRESS"
},
"BLOB_UPLOAD_ROUTE_ADDRESS": {
"value": "AzureBlobStorageonIoTEdge:11002"
}
},
"status": "running",
"restartPolicy": "always",
"startupOrder": 3
}
},
"runtime": {
"settings": {
"minDockerVersion": "v1.25",
"registryCredentials": {
"connectedregistry": {
"address": "$upstream:8000",
"password": "<REPLACE_WITH_SYNC_TOKEN_PASSWORD>",
"username": "<REPLACE_WITH_SYNC_TOKEN_NAME>"
}
}
},
"type": "docker"
},
"schemaVersion": "1.1",
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:8000/azureiotedge-agent:1.2.4",
"createOptions": ""
},
"type": "docker",
"env": {
"SendRuntimeQualityTelemetry": {
"value": "false"
}
}
},
"edgeHub": {
"settings": {
"image": "$upstream:8000/azureiotedge-hub:1.2.4",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
},
"type": "docker",
"status": "running",
"restartPolicy": "always"
}
}
}
},
"$edgeHub": {
"properties.desired": {
"routes": {
"route": "FROM /messages/* INTO $upstream"
},
"schemaVersion": "1.1",
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
}
}
}
接続済みレジストリ モジュールを設定してデプロイする
次の手順は、「チュートリアル: IoT Edge デバイスの階層を作成する」を応用したもので、接続済みレジストリ モジュールを IoT Edge 階層にデプロイすることに特化しています。 個々の手順について詳しくは、このチュートリアルを参照してください。
上層と下層のデバイスを作成する
既存の ARM テンプレートを使用して、上層と下層の仮想マシンを作成します。 このテンプレートでは、IoT Edge エージェントもインストールされます。 代わりに独自のデバイスからデプロイする場合は、デバイスを手動で設定する方法を学習するために、「チュートリアル: Azure IoT Edge for Linux をインストールまたはアンインストールする」を参照してください。
重要
上層のデバイスにデプロイされたモジュールに後でアクセスするために、受信ポート 8000、443、5671、8883 を開く必要があります。 構成手順については、「Azure portal を使用して仮想マシンへのポートを開く方法」を参照してください。
階層を作成して構成する
Azure CLI または Azure Cloud Shell で次の手順を実行して、iotedge-config
ツールで階層を作成して構成します。
構成ツールをダウンロードします。
mkdir nested_iot_edge_tutorial cd ~/nested_iot_edge_tutorial wget -O iotedge_config.tar "https://github.com/Azure-Samples/iotedge_config_cli/releases/download/latest/iotedge_config_cli.tar.gz" tar -xvf iotedge_config.tar
この手順では、チュートリアル ディレクトリに
iotedge_config_cli_release
フォルダーが作成されます。 デバイス階層の作成に使用されるテンプレート ファイルは、~/nested_iot_edge_tutorial/iotedge_config_cli_release/templates/tutorial
にあるiotedge_config.yaml
ファイルです。 同じディレクトリに、上層と下層の 2 つの配置マニフェストdeploymentTopLayer.json
およびdeploymentLowerLayer.json
ファイルがあります。自分の情報を使用して
iotedge_config.yaml
を編集します。iothub_hostname
、iot_name
、上層と下層の配置マニフェスト ファイル名、各層でアップストリームからイメージをプルするために作成したクライアント トークン資格情報を編集します。 次の例は、サンプルの構成ファイルです。config_version: "1.0" iothub: iothub_hostname: <REPLACE_WITH_HUB_NAME>.azure-devices.net iothub_name: <REPLACE_WITH_HUB_NAME> ## Authentication method used by IoT Edge devices: symmetric_key or x509_certificate authentication_method: symmetric_key ## Root certificate used to generate device CA certificates. Optional. If not provided a self-signed CA will be generated # certificates: # root_ca_cert_path: "" # root_ca_cert_key_path: "" ## IoT Edge configuration template to use configuration: template_config_path: "./templates/tutorial/device_config.toml" default_edge_agent: "$upstream:8000/azureiotedge-agent:1.2.4" ## Hierarchy of IoT Edge devices to create edgedevices: device_id: top-layer edge_agent: "<REPLACE_WITH_REGISTRY_NAME>.azurecr.io/azureiotedge-agent:1.2.4" ## Optional. If not provided, default_edge_agent will be used deployment: "./templates/tutorial/deploymentTopLayer.json" ## Optional. If provided, the given deployment file will be applied to the newly created device # hostname: "FQDN or IP" ## Optional. If provided, install.sh will not prompt user for this value nor the parent_hostname value container_auth: ## The token used to pull the image from cloud registry serveraddress: "<REPLACE_WITH_REGISTRY_NAME>.azurecr.io" username: "<REPLACE_WITH_SYNC_TOKEN_NAME_FOR_TOP_LAYER>" password: "<REPLACE_WITH_SYNC_TOKEN_PASSWORD_FOR_TOP_LAYER>" child: - device_id: lower-layer deployment: "./templates/tutorial/deploymentLowerLayer.json" ## Optional. If provided, the given deployment file will be applied to the newly created device # hostname: "FQDN or IP" ## Optional. If provided, install.sh will not prompt user for this value nor the parent_hostname value container_auth: ## The token used to pull the image from parent connected registry serveraddress: "$upstream:8000" username: "<REPLACE_WITH_SYNC_TOKEN_NAME_FOR_LOWER_LAYER>" password: "<REPLACE_WITH_SYNC_TOKEN_PASSWORD_FOR_LOWER_LAYER>"
上層と下層の配置ファイル (deploymentTopLayer.json と deploymentLowerLayer.json) を準備します。 この記事の前半で作成した配置マニフェスト ファイルを次のフォルダーにコピーします:
~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial
。iotedge_config_cli_release ディレクトリに移動し、ツールを実行して IoT Edge デバイスの階層を作成します。
cd ~/nestedIotEdgeTutorial/iotedge_config_cli_release ./iotedge_config --config ~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial/iotedge_config.yaml --output ~/nestedIotEdgeTutorial/iotedge_config_cli_release/outputs -f
--output
パラメーターを指定すると、このツールでは、選択したディレクトリにデバイス証明書、証明書バンドル、ログ ファイルが作成されます。-f
パラメーターを指定すると、エラーを回避し、ハブをクリーンな状態に保つために、IoT Hub にある既存の IoT Edge デバイスが自動的に検索され、削除されます。このツールの実行時間は数分間になる場合があります。
scp
を使用して、前の手順で生成された top-layer.zip および lower-layer.zip ファイルを対応する上層と下層の仮想マシンにコピーします。scp <PATH_TO_CONFIGURATION_BUNDLE> <USER>@<VM_IP_OR_FQDN>:~
上層のデバイスに接続して、構成バンドルをインストールします。
構成バンドルを解凍します。 最初に、zip をインストールしておく必要があります。
sudo apt install zip unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip top-layer.zip
sudo ./install.sh
を実行します。 IP アドレスまたはホスト名を入力します。 IP アドレスを使用することをお勧めします。sudo iotedge list
を実行して、すべてのモジュールが実行されていることを確認します。
下層のデバイスに接続して、構成バンドルをインストールします。
構成バンドルを解凍します。 最初に、zip をインストールしておく必要があります。
sudo apt install zip unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip lower-layer.zip
sudo ./install.sh
を実行します。 デバイスと親の IP アドレスまたはホスト名を入力します。 IP アドレスを使用することをお勧めします。sudo iotedge list
を実行して、すべてのモジュールが実行されていることを確認します。
デバイス構成用の配置ファイルを指定しなかった場合、あるいは上層または下層のデバイスで、無効な配置マニフェストなどのデプロイの問題が発生した場合は、手動でモジュールをデプロイします。 次のセクションを参照してください。
接続済みレジストリ モジュールを手動でデプロイする
次のコマンドを使用して、接続済みレジストリ モジュールを IoT Edge デバイスに手動でデプロイします。
az iot edge set-modules \
--device-id <device-id> \
--hub-name <hub-name> \
--content <deployment-manifest-filename>
詳細については、「Azure CLI を使用して Azure IoT Edge モジュールをデプロイする」を参照してください。
デプロイが正常に完了すると、接続済みレジストリで Online
状態が示されます。
接続済みレジストリの状態を確認するには、次の az acr connected-registry show コマンドを使用します。
az acr connected-registry show \
--registry $REGISTRY_NAME \
--name $CONNECTED_REGISTRY_RO \
--output table
接続済みレジストリのデプロイが完了するまで、数分間待機する必要がある場合があります。
デプロイが正常に完了すると、接続済みレジストリで Online
状態が示されます。
デプロイのトラブルシューティングを行うには、影響を受けたデバイスで iotedge check
を実行します。 詳細については、トラブルシューティングのヒントに関するページをご覧ください。
次のステップ
このクイックスタートでは、接続済みレジストリを入れ子になった IoT Edge デバイスにデプロイする方法について学習しました。 次のガイドに進み、新しくデプロイされた接続済みレジストリからイメージをプルする方法について学習してください。