Dela via


Självstudie: Distribuera ett anslutet register till en kapslad IoT Edge hierarki

I den här självstudien använder du Azure CLI-kommandon för att skapa en hierarki med två lager med Azure IoT Edge-enheter och distribuera ett anslutet register som en modul på varje lager. I det här scenariot kommunicerar en enhet i det översta lagret med ett molnregister. En enhet i det nedre lagret kommunicerar med dess anslutna registerförordnare i det översta lagret.

En översikt över hur du använder ett anslutet register med IoT Edge finns i Använda anslutet register med Azure IoT Edge.

Förutsättningar

  • Azure IoT Hub. Distributionssteg finns i Skapa en IoT-hubb med hjälp av Azure Portal.

  • Två anslutna registerresurser i Azure. Information om distributionssteg finns i snabbstarter med Hjälp av Azure CLI eller Azure Portal.

    • För det översta lagret kan det anslutna registret vara i antingen ReadWrite- eller ReadOnly-läge. Den här artikeln förutsätter ReadWrite-läge och det anslutna registernamnet lagras i miljövariabeln $CONNECTED_REGISTRY_RW.
    • För det lägre lagret måste det anslutna registret vara i ReadOnly-läge. Den här artikeln förutsätter att det anslutna registernamnet lagras i miljövariabeln $CONNECTED_REGISTRY_RO.

Importera avbildningar till ditt molnregister

Importera följande containeravbildningar till ditt molnregister med kommandot az acr import . Hoppa över det här steget om du redan har importerat avbildningarna.

Avbildning av anslutet register

För att stödja kapslade IoT Edge scenarier måste containeravbildningen för den anslutna registerkörningen vara tillgänglig i ditt privata Azure-containerregister. Använd kommandot az acr import för att importera den anslutna registerbilden till ditt privata 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- och API-proxybilder

För att stödja det anslutna registret på kapslade IoT Edge måste du distribuera moduler för IoT Edge- och API-proxyn. Importera avbildningarna till ditt privata register.

Med IoT Edge API-proxymodul kan en IoT Edge-enhet exponera flera tjänster med hjälp av HTTPS-protokollet på samma port, till exempel 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-bild

Importera avbildningen hello-world för att testa det anslutna registret. Den här lagringsplatsen synkroniseras med det anslutna registret och hämtas av de anslutna registerklienterna.

az acr import \
  --name $REGISTRY_NAME \
  --source mcr.microsoft.com/hello-world:1.1.2

Hämta konfiguration av anslutna register

Om du vill distribuera varje anslutet register till den IoT Edge enheten i hierarkin måste du hämta konfigurationsinställningarna från den anslutna registerresursen i Azure. Om det behövs kör du kommandot az acr connected-registry get-settings för varje anslutet register för att hämta konfigurationen.

Som standard innehåller inte inställningsinformationen lösenordet för synkroniseringstoken , som också behövs för att distribuera det anslutna registret. Du kan också generera ett av lösenorden genom att skicka parametern --generate-password 1 eller --generate-password 2 . Spara det genererade lösenordet på en säker plats. Det går inte att hämta den igen.

Varning

Om du återskapar ett lösenord roteras autentiseringsuppgifterna för synkroniseringstoken. Om du har konfigurerat en enhet med det tidigare lösenordet måste du uppdatera konfigurationen.

# 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

Kommandoutdata innehåller registeranslutningssträngen och relaterade inställningar. I följande exempelutdata visas anslutningssträngen för det anslutna registret med namnet myconnectedregistry med det överordnade registrets contosoregistry:

{
  "ACR_REGISTRY_CONNECTION_STRING": "ConnectedRegistryName=myconnectedregistry;SyncTokenName=myconnectedregistry-sync-token;SyncTokenPassword=xxxxxxxxxxxxxxxx;ParentGatewayEndpoint=contosoregistry.eastus.data.azurecr.io;ParentEndpointProtocol=https"
}

Konfigurera distributionsmanifest

Ett distributionsmanifest är ett JSON-dokument som beskriver vilka moduler som ska distribueras till en IoT Edge enhet. Mer information finns i Förstå hur IoT Edge moduler kan användas, konfigureras och återanvändas.

Om du vill distribuera den anslutna registermodulen på varje IoT Edge enhet med hjälp av Azure CLI sparar du följande distributionsmanifest lokalt som JSON-filer. Använd informationen från föregående avsnitt för att uppdatera relevanta JSON-värden i varje manifest. Använd filsökvägarna i nästa avsnitt när du kör kommandot för att tillämpa konfigurationen på enheten.

Distributionsmanifest för det översta lagret

Skapa en distributionsmanifestfil deploymentTopLayer.json med följande innehåll för enheten på det översta lagret. Det här manifestet liknar det som används i snabbstarten: Distribuera ett anslutet register till en IoT Edge enhet.

