Sdílet prostřednictvím


Kurz: Nasazení připojeného registru do vnořené hierarchie IoT Edge

V tomto kurzu pomocí příkazů Azure CLI vytvoříte dvouvrstvou hierarchii zařízení Azure IoT Edge a nasadíte připojený registr jako modul v každé vrstvě. V tomto scénáři zařízení v horní vrstvě komunikuje s cloudovým registrem. Zařízení v nižší vrstvě komunikuje s připojeným nadřazeným registrem v horní vrstvě.

Přehled použití připojeného registru se službou IoT Edge najdete v tématu Použití připojeného registru se službou Azure IoT Edge.

Požadavky

  • Azure IoT Hub Postup nasazení najdete v tématu Vytvoření centra IoT pomocí webu Azure Portal.

  • Dva připojené prostředky registru v Azure Postup nasazení najdete v rychlých startech pomocí Azure CLI nebo webu Azure Portal.

    • V horní vrstvě může být připojený registr v režimu ReadWrite nebo ReadOnly. Tento článek předpokládá režim ReadWrite a připojený název registru je uložen v proměnné $CONNECTED_REGISTRY_RWprostředí .
    • Pro nižší vrstvu musí být připojený registr v režimu Jen pro čtení. Tento článek předpokládá, že název připojeného registru je uložen v proměnné $CONNECTED_REGISTRY_ROprostředí .

Import imagí do cloudového registru

Pomocí příkazu az acr import naimportujte následující image kontejneru do svého cloudového registru. Pokud jste tyto image už naimportovali, tento krok přeskočte.

Připojená image registru

Aby bylo možné podporovat vnořené scénáře IoT Edge, musí být image kontejneru pro připojený modul runtime registru dostupná ve vašem privátním registru kontejneru Azure. Pomocí příkazu az acr import naimportujte image připojeného registru do privátního registru.

# 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

Image proxy služby IoT Edge a rozhraní API

Pokud chcete podporovat připojený registr ve vnořeném IoT Edge, musíte nasadit moduly pro ioT Edge a proxy rozhraní API. Naimportujte tyto image do privátního registru.

Modul proxy rozhraní API služby IoT Edge umožňuje zařízení IoT Edge zpřístupnit více služeb pomocí protokolu HTTPS na stejném portu, jako je například 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

Obrázek Hello World

Pro testování připojeného registru naimportujte hello-world image. Toto úložiště se bude synchronizovat s připojeným registrem a vyžádá se připojenými klienty registru.

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

Načtení konfigurace připojeného registru

Pokud chcete nasadit každý připojený registr do zařízení IoT Edge v hierarchii, musíte načíst nastavení konfigurace z připojeného prostředku registru v Azure. V případě potřeby spusťte příkaz az acr connected-registry get-settings pro každý připojený registr a načtěte konfiguraci.

Ve výchozím nastavení informace o nastavení neobsahují heslo tokenu synchronizace, které je také potřeba k nasazení připojeného registru. Volitelně můžete vygenerovat jedno z hesel předáním parametru nebo --generate-password 2 parametru--generate-password 1. Uložte vygenerované heslo do bezpečného umístění. Znovu ho nelze načíst.

Upozorňující

Opětovné vygenerování hesla otočí přihlašovací údaje synchronizačního tokenu. Pokud jste nakonfigurovali zařízení pomocí předchozího hesla, musíte konfiguraci aktualizovat.

# 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

Výstup příkazu zahrnuje připojovací řetězec registru a související nastavení. Následující příklad výstupu ukazuje připojovací řetězec připojeného registru s názvem myconnectedregistry s nadřazeným registrem contosoregistry:

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

Konfigurace manifestů nasazení

Manifest nasazení je dokument JSON popisující moduly, které se mají nasadit do zařízení IoT Edge. Další informace najdete v tématu Vysvětlení způsobu použití, konfigurace a opětovného použití modulů IoT Edge.

Pokud chcete nasadit připojený modul registru na každé zařízení IoT Edge pomocí Azure CLI, uložte následující manifesty nasazení místně jako soubory JSON. Informace z předchozích částí slouží k aktualizaci relevantních hodnot JSON v každém manifestu. Při spuštění příkazu pro použití konfigurace na zařízení použijte cesty k souborům v další části.

Manifest nasazení pro nejvyšší vrstvu

Pro zařízení v horní vrstvě vytvořte soubor deploymentTopLayer.json manifestu nasazení s následujícím obsahem. Tento manifest se podobá manifestu použitému v rychlém startu: Nasazení připojeného registru do zařízení IoT Edge.

Poznámka:

Pokud jste už pomocí rychlého startu nasadili připojený registr do zařízení IoT Edge nejvyšší vrstvy, můžete ho použít v horní vrstvě vnořené hierarchie. Upravte kroky nasazení v tomto kurzu tak, aby se nakonfigurovali v hierarchii (nezobrazují se).

