Aracılığıyla paylaş


Hızlı Başlangıç: Bağlı kayıt defterini bir IoT Edge cihazına dağıtma

Bu hızlı başlangıçta, bağlı bir kayıt defterini Bir Azure IoT Edge cihazına modül olarak dağıtmak için Azure CLI'yi kullanacaksınız. IoT Edge cihaz, buluttaki üst Azure kapsayıcı kayıt defterine erişebilir.

IoT Edge ile bağlı kayıt defteri kullanmaya genel bakış için bkz. Azure IoT Edge ile bağlı kayıt defterini kullanma. Bu senaryo, IoT Edge hiyerarşisinin en üst katmanındaki bir cihaza karşılık gelir.

Önkoşullar

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ı için kapsayıcı görüntüsünün özel Azure kapsayıcı kayıt defterinizde kullanılabilir olması gerekir. 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üller dağıtmanız gerekir. Bu görüntüleri özel kayıt defterinize aktarin.

IoT Edge API proxy modülü, IoT Edge bir cihazın 443 gibi aynı bağlantı noktasında HTTPS protokolünü kullanarak 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

Bağlı kayıt defterini IoT Edge cihaza dağıtmadan önce Azure'daki bağlı kayıt defteri kaynağından yapılandırma ayarlarını almanız gerekir.

Bağlı kayıt defterini yüklemek için gereken ayarlar bilgilerini almak için az acr connected-registry get-settings komutunu kullanın. Aşağıdaki örnek, üst protokol olarak HTTPS'yi belirtir. Üst kayıt defteri bir bulut kayıt defteri olduğunda bu protokol gereklidir.

az acr connected-registry get-settings \
  --registry $REGISTRY_NAME \
  --name $CONNECTED_REGISTRY_RW \
  --parent-protocol https

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.

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

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

IoT Edge için dağıtım bildirimi yapılandırma

Dağıtım bildirimi, IoT Edge cihaza 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.

Azure CLI kullanarak bağlı kayıt defteri ve API proxy modüllerini dağıtmak için aşağıdaki dağıtım bildirimini yerel olarak dosya manifest.json olarak kaydedin. Yapılandırmayı cihazınıza uygulamak için komutunu çalıştırdığınızda sonraki bölümde dosya yolunu kullanacaksınız.

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şilebilecekse, HTTPS sertifikalarının depolandığı birime işaret eder.

    Ayarlanmadıysa, varsayılan konum olur /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 (belirtilmişse) 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ılmış 8000 numaralı bağlantı noktasını dinler. API proxy ayarları hakkında daha fazla bilgi için GitHub deposu 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
                }
            }
        }
    }
}

Bağlı kayıt defteri ve API proxy modüllerini IoT Edge dağıtma

Önceki bölümde oluşturulan dağıtım bildirimini kullanarak bağlı kayıt defteri ve API ara sunucusu modüllerini IoT Edge cihaza dağıtmak için aşağıdaki komutu kullanın. IoT Edge üst katman cihazının kimliğini ve gösterildiği yerde IoT Hub adını belirtin.

# Set the IOT_EDGE_TOP_LAYER_DEVICE_ID and IOT_HUB_NAME environment variables for use in the following Azure CLI command
IOT_EDGE_TOP_LAYER_DEVICE_ID=<device-id>
IOT_HUB_NAME=<hub-name>

az iot edge set-modules \
  --device-id $IOT_EDGE_TOP_LAYER_DEVICE_ID \
  --hub-name $IOT_HUB_NAME \
  --content manifest.json

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

Bağlı kayıt defterinin durumunu denetlemek için aşağıdaki az acr connected-registry show komutunu kullanın. Bağlı kayıt defterinin adı $CONNECTED_REGISTRY_RW değeridir.

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

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

Sonraki adımlar

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