Anteckning

Om du redan har distribuerat ett anslutet register till en IoT Edge enhet med hjälp av snabbstarten kan du använda det på det översta lagret i en kapslad hierarki. Ändra distributionsstegen i den här självstudien för att konfigurera den i hierarkin (visas inte).

Inställningar för ansluten registermodul

  • Använd tokenautentiseringsuppgifterna och anslutningssträngen från föregående avsnitt för att uppdatera relevanta JSON-värden i env noden.

  • Följande miljövariabler är valfria i env noden:

    Variabel Beskrivning
    ACR_REGISTRY_LOGIN_SERVER Anger ett unikt värdnamn eller FQDN. Om det anslutna registret används accepterar det endast begäranden som görs till det här inloggningsservervärdet.

    Om inget värde anges kan det anslutna registret nås med valfritt inloggningsservervärde.
    ACR_REGISTRY_CERTIFICATE_VOLUME Om ditt anslutna register kommer att vara tillgängligt via HTTPS pekar på volymen där HTTPS-certifikaten lagras.

    Om inte anges är /var/acr/certsstandardplatsen .
    ACR_REGISTRY_DATA_VOLUME Skriver över standardplatsen /var/acr/data där avbildningarna lagras av det anslutna registret.

    Den här platsen måste matcha volymbindningen för containern.

    Viktigt

    Om det anslutna registret lyssnar på en annan port än 80 och 443 måste värdet (om det ACR_REGISTRY_LOGIN_SERVER anges) innehålla porten. Exempel: 192.168.0.100:8080.

  • En HostPort bindning för det anslutna registret bör anges om API-proxymodulen inte används. Exempel:

     "createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/azureuser/connected-registry:/var/acr/data\"],\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"8080\"}]}}}"
    

Inställningar för API-proxymoduler

  • API-proxyn lyssnar på port 8000 konfigurerad som NGINX_DEFAULT_PORT. Mer information om API-proxyinställningarna finns i IoT Edge GitHub-lagringsplats.
{
    "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
                }
            }
        }
    }
}

Distributionsmanifest för det nedre lagret

För enheten på det nedre lagret skapar du en distributionsmanifestfildistributionLowerLayer.json med följande innehåll.

Sammantaget liknar distributionsfilen för det lägre lagret distributionsfilen på det översta lagret. Skillnaderna är:

  • Den hämtar de nödvändiga avbildningarna från det översta nivåanslutna registret i stället för från molnregistret.

    När du konfigurerar det översta lageranslutna registret kontrollerar du att det synkroniserar alla nödvändiga avbildningar lokalt, inklusive azureiotedge-agent, azureiotedge-hub, azureiotedge-api-proxyoch acr/connected-registry. Den lägre IoT-enheten måste hämta avbildningarna från det översta lagrets anslutna register.

  • Den använder synkroniseringstoken som konfigurerats på det lägre lagret för att autentisera med det översta lagrets anslutna register.

  • Den konfigurerar den överordnade gatewayslutpunkten med det översta lagrets anslutna registers IP-adress eller FQDN i stället för med molnregistrets FQDN.

Viktigt

I följande distributionsmanifest $upstream används som IP-adress eller FQDN för enheten som är värd för det överordnade anslutna registret. Stöds dock $upstream inte i en miljövariabel. Det anslutna registret måste läsa miljövariabeln ACR_PARENT_GATEWAY_ENDPOINT för att hämta den överordnade gatewayslutpunkten. I stället för att använda $upstreamstöder det anslutna registret dynamiskt matchning av IP-adressen eller FQDN från en annan miljövariabel.

På den kapslade IoT Edge finns det en miljövariabel $IOTEDGE_PARENTHOSTNAME på det nedre lagret som är lika med IP-adressen eller FQDN för den överordnade enheten. Ersätt miljövariabeln manuellt som värdet för i anslutningssträngen för att undvika hårdkodning av ParentGatewayEndpoint den överordnade IP-adressen eller FQDN. Eftersom den överordnade enheten i det här exemplet körs nginx på port 8000 skickar du $IOTEDGE_PARENTHOSTNAME:8000. Du måste också välja rätt protokoll i 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
                }
            }
        }
    }
}

Konfigurera och distribuera anslutna registermoduler

Följande steg är anpassade från Självstudie: Skapa en hierarki med IoT Edge enheter och är specifika för att distribuera anslutna registermoduler i IoT Edge-hierarkin. Se självstudien för mer information om enskilda steg.

Skapa enheter med översta lager och lägre lager

Skapa virtuella datorer på toppnivå och undernivå med hjälp av en befintlig ARM-mall. Mallen installerar även IoT Edge-agenten. Om du vill distribuera från dina egna enheter i stället kan du läsa Självstudie: Installera eller avinstallera Azure IoT Edge för Linux för att lära dig hur du konfigurerar enheten manuellt.

