Verwenden Sie Azure CLI-Befehle, um eine verbundene Azure-Container-Registry in einer verschachtelten Azure IoT Edge-Hierarchie bereitzustellen.
In diesem Tutorial verwenden Sie Azure CLI-Befehle, um eine zweischichtige Hierarchie von Azure IoT Edge-Geräten zu erstellen und eine verbundene Registrierung als ein Modul auf jeder Schicht bereitzustellen. In diesem Szenario kommuniziert ein Gerät auf der obersten Ebene mit einer Cloudregistrierung. Ein Gerät auf der unteren Ebene kommuniziert mit seiner verbundenen übergeordneten Registrierung auf der obersten Ebene.
Einen Überblick über die Verwendung einer verbundenen Registrierung mit IoT Edge finden Sie unter Verwendung einer verbundenen Registrierung mit Azure IoT Edge.
Voraussetzungen
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Azure IoT Hub. Schritte zur Bereitstellung finden Sie unter Erstellen eines IoT-Hubs über das Azure-Portal.
Zwei verbundene Registry-Ressourcen in Azure. Informationen zu den Bereitstellungsschritten finden Sie unter Schnellstarts mit der Azure CLI oder dem Azure Portal.
- Für die oberste Ebene kann die angeschlossene Registrierung entweder im ReadWrite- oder im ReadOnly-Modus sein. Dieser Artikel geht vom ReadWrite-Modus aus, und der Name der verbundenen Registrierung wird in der Umgebungsvariablen
$CONNECTED_REGISTRY_RW
gespeichert. - Für die untere Schicht muss die angeschlossene Registrierung im ReadOnly-Modus sein. Dieser Artikel geht davon aus, dass der Name der verbundenen Registrierung in der Umgebungsvariablen
$CONNECTED_REGISTRY_RO
gespeichert ist.
- Für die oberste Ebene kann die angeschlossene Registrierung entweder im ReadWrite- oder im ReadOnly-Modus sein. Dieser Artikel geht vom ReadWrite-Modus aus, und der Name der verbundenen Registrierung wird in der Umgebungsvariablen
Importieren von Images in die Cloudregistrierung
Importieren Sie mit dem Befehl az acr import die folgenden Containerimages in Ihre Cloudregistrierung. Überspringen Sie diesen Schritt, wenn Sie diese Images bereits importiert haben.
Image der verbundenen Registrierung
Um geschachtelte IoT Edge-Szenarien zu unterstützen, muss das Containerimage der Runtime der verbundenen Registrierung in Ihrer privaten Azure-Containerregistrierung verfügbar sein. Mit dem Befehl az acr import können Sie das Image der verbundenen Registrierung in Ihre private Registrierung importieren.
# 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
Images von IoT Edge- und API-Proxy
Um die verbundene Registrierung für geschachteltes IoT Edge zu unterstützen, müssen Sie Module für den IoT Edge- und API-Proxy bereitstellen. Importieren Sie diese Images in Ihre private Registrierung.
Das IoT Edge- und API-Proxymodul ermöglicht einem IoT Edge Gerät, mehrere Dienste über das HTTPS-Protokoll am selben Port verfügbar zu machen, z. B. 443.
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
Image „hello-world“
Importieren Sie das Image, um die verbundene Registrierung hello-world
zu testen. Dieses Repository wird mit der verbundenen Registrierung synchronisiert und von den verbundenen Registrierungsclients gepullt.
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/hello-world:1.1.2
Abrufen der verbundenen Registrierungskonfiguration
Um jede verbundene Registrierung auf dem IoT Edge-Gerät in der Hierarchie bereitzustellen, müssen Sie die Konfigurationseinstellungen von der verbundenen Registrierungsressource in Azure abrufen. Führen Sie bei Bedarf den Befehl az acr connected-registry get-settings für jede verbundene Registrierung aus, um die Konfiguration abzurufen.
Standardmäßig enthalten die Einstellungsinformationen nicht das Sync-Token-Kennwort, das ebenfalls für die Bereitstellung der verbundenen Registrierung benötigt wird. Optional können Sie eines der Passwörter generieren, indem Sie den Parameter --generate-password 1
oder --generate-password 2
übergeben. Speichern Sie das generierte Passwort an einem sicheren Ort. Es kann nicht wieder abgerufen werden.
Warnung
Durch die Neuerstellung eines Kennworts werden die Sync-Token-Anmeldeinformationen ausgetauscht. Wenn Sie ein Gerät mit dem vorherigen Passwort konfiguriert haben, müssen Sie die Konfiguration aktualisieren.
# 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
Die Befehlsausgabe umfasst die Registrierungsverbindungszeichenfolge und die zugehörigen Einstellungen. Die folgende Beispielausgabe zeigt die Verbindungszeichenfolge für die verbundene Registrierung namens myconnectedregistry mit der übergeordneten Registrierung contosoregistry:
{
"ACR_REGISTRY_CONNECTION_STRING": "ConnectedRegistryName=myconnectedregistry;SyncTokenName=myconnectedregistry-sync-token;SyncTokenPassword=xxxxxxxxxxxxxxxx;ParentGatewayEndpoint=contosoregistry.eastus.data.azurecr.io;ParentEndpointProtocol=https"
}
Konfigurieren von Bereitstellungsmanifesten
Ein Bereitstellungsmanifest ist ein JSON-Dokument, das beschreibt, welche Module auf einem IoT Edge-Gerät bereitgestellt werden sollen. Weitere Informationen finden Sie unter Verstehen, wie IoT Edge-Module verwendet, konfiguriert und wiederverwendet werden können.
Um das verbundene Registrierungsmodul auf jedem IoT Edge-Gerät mithilfe der Azure CLI bereitzustellen, speichern Sie die folgenden Bereitstellungsmanifeste lokal als JSON-Dateien. Verwenden Sie die Informationen aus den vorherigen Abschnitten, um die relevanten JSON-Werte in jedem Manifest zu aktualisieren. Verwenden Sie die Dateipfade im nächsten Abschnitt, wenn Sie den Befehl ausführen, um die Konfiguration auf Ihr Gerät anzuwenden.
Bereitstellungsmanifest für die oberste Schicht
Erstellen Sie für das Gerät auf der obersten Ebene eine Bereitstellungsmanifestdatei deploymentTopLayer.json
mit dem folgenden Inhalt. Dieses Manifest ähnelt dem, das in Quickstart verwendet wird: Bereitstellen einer verbundenen Registrierung auf einem IoT Edge-Gerät.
Hinweis
Wenn Sie bereits eine verbundene Registrierung auf einem IoT-Edge-Gerät der obersten Ebene mithilfe der Schnellstartanleitung bereitgestellt haben, können Sie sie auf der obersten Ebene einer verschachtelten Hierarchie verwenden. Ändern Sie die Bereitstellungsschritte in diesem Tutorial, um sie in der Hierarchie zu konfigurieren (nicht gezeigt).
Einstellungen für verbundene Registrierungsmodule
Verwenden Sie die Token-Anmeldeinformationen und die Verbindungszeichenfolge aus den vorherigen Abschnitten, um die relevanten JSON-Werte im
env
Knoten zu aktualisieren.Die folgenden Umgebungsvariablen sind optional im
env
Knoten:Variable BESCHREIBUNG ACR_REGISTRY_LOGIN_SERVER
Gibt einen eindeutigen Hostnamen oder FQDN an. Bei Verwendung akzeptiert die verbundene Registrierung nur Anforderungen, die an diesen Anmeldeserverwert gesendet werden.
Wenn kein Wert angegeben wird, kann auf die verbundene Registrierung mit einem beliebigen Anmeldeserverwert zugegriffen werden.ACR_REGISTRY_CERTIFICATE_VOLUME
Wenn auf Ihre verbundene Registrierung über HTTPS zugegriffen werden kann, verweist sie auf das Verzeichnis, auf dem die HTTPS-Zertifikate gespeichert sind.
Wenn nicht festgelegt, ist der Standardspeicherort/var/acr/certs
.ACR_REGISTRY_DATA_VOLUME
Überschreibt den Standardspeicherort /var/acr/data
, an dem die Images von der verbundenen Registrierung gespeichert werden.
Dieser Speicherort muss mit der Verzeichnisbindung für den Container übereinstimmen.Wichtig
Wenn die verbundene Registrierung auf einen anderen Port als 80 und 443 lauscht, muss der Wert
ACR_REGISTRY_LOGIN_SERVER
(sofern angegeben) den Port enthalten. Beispiel:192.168.0.100:8080
.Wenn das API-Proxymodul nicht verwendet wird, sollte eine
HostPort
Bindung für die verbundene Registrierung festgelegt werden. Beispiel:"createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"],\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"8080\"}]}}}"
API-Proxymodul Einstellungen
- Der API-Proxy lauscht auf Port 8000, der als
NGINX_DEFAULT_PORT
konfiguriert ist. Weitere Informationen zu den API-Proxyeinstellungen finden Sie im IoT Edge GitHub Repository.
{
"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
}
}
}
}
}
Bereitstellungsmanifest für die untere Schicht
Erstellen Sie für das Gerät auf der unteren Ebene eine Bereitstellungsmanifestdatei deploymentLowerLayer.json mit dem folgenden Inhalt.
Insgesamt ähnelt die Bereitstellungsdatei der unteren Schicht der Bereitstellungsdatei der oberen Schicht. Folgende Unterschiede bestehen:
Es zieht die erforderlichen Bilder aus dem mit der obersten Schicht verbundenen Register und nicht aus dem Cloud-Register.
Wenn Sie die verbundene Registrierung der obersten Ebene einrichten, stellen Sie sicher, dass sie alle erforderlichen Images lokal synchronisiert, einschließlich
azureiotedge-agent
,azureiotedge-hub
,azureiotedge-api-proxy
undacr/connected-registry
. Das IoT-Gerät der unteren Schicht muss diese Bilder von der angeschlossenen Registrierung der oberen Schicht beziehen.Sie verwendet das auf der unteren Schicht konfigurierte Sync-Token, um sich bei der mit der oberen Schicht verbundenen Registrierung zu authentifizieren.
Er konfiguriert den übergeordneten Gateway-Endpunkt mit der IP-Adresse oder dem FQDN der mit der obersten Schicht verbundenen Registrierung und nicht mit dem FQDN der Cloud-Registrierung.
Wichtig
Im folgenden Bereitstellungsmanifest wird $upstream
als IP-Adresse oder FQDN des Geräts verwendet, das die übergeordnete verbundene Registrierung hostet. Allerdings wird $upstream
in einer Umgebungsvariablen nicht unterstützt. Die angeschlossene Registrierung muss die Umgebungsvariable ACR_PARENT_GATEWAY_ENDPOINT
lesen, um den Endpunkt des übergeordneten Gateways zu erhalten. Anstatt $upstream
zu verwenden, unterstützt die angeschlossene Registrierung die dynamische Auflösung der IP-Adresse oder des FQDN aus einer anderen Umgebungsvariablen.
Auf dem verschachtelten IoT Edge gibt es auf der unteren Ebene eine Umgebungsvariable $IOTEDGE_PARENTHOSTNAME
, die der IP-Adresse oder dem FQDN des übergeordneten Geräts entspricht. Ersetzen Sie die Umgebungsvariable manuell als Wert von ParentGatewayEndpoint
in der Verbindungszeichenfolge, um die Festcodierung der übergeordneten IP-Adresse oder des FQDN zu vermeiden. Da auf dem übergeordneten Gerät in diesem Beispiel nginx
an Port 8000 ausgeführt wird, übergeben Sie $IOTEDGE_PARENTHOSTNAME:8000
. Sie müssen auch das richtige Protokoll in ParentEndpointProtocol
auswählen.
{
"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
}
}
}
}
}
Einrichten und Bereitstellen von verbundenen Registrierungsmodulen
Die folgenden Schritte sind an das Tutorial angepasst: Erstellen einer Hierarchie von IoT Edge-Geräten und sind spezifisch für die Bereitstellung verbundener Registrierungsmodule in der IoT Edge-Hierarchie. Einzelheiten zu den einzelnen Schritten finden Sie in dieser Anleitung.
Erstellen von Geräten der oberen und unteren Schicht
Erstellen von VMs der obersten und unteren Ebene unter Verwendung einer vorhandenen ARM-Vorlage. Mit der Vorlage wird auch der IoT Edge-Agent installiert. Wenn Sie stattdessen von Ihren eigenen Geräten aus bereitstellen möchten, siehe Tutorial: Azure IoT Edge für Linux installieren oder deinstallieren, um zu erfahren, wie Sie das Gerät manuell einrichten.
Wichtig
Stellen Sie sicher, dass Sie für den späteren Zugriff auf die auf dem Gerät der obersten Schicht installierten Module die folgenden eingehenden Ports öffnen: 8000, 443, 5671, 8883. Die Konfigurationsschritte finden Sie unter Öffnen von Ports für eine virtuelle Maschine mit dem Azure-Portal.
Erstellen und Konfigurieren der Hierarchie
Verwenden Sie das iotedge-config
Tool, um Ihre Hierarchie zu erstellen und zu konfigurieren, indem Sie die folgenden Schritte in der Azure CLI oder Azure Cloud Shell ausführen:
Laden Sie das Konfigurationstool herunter.
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
In diesem Schritt wird der Ordner
iotedge_config_cli_release
in Ihrem Lehrgangsverzeichnis erstellt. Die Vorlagendatei, die zum Erstellen Ihrer Gerätehierarchie verwendet wird, ist die Dateiiotedge_config.yaml
unter~/nested_iot_edge_tutorial/iotedge_config_cli_release/templates/tutorial
. Im selben Verzeichnis befinden sich zwei Deployment-Manifeste für die obere und untere Schicht:deploymentTopLayer.json
unddeploymentLowerLayer.json
Dateien.Bearbeiten Sie
iotedge_config.yaml
mit Ihren Informationen. Bearbeiten Sie die Dateinameniothub_hostname
undiot_name
der Bereitstellungsmanifeste für die oberste und die untere Ebene sowie die Clienttoken-Anmeldeinformationen, die Sie erstellt haben, um Images upstream von jeder Ebene zu pullen. Das folgende Beispiel ist eine Beispielkonfigurationsdatei: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>"
Bereiten Sie die Bereitstellungsdateien der obersten und unteren Schicht vor: deploymentTopLayer.json und deploymentLowerLayer.json. Kopieren Sie die zuvor in diesem Artikel erstellten Bereitstellungsmanifestdateien in den folgenden Ordner:
~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial
.Navigieren Sie zu Ihrem Verzeichnis iotedge_config_cli_release, und führen Sie das Tool aus, um Ihre Hierarchie von IoT Edge-Geräten zu erstellen.
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
Mit dem Parameter
--output
erstellt das Tool die Gerätezertifikate, Zertifikatpakete und eine Protokolldatei in einem Verzeichnis Ihrer Wahl. Mit dem Parameter-f
sucht das Tool automatisch nach vorhandenen IoT Edge-Geräten auf Ihrer IoT Hub-Instanz und entfernt diese, um Fehler zu vermeiden und für Ihren Hub den bereinigten Zustand sicherzustellen.Das Programm kann mehrere Minuten lang laufen.
Kopieren Sie die im vorherigen Schritt generierten Dateien top-layer.zip und lower-layer.zip mithilfe von
scp
auf die entsprechenden VMs der obersten und unteren Schicht:scp <PATH_TO_CONFIGURATION_BUNDLE> <USER>@<VM_IP_OR_FQDN>:~
Stellen Sie eine Verbindung mit dem Gerät der obersten Schicht her, um das Konfigurationspaket zu installieren.
Entpacken Sie das Konfigurationsbündel. Sie müssen zuerst zip installieren.
sudo apt install zip unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip top-layer.zip
sudo ./install.sh
ausführen. Geben Sie die IP-Adresse oder den Hostnamen ein. Wir empfehlen die Verwendung der IP-Adresse.Führen Sie
sudo iotedge list
aus, um zu bestätigen, dass alle Module ausgeführt werden.
Stellen Sie eine Verbindung mit dem Gerät der unteren Schicht her, um das Konfigurationspaket zu installieren.
Entpacken Sie das Konfigurationsbündel. Sie müssen zuerst zip installieren.
sudo apt install zip unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip lower-layer.zip
sudo ./install.sh
ausführen. Geben Sie die IP-Adressen oder Hostnamen des Geräts und des übergeordneten Geräts ein. Wir empfehlen die Verwendung der IP-Adressen.Führen Sie
sudo iotedge list
aus, um zu bestätigen, dass alle Module ausgeführt werden.
Wenn Sie keine Bereitstellungsdatei für die Gerätekonfiguration angegeben haben oder wenn Probleme bei der Bereitstellung auftreten, z. B. ein ungültiges Bereitstellungsmanifest auf dem Gerät der obersten oder unteren Schicht, stellen Sie die Module manuell bereit. Informationen hierzu finden Sie im nächsten Abschnitt.
Manuelle Bereitstellung des verbundenen Registrierungsmoduls
Verwenden Sie den folgenden Befehl, um das verbundene Registrierungsmodul manuell auf einem IoT Edge-Gerät bereitzustellen:
az iot edge set-modules \
--device-id <device-id> \
--hub-name <hub-name> \
--content <deployment-manifest-filename>
Einzelheiten finden Sie unter Bereitstellung von Azure IoT Edge-Modulen mit Azure CLI.
Nach erfolgreicher Bereitstellung weist die verbundene Registrierung den Status Online
auf.
Um den Status der verbundenen Registrierung zu überprüfen, verwenden Sie den folgenden Befehl az acr connected-registry show:
az acr connected-registry show \
--registry $REGISTRY_NAME \
--name $CONNECTED_REGISTRY_RO \
--output table
Möglicherweise müssen Sie einige Minuten warten, bis die Bereitstellung der verbundenen Registrierung abgeschlossen ist.
Nach erfolgreicher Bereitstellung weist die verbundene Registrierung den Status Online
auf.
Führen Sie iotedge check
auf dem betroffenen Gerät aus, um eine Fehlersuche durchzuführen. Weitere Informationen finden Sie unter Problembehandlung.
Nächste Schritte
In diesem Schnellstart haben Sie gelernt, wie Sie eine verbundene Registrierung für ein verschachteltes IoT Edge-Gerät bereitstellen. Fahren Sie mit der nächsten Anleitung fort, um zu erfahren, wie Sie Bilder aus der neu eingerichteten verbundenen Registrierung abrufen.