Aracılığıyla paylaş


Öğretici: Bağlı kayıt defterini iç içe IoT Edge hiyerarşisine dağıtma

Bu öğreticide, Azure CLI komutlarını kullanarak Azure IoT Edge cihazlarının iki katmanlı hiyerarşisini oluşturacak ve bağlı bir kayıt defterini her katmanda modül olarak dağıtacaksınız. Bu senaryoda , üst katmandaki bir cihaz bir bulut kayıt defteriyle iletişim kurar. Alt katmandaki bir cihaz, üst katmandaki bağlı kayıt defteri üst öğesiyle iletişim kurar.

IoT Edge ile bağlı kayıt defterini kullanmaya genel bakış için bkz. Azure IoT Edge ile bağlı kayıt defterini kullanma.

Önkoşullar

  • Azure IoT Hub. Dağıtım adımları için bkz. Azure portal kullanarak IoT hub'ı oluşturma.

  • Azure'da iki bağlı kayıt defteri kaynağı. Dağıtım adımları için bkz. Azure CLI veya Azure portal kullanarak hızlı başlangıçlar.

    • En üst katman için bağlı kayıt defteri ReadWrite veya ReadOnly modunda olabilir. Bu makalede ReadWrite modu varsayılır ve bağlı kayıt defteri adı ortam değişkeninde $CONNECTED_REGISTRY_RWdepolanır.
    • Alt katman için bağlı kayıt defterinin ReadOnly modunda olması gerekir. Bu makalede, bağlı kayıt defteri adının ortam değişkeninde $CONNECTED_REGISTRY_ROdepolandığı varsayılır.

Görüntüleri bulut kayıt defterinize aktarma

az acr import komutunu kullanarak aşağıdaki kapsayıcı görüntülerini bulut kayıt defterinize aktarın. Bu görüntüleri zaten içeri aktardıysanız bu adımı atlayın.

Bağlı kayıt defteri görüntüsü

İç içe IoT Edge senaryolarını desteklemek için, bağlı kayıt defteri çalışma zamanının kapsayıcı görüntüsü özel Azure kapsayıcı kayıt defterinizde kullanılabilir olmalıdır. Bağlı kayıt defteri görüntüsünü özel kayıt defterinize aktarmak için az acr import komutunu kullanın.

# 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 ve API proxy görüntüleri

İç içe IoT Edge bağlı kayıt defterini desteklemek için IoT Edge ve API ara sunucusu için modülleri dağıtmanız gerekir. Bu görüntüleri özel kayıt defterinize aktarınız.

IoT Edge API ara sunucusu modülü, bir IoT Edge cihazının HTTPS protokolünü kullanarak 443 gibi aynı bağlantı noktasında birden çok hizmeti kullanıma sunmasına olanak tanır.

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 resmi

Bağlı kayıt defterini test için görüntüyü içeri aktarın hello-world . Bu depo, bağlı kayıt defteriyle eşitlenir ve bağlı kayıt defteri istemcileri tarafından çekilir.

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

Bağlı kayıt defteri yapılandırmasını alma

Her bağlı kayıt defterini hiyerarşideki IoT Edge cihazına dağıtmak için Azure'daki bağlı kayıt defteri kaynağından yapılandırma ayarlarını almanız gerekir. Gerekirse, yapılandırmayı almak için her bağlı kayıt defteri için az acr connected-registry get-settings komutunu çalıştırın.

Varsayılan olarak, ayarlar bilgileri, bağlı kayıt defterini dağıtmak için de gereken eşitleme belirteci parolasını içermez. İsteğe bağlı olarak, veya --generate-password 2 parametresini geçirerek --generate-password 1 parolalardan birini oluşturun. Oluşturulan parolayı güvenli bir konuma kaydedin. Yeniden alınamaz.

Uyarı

Parolayı yeniden oluşturmak, eşitleme belirteci kimlik bilgilerini döndürür. Önceki parolayı kullanarak bir cihaz yapılandırdıysanız yapılandırmayı güncelleştirmeniz gerekir.

# 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

Komut çıkışı kayıt defteri bağlantı dizesini ve ilgili ayarları içerir. Aşağıdaki örnek çıktıda, contosoregistry üst kayıt defteriyle myconnectedregistry adlı bağlı kayıt defterinin bağlantı dizesi gösterilmektedir:

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

