Zelfstudie: Een verbonden register implementeren in een geneste IoT Edge-hiërarchie
In deze zelfstudie gebruikt u Azure CLI-opdrachten om een tweelaagshiërarchie van Azure IoT Edge-apparaten te maken en een verbonden register te implementeren als module op elke laag. In dit scenario communiceert een apparaat in de bovenste laag met een cloudregister. Een apparaat in de onderste laag communiceert met het gekoppelde bovenliggende register in de bovenste laag.
Zie Verbonden register gebruiken met Azure IoT Edge voor een overzicht van het gebruik van een verbonden register met IoT Edge.
Vereisten
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
Azure IoT Hub. Zie Een IoT-hub maken met behulp van de Azure Portal voor implementatiestappen.
Twee verbonden registerresources in Azure. Zie quickstarts met de Azure CLI of Azure Portal voor implementatiestappen.
- Voor de bovenste laag kan het verbonden register zich in de modus ReadWrite of ReadOnly bevinden. In dit artikel wordt ervan uitgegaan dat de readWrite-modus wordt gebruikt en dat de naam van het verbonden register wordt opgeslagen in de omgevingsvariabele
$CONNECTED_REGISTRY_RW
. - Voor de onderste laag moet het verbonden register zich in de modus ReadOnly bevinden. In dit artikel wordt ervan uitgegaan dat de naam van het verbonden register is opgeslagen in de omgevingsvariabele
$CONNECTED_REGISTRY_RO
.
- Voor de bovenste laag kan het verbonden register zich in de modus ReadWrite of ReadOnly bevinden. In dit artikel wordt ervan uitgegaan dat de readWrite-modus wordt gebruikt en dat de naam van het verbonden register wordt opgeslagen in de omgevingsvariabele
Installatiekopieën importeren in uw cloudregister
Importeer de volgende containerinstallatiekopieën in uw cloudregister met behulp van de opdracht az acr import . Sla deze stap over als u deze installatiekopieën al hebt geïmporteerd.
Installatiekopieën van verbonden register
Ter ondersteuning van geneste IoT Edge scenario's moet de containerinstallatiekopie voor de verbonden registerruntime beschikbaar zijn in uw persoonlijke Azure-containerregister. Gebruik de opdracht az acr import om de verbonden registerinstallatiekopieën te importeren in uw privéregister.
# 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- en API-proxy-installatiekopieën
Als u het verbonden register op geneste IoT Edge wilt ondersteunen, moet u modules implementeren voor de IoT Edge en API-proxy. Importeer deze installatiekopieën in uw persoonlijke register.
Met de IoT Edge API-proxymodule kan een IoT Edge apparaat meerdere services beschikbaar maken met behulp van het HTTPS-protocol op dezelfde poort, zoals 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
Hello-world-afbeelding
Importeer de installatiekopieën om het verbonden register te hello-world
testen. Deze opslagplaats wordt gesynchroniseerd met het verbonden register en opgehaald door de verbonden registerclients.
az acr import \
--name $REGISTRY_NAME \
--source mcr.microsoft.com/hello-world:1.1.2
Configuratie van verbonden register ophalen
Als u elk verbonden register wilt implementeren op het IoT Edge apparaat in de hiërarchie, moet u configuratie-instellingen ophalen uit de verbonden registerresource in Azure. Voer indien nodig de opdracht az acr connected-registry get-settings uit voor elk verbonden register om de configuratie op te halen.
Standaard bevat de informatie over instellingen niet het wachtwoord voor het synchronisatietoken , dat ook nodig is om het verbonden register te implementeren. U kunt desgewenst een van de wachtwoorden genereren door de --generate-password 1
parameter of --generate-password 2
door te geven. Sla het gegenereerde wachtwoord op een veilige locatie op. Het kan niet opnieuw worden opgehaald.
Waarschuwing
Het opnieuw genereren van een wachtwoord roteert de referenties van het synchronisatietoken. Als u een apparaat hebt geconfigureerd met het vorige wachtwoord, moet u de configuratie bijwerken.
# 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
Opdrachtuitvoer bevat de register-connection string en gerelateerde instellingen. In de volgende voorbeelduitvoer ziet u de connection string voor het verbonden register met de naam myconnectedregistry met het bovenliggende register contosoregistry:
{
"ACR_REGISTRY_CONNECTION_STRING": "ConnectedRegistryName=myconnectedregistry;SyncTokenName=myconnectedregistry-sync-token;SyncTokenPassword=xxxxxxxxxxxxxxxx;ParentGatewayEndpoint=contosoregistry.eastus.data.azurecr.io;ParentEndpointProtocol=https"
}
Implementatiemanifesten configureren
Een implementatiemanifest is een JSON-document waarin wordt beschreven welke modules moeten worden geïmplementeerd op een IoT Edge-apparaat. Zie Begrijpen hoe IoT Edge modules kunnen worden gebruikt, geconfigureerd en hergebruikt voor meer informatie.
Als u de verbonden registermodule op elk IoT Edge apparaat wilt implementeren met behulp van de Azure CLI, slaat u de volgende implementatiemanifesten lokaal op als JSON-bestanden. Gebruik de informatie uit de vorige secties om de relevante JSON-waarden in elk manifest bij te werken. Gebruik de bestandspaden in de volgende sectie wanneer u de opdracht uitvoert om de configuratie toe te passen op uw apparaat.
Implementatiemanifest voor de bovenste laag
Maak voor het apparaat in de bovenste laag een implementatiemanifestbestand deploymentTopLayer.json
met de volgende inhoud. Dit manifest is vergelijkbaar met het manifest dat wordt gebruikt in Quickstart: Een verbonden register implementeren op een IoT Edge-apparaat.
Notitie
Als u al een verbonden register hebt geïmplementeerd op een bovenste laag IoT Edge apparaat met behulp van de quickstart, kunt u dit in de bovenste laag van een geneste hiërarchie gebruiken. Wijzig de implementatiestappen in deze zelfstudie om deze te configureren in de hiërarchie (niet weergegeven).
Instellingen voor verbonden registermodules
Gebruik de tokenreferenties en connection string uit de vorige secties om de relevante JSON-waarden in het
env
knooppunt bij te werken.De volgende omgevingsvariabelen zijn optioneel in het
env
knooppunt:Variabele Beschrijving ACR_REGISTRY_LOGIN_SERVER
Hiermee geeft u een unieke hostnaam of FQDN op. Indien gebruikt, accepteert het verbonden register alleen aanvragen voor deze aanmeldingsserverwaarde.
Als er geen waarde wordt opgegeven, kan het verbonden register worden geopend met elke waarde voor de aanmeldingsserver.ACR_REGISTRY_CERTIFICATE_VOLUME
Als het verbonden register toegankelijk is via HTTPS, verwijst u naar het volume waar de HTTPS-certificaten zijn opgeslagen.
Als dit niet is ingesteld, is/var/acr/certs
de standaardlocatie .ACR_REGISTRY_DATA_VOLUME
Overschrijft de standaardlocatie /var/acr/data
waar de installatiekopieën worden opgeslagen door het verbonden register.
Deze locatie moet overeenkomen met de volumebinding voor de container.Belangrijk
Als het verbonden register luistert op een andere poort dan 80 en 443, moet de
ACR_REGISTRY_LOGIN_SERVER
waarde (indien opgegeven) de poort bevatten. Bijvoorbeeld:192.168.0.100:8080
.Er
HostPort
moet een binding voor het verbonden register worden ingesteld als de API-proxymodule niet wordt gebruikt. Voorbeeld:"createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"],\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"8080\"}]}}}"
Instellingen voor API-proxymodules
- De API-proxy luistert op poort 8000 die is geconfigureerd als
NGINX_DEFAULT_PORT
. Zie de IoT Edge GitHub-opslagplaats voor meer informatie over de API-proxyinstellingen.
{
"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
}
}
}
}
}
Implementatiemanifest voor de onderste laag
Maak voor het apparaat in de onderste laag een implementatiemanifestbestand deploymentLowerLayer.json met de volgende inhoud.
Over het algemeen is het implementatiebestand van de onderste laag vergelijkbaar met het implementatiebestand van de bovenste laag. De verschillen zijn:
De vereiste installatiekopieën worden opgehaald uit het met de bovenste laag verbonden register in plaats van uit het cloudregister.
Wanneer u het met de bovenste laag verbonden register instelt, moet u ervoor zorgen dat alle vereiste installatiekopieën lokaal worden gesynchroniseerd, inclusief
azureiotedge-agent
,azureiotedge-hub
,azureiotedge-api-proxy
enacr/connected-registry
. Het IoT-apparaat in de onderste laag moet deze installatiekopieën ophalen uit het verbonden register van de bovenste laag.Het maakt gebruik van het synchronisatietoken dat is geconfigureerd op de onderste laag om te verifiëren met het verbonden register van de bovenste laag.
Het bovenliggende gateway-eindpunt wordt geconfigureerd met het IP-adres of de FQDN van het bovenste laag verbonden register in plaats van met de FQDN van het cloudregister.
Belangrijk
In het volgende implementatiemanifest $upstream
wordt gebruikt als het IP-adres of de FQDN van het apparaat dat als host fungeert voor het bovenliggende verbonden register. Wordt echter $upstream
niet ondersteund in een omgevingsvariabele. Het verbonden register moet de omgevingsvariabele ACR_PARENT_GATEWAY_ENDPOINT
lezen om het eindpunt van de bovenliggende gateway op te halen. In plaats van te gebruiken $upstream
, ondersteunt het verbonden register het dynamisch omzetten van het IP-adres of de FQDN vanuit een andere omgevingsvariabele.
Op de geneste IoT Edge bevindt zich een omgevingsvariabele $IOTEDGE_PARENTHOSTNAME
op de onderste laag die gelijk is aan het IP-adres of de FQDN van het bovenliggende apparaat. Vervang de omgevingsvariabele handmatig als de waarde van ParentGatewayEndpoint
in de connection string om te voorkomen dat het bovenliggende IP-adres of de FQDN wordt gecodeerd. Omdat het bovenliggende apparaat in dit voorbeeld wordt uitgevoerd nginx
op poort 8000, geeft u door $IOTEDGE_PARENTHOSTNAME:8000
. U moet ook het juiste protocol selecteren in 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
}
}
}
}
}
Verbonden registermodules instellen en implementeren
De volgende stappen zijn aangepast uit Zelfstudie: Een hiërarchie van IoT Edge apparaten maken en zijn specifiek voor het implementeren van verbonden registermodules in de IoT Edge-hiërarchie. Zie deze zelfstudie voor meer informatie over afzonderlijke stappen.
Apparaten in de bovenste en onderste laag maken
Virtuele machines in de bovenste en onderste laag maken met behulp van een bestaande ARM-sjabloon. Met de sjabloon wordt ook de IoT Edge-agent geïnstalleerd. Als u in plaats daarvan vanaf uw eigen apparaten wilt implementeren, raadpleegt u Zelfstudie: Azure IoT Edge voor Linux installeren of verwijderen voor meer informatie over het handmatig instellen van het apparaat.
Belangrijk
Voor latere toegang tot de modules die zijn geïmplementeerd op het apparaat in de bovenste laag, moet u de volgende poorten voor inkomend verkeer openen: 8000, 443, 5671, 8883. Zie Poorten openen op een virtuele machine met de Azure Portal voor configuratiestappen.
De hiërarchie maken en configureren
Gebruik het iotedge-config
hulpprogramma om uw hiërarchie te maken en te configureren door deze stappen te volgen in de Azure CLI of Azure Cloud Shell:
Download het configuratieprogramma.
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
Met deze stap maakt u de
iotedge_config_cli_release
map in de map zelfstudie. Het sjabloonbestand dat wordt gebruikt om uw apparaathiërarchie te maken, is hetiotedge_config.yaml
bestand in~/nested_iot_edge_tutorial/iotedge_config_cli_release/templates/tutorial
. In dezelfde map bevinden zich twee implementatiemanifesten voor de bovenste en onderste lagen:deploymentTopLayer.json
endeploymentLowerLayer.json
bestanden.Bewerken
iotedge_config.yaml
met uw gegevens. Bewerk de bestandsnamen van hetiothub_hostname
iot_name
implementatiemanifest , voor de bovenste laag en de onderste laag, en de clienttokenreferenties die u hebt gemaakt om installatiekopieën upstream uit elke laag op te halen. Het volgende voorbeeld is een voorbeeldconfiguratiebestand: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>"
Bereid de implementatiebestanden voor de bovenste en onderste laag voor: deploymentTopLayer.json en deploymentLowerLayer.json. Kopieer de implementatiemanifestbestanden die u eerder in dit artikel hebt gemaakt naar de volgende map:
~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial
.Navigeer naar de map iotedge_config_cli_release en voer het hulpprogramma uit om uw hiërarchie van IoT Edge apparaten te maken.
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
Met de
--output
parameter maakt het hulpprogramma de apparaatcertificaten, certificaatbundels en een logboekbestand in een map van uw keuze. Met de-f
parameter zoekt het hulpprogramma automatisch naar bestaande IoT Edge apparaten in uw IoT Hub en verwijdert deze om fouten te voorkomen en uw hub schoon te houden.Het hulpprogramma kan enkele minuten worden uitgevoerd.
Kopieer de gegenereerde top-layer.zip - en lower-layer.zip-bestanden die in de vorige stap zijn gegenereerd naar de bijbehorende virtuele machines in de bovenste en onderste laag met behulp van
scp
:scp <PATH_TO_CONFIGURATION_BUNDLE> <USER>@<VM_IP_OR_FQDN>:~
Maak verbinding met het apparaat in de bovenste laag om de configuratiebundel te installeren.
Pak de configuratiebundel uit. U moet eerst zip installeren.
sudo apt install zip unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip top-layer.zip
Voer
sudo ./install.sh
uit. Voer het IP-adres of de hostnaam in. U wordt aangeraden het IP-adres te gebruiken.Voer uit
sudo iotedge list
om te bevestigen dat alle modules worden uitgevoerd.
Maak verbinding met het apparaat in de onderste laag om de configuratiebundel te installeren.
Pak de configuratiebundel uit. U moet eerst zip installeren.
sudo apt install zip unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip lower-layer.zip
Voer
sudo ./install.sh
uit. Voer het apparaat en de bovenliggende IP-adressen of hostnamen in. U wordt aangeraden de IP-adressen te gebruiken.Voer uit
sudo iotedge list
om te bevestigen dat alle modules worden uitgevoerd.
Als u geen implementatiebestand voor apparaatconfiguratie hebt opgegeven of als er implementatieproblemen optreden, zoals een ongeldig implementatiemanifest op het apparaat in de bovenste of onderste laag, implementeert u de modules handmatig. Zie de volgende sectie.
De verbonden registermodule handmatig implementeren
Gebruik de volgende opdracht om de verbonden registermodule handmatig te implementeren op een IoT Edge apparaat:
az iot edge set-modules \
--device-id <device-id> \
--hub-name <hub-name> \
--content <deployment-manifest-filename>
Zie Azure IoT Edge-modules implementeren met Azure CLI voor meer informatie.
Na een geslaagde implementatie geeft het verbonden register de status weer van Online
.
Als u de status van het verbonden register wilt controleren, gebruikt u de volgende opdracht az acr connected-registry show :
az acr connected-registry show \
--registry $REGISTRY_NAME \
--name $CONNECTED_REGISTRY_RO \
--output table
Mogelijk moet u enkele minuten wachten totdat de implementatie van het verbonden register is voltooid.
Na een geslaagde implementatie geeft het verbonden register de status weer van Online
.
Als u problemen met een implementatie wilt oplossen, voert u uit iotedge check
op het betreffende apparaat. Zie Probleemoplossing voor meer informatie .
Volgende stappen
In deze quickstart hebt u geleerd hoe u een verbonden register implementeert op een geneste IoT Edge apparaat. Ga door naar de volgende handleiding voor meer informatie over het ophalen van installatiekopieën uit het zojuist geïmplementeerde verbonden register.