Viktigt

För senare åtkomst till modulerna som distribuerats på den översta lagerenheten, se till att du öppnar följande inkommande portar: 8000, 443, 5671, 8883. Konfigurationssteg finns i Så här öppnar du portar till en virtuell dator med Azure Portal.

Skapa och konfigurera hierarkin

iotedge-config Använd verktyget för att skapa och konfigurera hierarkin genom att följa dessa steg i Azure CLI eller Azure Cloud Shell:

  1. Ladda ned konfigurationsverktyget.

     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
    

    Det här steget skapar mappen i självstudiekatalogen iotedge_config_cli_release . Den mallfil som används för att skapa din enhetshierarki är iotedge_config.yaml filen som finns i ~/nested_iot_edge_tutorial/iotedge_config_cli_release/templates/tutorial. I samma katalog finns det två distributionsmanifest för de översta och nedre lagren: deploymentTopLayer.json och deploymentLowerLayer.json filer.

  2. Redigera iotedge_config.yaml med din information. iothub_hostname iot_nameRedigera , , distributionsmanifestets filnamn för det översta lagret och det lägre lagret och de autentiseringsuppgifter för klienttoken som du skapade för att hämta avbildningar från uppströms från varje lager. Följande exempel är en exempelkonfigurationsfil:

    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>"
    
  3. Förbered distributionsfilerna för det översta lagret och det lägre lagret: deploymentTopLayer.json och deploymentLowerLayer.json. Kopiera de distributionsmanifestfiler som du skapade tidigare i den här artikeln till följande mapp: ~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial.

  4. Gå till katalogen iotedge_config_cli_release och kör verktyget för att skapa hierarkin för IoT Edge enheter.

    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
    

    Med parametern --output skapar verktyget enhetscertifikat, certifikatpaket och en loggfil i valfri katalog. Med parametern -f söker verktyget automatiskt efter befintliga IoT Edge enheter i din IoT Hub och tar bort dem för att undvika fel och hålla hubben ren.

    Verktyget kan köras i flera minuter.

  5. Kopiera de genererade top-layer.zip - och lower-layer.zip-filerna som genererades i föregående steg till motsvarande virtuella datorer på översta och nedre nivån med hjälp av scp:

    scp <PATH_TO_CONFIGURATION_BUNDLE>   <USER>@<VM_IP_OR_FQDN>:~
    
  6. Anslut till den översta lagerenheten för att installera konfigurationspaketet.

    1. Packa upp konfigurationspaketet. Du måste installera ZIP först.

      sudo apt install zip
      unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip top-layer.zip
      
    2. Kör sudo ./install.sh. Ange IP-adressen eller värdnamnet. Vi rekommenderar att du använder IP-adressen.

    3. Kör sudo iotedge list för att bekräfta att alla moduler körs.

  7. Anslut till den lägre lagerenheten för att installera konfigurationspaketet.

    1. Packa upp konfigurationspaketet. Du måste installera ZIP först.

      sudo apt install zip
      unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip lower-layer.zip
      
    2. Kör sudo ./install.sh. Ange enhetens och de överordnade IP-adresserna eller värdnamnen. Vi rekommenderar att du använder IP-adresserna.

    3. Kör sudo iotedge list för att bekräfta att alla moduler körs.

Om du inte angav någon distributionsfil för enhetskonfiguration eller om distributionsproblem uppstår, till exempel ett ogiltigt distributionsmanifest på den översta eller lägre lagerenheten, distribuerar du modulerna manuellt. Se följande avsnitt.

Distribuera den anslutna registermodulen manuellt

Använd följande kommando för att distribuera den anslutna registermodulen manuellt på en IoT Edge enhet:

az iot edge set-modules \
  --device-id <device-id> \
  --hub-name <hub-name> \
  --content <deployment-manifest-filename>

Mer information finns i Distribuera Azure IoT Edge-moduler med Azure CLI.

Efter en lyckad distribution visar det anslutna registret statusen Online.

Om du vill kontrollera status för det anslutna registret använder du följande kommando az acr connected-registry show :

az acr connected-registry show \
  --registry $REGISTRY_NAME \
  --name $CONNECTED_REGISTRY_RO \
  --output table

Du kan behöva vänta några minuter tills distributionen av det anslutna registret har slutförts.

Efter en lyckad distribution visar det anslutna registret statusen Online.

Om du vill felsöka en distribution kör iotedge check du på den berörda enheten. Mer information finns i Felsökning.

Nästa steg

I den här snabbstarten har du lärt dig hur du distribuerar ett anslutet register till en kapslad IoT Edge enhet. Fortsätt till nästa guide för att lära dig hur du hämtar avbildningar från det nyligen distribuerade anslutna registret.