Dağıtım bildirimlerini yapılandırma

Dağıtım bildirimi, bir IoT Edge cihazına dağıtılacak modülleri açıklayan bir JSON belgesidir. Daha fazla bilgi için bkz. IoT Edge modüllerinin nasıl kullanılabileceğini, yapılandırılabileceğini ve yeniden kullanılabileceğini anlama.

Bağlı kayıt defteri modülünü Azure CLI kullanarak her IoT Edge cihazına dağıtmak için aşağıdaki dağıtım bildirimlerini yerel olarak JSON dosyaları olarak kaydedin. Her bildirimdeki ilgili JSON değerlerini güncelleştirmek için önceki bölümlerde yer alan bilgileri kullanın. Yapılandırmayı cihazınıza uygulamak için komutunu çalıştırdığınızda sonraki bölümde yer alan dosya yollarını kullanın.

Üst katman için dağıtım bildirimi

En üst katmandaki cihaz için aşağıdaki içeriğe sahip bir dağıtım bildirim dosyası deploymentTopLayer.json oluşturun. Bu bildirim, Hızlı Başlangıç'ta kullanılana benzer: Bağlı kayıt defterini bir IoT Edge cihazına dağıtma.

Not

Hızlı başlangıcı kullanarak bağlı bir kayıt defterini bir üst katmana IoT Edge cihaza dağıttıysanız, bunu iç içe hiyerarşinin en üst katmanında kullanabilirsiniz. Hiyerarşide yapılandırmak için bu öğreticideki dağıtım adımlarını değiştirin (gösterilmez).

Bağlı kayıt defteri modülü ayarları

  • Düğümdeki ilgili JSON değerlerini güncelleştirmek için önceki bölümlerde yer alan belirteç kimlik bilgilerini ve bağlantı dizesini env kullanın.

  • Aşağıdaki ortam değişkenleri düğümde env isteğe bağlıdır:

    Değişken Açıklama
    ACR_REGISTRY_LOGIN_SERVER Benzersiz bir konak adı veya FQDN belirtir. Kullanılırsa, bağlı kayıt defteri yalnızca bu oturum açma sunucusu değerine yapılan istekleri kabul eder.

    Değer sağlanmazsa, bağlı kayıt defterine herhangi bir oturum açma sunucusu değeriyle erişilebilir.
    ACR_REGISTRY_CERTIFICATE_VOLUME Bağlı kayıt defterinize HTTPS üzerinden erişilebilir olacaksa, HTTPS sertifikalarının depolandığı birime işaret eder.

    Ayarlanmadıysa, varsayılan konum şeklindedir /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Görüntülerin bağlı kayıt defteri tarafından depolandığı varsayılan konumun /var/acr/data üzerine yazar.

    Bu konum, kapsayıcının birim bağlaması ile eşleşmelidir.

    Önemli

    Bağlı kayıt defteri 80 ve 443'ten farklı bir bağlantı noktasında dinliyorsa, değerin ACR_REGISTRY_LOGIN_SERVER (belirtildiyse) bağlantı noktasını içermesi gerekir. Örnek: 192.168.0.100:8080.

  • HostPort API ara sunucusu modülü kullanılmıyorsa bağlı kayıt defteri için bir bağlama ayarlanmalıdır. Örnek:

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

API proxy modülü ayarları

  • API proxy'si olarak NGINX_DEFAULT_PORTyapılandırılan 8000 numaralı bağlantı noktasını dinler. API proxy ayarları hakkında daha fazla bilgi için github deposunun IoT Edge bakın.
{
    "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
                }
            }
        }
    }
}

Alt katman için dağıtım bildirimi

Alt katmandaki cihaz için aşağıdaki içeriğe sahip deploymentLowerLayer.json dağıtım bildirim dosyası oluşturun.