Nastavení připojeného modulu registru

  • Pomocí přihlašovacích údajů tokenu a připojovací řetězec z předchozích částí aktualizujte relevantní hodnoty JSON v env uzlu.

  • Následující proměnné prostředí jsou v env uzlu volitelné:

    Proměnná Popis
    ACR_REGISTRY_LOGIN_SERVER Určuje jedinečný název hostitele nebo plně kvalifikovaný název domény. Pokud se používá, připojený registr přijímá pouze požadavky provedené na tuto hodnotu přihlašovacího serveru.

    Pokud není zadaná žádná hodnota, bude mít připojený registr přístup s libovolnou hodnotou přihlašovacího serveru.
    ACR_REGISTRY_CERTIFICATE_VOLUME Pokud bude připojený registr přístupný přes PROTOKOL HTTPS, odkazuje na svazek, ve kterém jsou uložené certifikáty HTTPS.

    Pokud není nastaveno, výchozí umístění je /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Přepíše výchozí umístění /var/acr/data , kam budou image uloženy připojeným registrem.

    Toto umístění musí odpovídat vazbě svazku pro kontejner.

    Důležité

    Pokud připojený registr naslouchá na portu jiném než 80 a 443, ACR_REGISTRY_LOGIN_SERVER musí hodnota (pokud je zadána) obsahovat port. Příklad: 192.168.0.100:8080.

  • Pokud HostPort se nepoužívá modul proxy rozhraní API, měla by se nastavit vazba pro připojený registr. Příklad:

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

Nastavení modulu proxy rozhraní API

  • Proxy rozhraní API bude naslouchat na portu 8000 nakonfigurovaného jako NGINX_DEFAULT_PORT. Další informace o nastavení proxy serveru rozhraní API najdete v úložišti GitHubu ioT Edge.
{
    "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
                }
            }
        }
    }
}

Manifest nasazení pro nižší vrstvu

Pro zařízení v nižší vrstvě vytvořte soubor manifestu nasazení deploymentLowerLayer.json s následujícím obsahem.

Celkově je soubor nasazení nižší vrstvy podobný souboru nasazení nejvyšší vrstvy. Rozdíly jsou:

  • Načítá požadované image z hlavní vrstvy připojeného registru místo z cloudového registru.

    Při nastavování připojeného registru nejvyšší vrstvy se ujistěte, že synchronizuje všechny požadované image místně, včetně azureiotedge-agent, azureiotedge-hub, azureiotedge-api-proxya acr/connected-registry. Zařízení IoT nižší vrstvy potřebuje načíst tyto image z registru připojeného k nejvyšší vrstvě.

  • Používá synchronizační token nakonfigurovaný v nižší vrstvě k ověření v registru připojeném k nejvyšší vrstvě.

  • Nakonfiguruje koncový bod nadřazené brány s IP adresou nebo plně kvalifikovaným názvem domény připojeného k nejvyšší vrstvě registru místo plně kvalifikovaného názvu domény cloudového registru.

Důležité

V následujícím manifestu nasazení se používá jako IP adresa nebo plně kvalifikovaný název domény zařízení hostujícího $upstream nadřazený připojený registr. $upstream Není však podporován v proměnné prostředí. Připojený registr musí přečíst proměnnou ACR_PARENT_GATEWAY_ENDPOINT prostředí, aby získal koncový bod nadřazené brány. Místo použití $upstreampodporuje připojený registr dynamicky přeložit IP adresu nebo plně kvalifikovaný název domény z jiné proměnné prostředí.

Na vnořeném IoT Edge je na nižší vrstvě proměnná $IOTEDGE_PARENTHOSTNAME prostředí, která se rovná IP adrese nebo plně kvalifikovanému názvu domény nadřazeného zařízení. Ručně nahraďte proměnnou prostředí jako hodnotu ParentGatewayEndpoint v připojovací řetězec, abyste se vyhnuli pevnému kódování nadřazené IP adresy nebo plně kvalifikovaného názvu domény. Protože nadřazené zařízení v tomto příkladu běží nginx na portu 8000, předejte $IOTEDGE_PARENTHOSTNAME:8000. Musíte také vybrat správný protokol v 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
                }
            }
        }
    }
}

Nastavení a nasazení připojených modulů registru

Následující kroky jsou přizpůsobené kurzu : Vytvořte hierarchii zařízení IoT Edge a jsou specifická pro nasazení připojených modulů registru v hierarchii IoT Edge. Podrobnosti o jednotlivých krocích najdete v tomto kurzu.

Vytváření zařízení nejvyšší vrstvy a nižší vrstvy

Vytvoření virtuálních počítačů nejvyšší vrstvy a nižší vrstvy pomocí existující šablony ARM Šablona také nainstaluje agenta IoT Edge. Pokud chcete místo toho nasadit z vlastních zařízení, přečtěte si kurz: Instalace nebo odinstalace Azure IoT Edge pro Linux a zjistěte, jak zařízení nastavit ručně.