Genel olarak, alt katman dağıtım dosyası üst katman dağıtım dosyasına benzer. Farklar şunlardır:

  • Gerekli görüntüleri bulut kayıt defterinden değil üst katmana bağlı kayıt defterinden çeker.

    En üst katmana bağlı kayıt defterini ayarlarken , , azureiotedge-hubazureiotedge-api-proxyve acr/connected-registrydahil olmak üzere azureiotedge-agenttüm gerekli görüntüleri yerel olarak eşitlediğinden emin olun. Alt katman IoT cihazının bu görüntüleri üst katman bağlantılı kayıt defterinden çekmesi gerekir.

  • Üst katmana bağlı kayıt defteriyle kimlik doğrulaması yapmak için alt katmanda yapılandırılan eşitleme belirtecini kullanır.

  • Üst ağ geçidi uç noktasını bulut kayıt defterinin FQDN'siyle değil, üst katman bağlı kayıt defterinin IP adresi veya FQDN ile yapılandırıyor.

Önemli

Aşağıdaki dağıtım bildiriminde, $upstream üst bağlı kayıt defterini barındıran cihazın IP adresi veya FQDN'i olarak kullanılır. Ancak ortam $upstream değişkeninde desteklenmez. Bağlı kayıt defterinin üst ağ geçidi uç noktasını almak için ortam değişkenini ACR_PARENT_GATEWAY_ENDPOINT okuması gerekir. Bağlı kayıt defteri, kullanmak $upstreamyerine IP adresini veya FQDN'yi başka bir ortam değişkeninden dinamik olarak çözümlemeyi destekler.

İç içe IoT Edge, alt katmanda üst cihazın IP adresine veya FQDN'sine eşit bir ortam değişkeni $IOTEDGE_PARENTHOSTNAME vardır. Üst IP adresini veya FQDN'yi sabit kodlamaktan kaçınmak için ortam değişkenini bağlantı dizesinde değeri ParentGatewayEndpoint olarak el ile değiştirin. Bu örnekteki üst cihaz 8000 numaralı bağlantı noktasında çalıştığından nginx geçirin $IOTEDGE_PARENTHOSTNAME:8000. ayrıca içinde ParentEndpointProtocoluygun protokolü seçmeniz gerekir.

{
    "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
                }
            }
        }
    }
}

Bağlı kayıt defteri modüllerini ayarlama ve dağıtma

Aşağıdaki adımlar Öğretici'den uyarlanmıştır: IoT Edge cihaz hiyerarşisi oluşturma ve bağlı kayıt defteri modüllerini IoT Edge hiyerarşisinde dağıtmaya özeldir. Tek tek adımlar hakkındaki ayrıntılar için bu öğreticiye bakın.

Üst ve alt katman cihazları oluşturma

Mevcut arm şablonunu kullanarak üst ve alt katman sanal makineleri oluşturun. Şablon ayrıca IoT Edge aracısını yükler. Bunun yerine kendi cihazlarınızdan dağıtmak istiyorsanız, cihazı el ile ayarlamayı öğrenmek için öğretici: Linux için Azure IoT Edge yükleme veya kaldırma bölümüne bakın.

Önemli

Üst katman cihazda dağıtılan modüllere daha sonra erişmek için şu gelen bağlantı noktalarını açtığınızdan emin olun: 8000, 443, 5671, 8883. Yapılandırma adımları için bkz. Azure portal ile sanal makineye bağlantı noktaları açma.

Hiyerarşiyi oluşturma ve yapılandırma