Důležité

Pokud chcete později získat přístup k modulům nasazeným na zařízení nejvyšší vrstvy, ujistěte se, že jste otevřeli příchozí porty: 8000, 443, 5671, 8883. Postup konfigurace najdete v tématu Postup otevření portů pro virtuální počítač pomocí webu Azure Portal.

Vytvoření a konfigurace hierarchie

iotedge-config Pomocí nástroje vytvořte a nakonfigurujte hierarchii pomocí následujícího postupu v Azure CLI nebo Azure Cloud Shellu:

  1. Stáhněte si konfigurační nástroj.

     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
    

    Tento krok vytvoří iotedge_config_cli_release složku v adresáři kurzu. Soubor šablony použitý k vytvoření hierarchie zařízení je iotedge_config.yaml soubor nalezen v ~/nested_iot_edge_tutorial/iotedge_config_cli_release/templates/tutorialsouboru . Ve stejném adresáři existují dva manifesty nasazení pro nejvyšší a nižší vrstvy: deploymentTopLayer.json a deploymentLowerLayer.json soubory.

  2. Upravte iotedge_config.yaml informacemi. Upravte názvy souborů manifestu iothub_hostnamenasazení , iot_namepro horní vrstvu a nižší vrstvu a přihlašovací údaje tokenu klienta, které jste vytvořili pro načtení imagí z nadřazené vrstvy. Následující příklad je ukázkový konfigurační soubor:

    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. Připravte soubory nasazení nejvyšší vrstvy a nižší vrstvy: deploymentTopLayer.json a deploymentLowerLayer.json. Zkopírujte soubory manifestu nasazení, které jste vytvořili dříve v tomto článku, do následující složky: ~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial.

  4. Přejděte do svého adresáře iotedge_config_cli_release a spusťte nástroj, který vytvoří hierarchii zařízení 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
    

    Pomocí parametru --output nástroj vytvoří certifikáty zařízení, sady certifikátů a soubor protokolu v libovolném adresáři. Pomocí parametru -f nástroj automaticky vyhledá existující zařízení IoT Edge ve službě IoT Hub a odebere je, aby se zabránilo chybám a zachovalo se vaše centrum čisté.

    Nástroj může běžet několik minut.

  5. Zkopírujte vygenerované top-layer.zip a lower-layer.zip soubory vygenerované v předchozím kroku do odpovídajících virtuálních počítačů nejvyšší a nižší vrstvy pomocí scp:

    scp <PATH_TO_CONFIGURATION_BUNDLE>   <USER>@<VM_IP_OR_FQDN>:~
    
  6. Připojte se k zařízení nejvyšší vrstvy a nainstalujte konfigurační sadu.

    1. Rozbalte konfigurační sadu. Nejdřív budete muset nainstalovat zip.

      sudo apt install zip
      unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip top-layer.zip
      
    2. Spusťte sudo ./install.sh. Zadejte IP adresu nebo název hostitele. Doporučujeme použít IP adresu.

    3. Spuštěním potvrďte sudo iotedge list , že jsou spuštěné všechny moduly.

  7. Připojte se k zařízení nižší vrstvy a nainstalujte konfigurační sadu.

    1. Rozbalte konfigurační sadu. Nejdřív budete muset nainstalovat zip.

      sudo apt install zip
      unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip lower-layer.zip
      
    2. Spusťte sudo ./install.sh. Zadejte zařízení a nadřazené IP adresy nebo názvy hostitelů. Doporučujeme používat IP adresy.

    3. Spuštěním potvrďte sudo iotedge list , že jsou spuštěné všechny moduly.

Pokud jste nezadali soubor nasazení pro konfiguraci zařízení nebo pokud dojde k problémům s nasazením, jako je neplatný manifest nasazení v zařízení nejvyšší nebo nižší vrstvy, ručně nasaďte moduly. Podívejte se na následující část.

Ruční nasazení připojeného modulu registru

Pomocí následujícího příkazu nasaďte připojený modul registru ručně na zařízení IoT Edge:

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

Podrobnosti najdete v tématu Nasazení modulů Azure IoT Edge pomocí Azure CLI.

Po úspěšném nasazení zobrazuje připojený registr stav Online.

Pokud chcete zkontrolovat stav připojeného registru, použijte následující příkaz az acr connected-registry show :

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

Možná budete muset několik minut počkat, až se nasazení připojeného registru dokončí.

Po úspěšném nasazení zobrazuje připojený registr stav Online.

Pokud chcete vyřešit potíže s nasazením, spusťte iotedge check ho na ovlivněném zařízení. Další informace naleznete v tématu Poradce při potížích.

Další kroky

V tomto rychlém startu jste zjistili, jak nasadit připojený registr do vnořeného zařízení IoT Edge. Pokračujte k dalšímu průvodci a zjistěte, jak načíst image z nově nasazeného připojeného registru.