iotedge-config Azure CLI veya Azure Cloud Shell aşağıdaki adımları izleyerek hiyerarşinizi oluşturmak ve yapılandırmak için aracı kullanın:

  1. Yapılandırma aracını indirin.

     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
    

    Bu adım, öğretici dizininizde klasörü oluşturur iotedge_config_cli_release . Cihaz hiyerarşinizi oluşturmak için kullanılan şablon dosyası, içinde ~/nested_iot_edge_tutorial/iotedge_config_cli_release/templates/tutorialbulunan dosyadıriotedge_config.yaml. Aynı dizinde, üst ve alt katmanlar için iki dağıtım bildirimi vardır: deploymentTopLayer.json ve deploymentLowerLayer.json dosyaları.

  2. Bilgilerinizle düzenleyin iotedge_config.yaml . iothub_hostnameÜst katman ve alt katman için , iot_name, dağıtım bildirimi dosya adlarını ve her katmandan yukarı akıştan görüntü çekmek için oluşturduğunuz istemci belirteci kimlik bilgilerini düzenleyin. Aşağıdaki örnek örnek bir yapılandırma dosyasıdır:

    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. Üst ve alt katman dağıtım dosyalarını hazırlayın: deploymentTopLayer.json ve deploymentLowerLayer.json. Bu makalenin önceki bölümlerinde oluşturduğunuz dağıtım bildirim dosyalarını şu klasöre kopyalayın: ~/nestedIotEdgeTutorial/iotedge_config_cli_release/templates/tutorial.

  4. iotedge_config_cli_release dizininize gidin ve IoT Edge cihaz hiyerarşinizi oluşturmak için aracı çalıştırın.

    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
    

    parametresiyle --output araç, cihaz sertifikalarını, sertifika paketlerini ve günlük dosyasını istediğiniz bir dizinde oluşturur. parametresiyle -f araç, hataları önlemek ve hub'ınızı temiz tutmak için IoT Hub mevcut IoT Edge cihazları otomatik olarak arar ve kaldırır.

    Araç birkaç dakika çalışabilir.

  5. Önceki adımda oluşturulan top-layer.zip ve lower-layer.zip dosyalarını kullanarak scpilgili üst ve alt katman sanal makinelerine kopyalayın:

    scp <PATH_TO_CONFIGURATION_BUNDLE>   <USER>@<VM_IP_OR_FQDN>:~
    
  6. Yapılandırma paketini yüklemek için üst katman cihaza bağlanın.

    1. Yapılandırma paketinin sıkıştırmasını açın. Önce zip'i yüklemeniz gerekir.

      sudo apt install zip
      unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip top-layer.zip
      
    2. sudo ./install.sh öğesini çalıştırın. IP adresini veya ana bilgisayar adını girin. IP adresini kullanmanızı öneririz.

    3. Tüm modüllerin çalıştığını onaylamak için komutunu çalıştırın sudo iotedge list .

  7. Yapılandırma paketini yüklemek için alt katman cihaza bağlanın.

    1. Yapılandırma paketinin sıkıştırmasını açın. Önce zip'i yüklemeniz gerekir.

      sudo apt install zip
      unzip ~/<PATH_TO_CONFIGURATION_BUNDLE>/<CONFIGURATION_BUNDLE>.zip #unzip lower-layer.zip
      
    2. sudo ./install.sh öğesini çalıştırın. Cihazı ve üst IP adreslerini veya ana bilgisayar adlarını girin. IP adreslerini kullanmanızı öneririz.

    3. Tüm modüllerin çalıştığını onaylamak için komutunu çalıştırın sudo iotedge list .

Cihaz yapılandırması için bir dağıtım dosyası belirtmediyseniz veya üst veya alt katman cihazında geçersiz bir dağıtım bildirimi gibi dağıtım sorunları oluşuyorsa modülleri el ile dağıtın. Aşağıdaki bölüme bakın.

Bağlı kayıt defteri modülünü el ile dağıtma

Bağlı kayıt defteri modülünü IoT Edge bir cihaza el ile dağıtmak için aşağıdaki komutu kullanın:

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

Ayrıntılar için bkz. Azure CLI ile Azure IoT Edge modüllerini dağıtma.

Başarılı bir dağıtımdan sonra, bağlı kayıt defteri durumunu Onlinegösterir.

Bağlı kayıt defterinin durumunu denetlemek için aşağıdaki az acr connected-registry show komutunu kullanın:

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

Bağlı kayıt defterinin dağıtımı tamamlanana kadar birkaç dakika beklemeniz gerekebilir.

Başarılı bir dağıtımdan sonra, bağlı kayıt defteri durumunu Onlinegösterir.

Dağıtım sorunlarını gidermek için etkilenen cihazda komutunu çalıştırın iotedge check . Daha fazla bilgi için bkz. Sorun giderme.

Sonraki adımlar

Bu hızlı başlangıçta, bağlı bir kayıt defterini iç içe IoT Edge bir cihaza dağıtmayı öğrendiniz. Yeni dağıtılan bağlı kayıt defterinden görüntü çekmeyi öğrenmek için sonraki kılavuza geçin.