Mulai cepat: Menyebarkan registri yang terhubung ke perangkat IoT Edge

Di mulai cepat ini, Anda menggunakan Azure CLI untuk menyebarkan registri yang terhubung sebagai modul di perangkat Azure IoT Edge. Perangkat IoT Edge dapat mengakses registri kontainer Azure induk di cloud.

Untuk gambaran umum menggunakan registri yang terhubung dengan IoT Edge, lihat Menggunakan registri yang terhubung dengan Azure IoT Edge. Skenario ini sesuai dengan perangkat di lapisan atasdari hierarki IoT Edge.

Prasyarat

Mengimpor gambar ke registri cloud Anda

Impor gambar kontainer berikut ke registri cloud Anda menggunakan perintah impor az acr. Lewati langkah ini jika Anda sudah mengimpor gambar-gambar ini.

Gambar registri tersambung

Untuk mendukung skenario IoT Edge yang bersarang, gambar kontainer untuk runtime registri yang terhubung harus tersedia di registri kontainer Azure pribadi Anda. Gunakan perintah impor az acr untuk mengimpor gambar registri yang terhubung ke registri pribadi Anda.

# 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.5.0

Gambar proksi IoT Edge dan API

Untuk mendukung registri yang terhubung di IoT Edge bertumpuk, Anda perlu menerapkan modul untuk proksi IoT Edge dan API. Impor gambar-gambar ini ke dalam registri pribadi Anda.

Modul proksi IoT Edge API memungkinkan perangkat IoT Edge untuk mengekspos beberapa layanan menggunakan protokol HTTPS pada port yang sama seperti 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

Gambar hello-world

Untuk menguji registri yang terhubung, impor gambar hello-world. Repositori ini akan disinkronkan ke registri yang terhubung dan ditarik oleh klien registri yang terhubung.

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

Mengambil konfigurasi registri yang terhubung

Sebelum menyebarkan registri yang terhubung ke perangkat IoT Edge, Anda perlu mengambil pengaturan konfigurasi dari sumber daya registri yang terhubung di Azure.

Gunakan perintah az acr connected-registry get-settings untuk mendapatkan informasi pengaturan yang diperlukan untuk memasang registri yang terhubung. Contoh berikut menentukan HTTPS sebagai protokol induk. Protokol ini diperlukan ketika registri induk adalah registri cloud.

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

Secara default, informasi pengaturan tidak termasuk kata sandi token sinkronisasi, yang juga diperlukan untuk menyebarkan registri yang terhubung. Secara opsional, buat salah satu kata sandi dengan meneruskan parameter --generate-password 1 atau generate-password 2. Simpan kata sandi yang dibuat ke lokasi yang aman. Kata sandi itu tidak bisa diambil lagi.

Peringatan

Membuat ulang kata sandi akan memutar kredensial token sinkronisasi. Jika Anda mengonfigurasi perangkat menggunakan kata sandi sebelumnya, Anda perlu memperbarui konfigurasi.

Output perintah termasuk string koneksi registri dan pengaturan terkait. Contoh output berikut menunjukkan string koneksi untuk registri yang terhubung bernama myconnectedregistry dengan contosoregistryregistri induk:

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

Mengonfigurasi manifes penyebaran untuk IoT Edge

Manifes penyebaran adalah dokumen JSON yang menjelaskan modul mana yang akan diterapkan ke perangkat IoT Edge. Untuk informasi selengkapnya, lihat Memahami bagaimana modul IoT Edge dapat digunakan, dikonfigurasi, dan digunakan kembali.

Untuk menyebarkan registri terhubung dan modul proksi API menggunakan Azure CLI, simpan manifes penyebaran berikut secara lokal sebagai file manifest.json. Anda menggunakan jalur file di bagian selanjutnya saat menjalankan perintah untuk menerapkan konfigurasi ke perangkat Anda.

Setelan modul registri tersambung

  • Gunakan kredensial token dan string koneksi dari bagian sebelumnya untuk memperbarui nilai JSON yang relevan di node env.

  • Variabel lingkungan berikut bersifat opsional di node env:

    Variabel Deskripsi
    ACR_REGISTRY_LOGIN_SERVER Menentukan nama host atau FQDN yang unik. Jika digunakan, registri yang terhubung hanya menerima permintaan yang dibuat untuk nilai server login ini.

    Jika tidak ada nilai yang diberikan, maka registri yang terhubung dapat diakses dengan nilai server login apa pun.
    ACR_REGISTRY_CERTIFICATE_VOLUME Jika registri tersambung Anda akan dapat diakses melalui HTTPS, tunjukkan volume tempat sertifikat HTTPS disimpan.

    Jika tidak diatur, lokasi default adalah /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Menimpa lokasi default /var/acr/data tempat gambar akan disimpan oleh registri yang terhubung.

    Lokasi ini harus sesuai dengan pengikat volume untuk kontainer.

    Penting

    Jika registri yang terhubung mendengarkan pada port yang berbeda dari 80 dan 443, nilai ACR_REGISTRY_LOGIN_SERVER (jika ditentukan) harus menyertakan port. Contoh: 192.168.0.100:8080.

  • Pengikatan HostPort untuk registri yang terhubung harus diatur jika modul proksi API tidak digunakan. Contoh:

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

Setelan modul proksi API

  • Proksi API akan mendengarkan pada port 8000 dikonfigurasi sebagai NGINX_DEFAULT_PORT. Untuk informasi selengkapnya tentang pengaturan proksi API, lihat IoT Edge GitHub repo.
{
    "modulesContent": {
        "$edgeAgent": {
            "properties.desired": {
                "modules": {
                    "connected-registry": {
                        "settings": {
                            "image": "<REPLACE_WITH_CLOUD_REGISTRY_NAME>.azurecr.io/acr/connected-registry:0.5.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
                }
            }
        }
    }
}

Menyebarkan modul registri dan proksi API yang terhubung di IoT Edge

Gunakan perintah berikut untuk menerapkan registri yang terhubung dan modul proksi API pada perangkat IoT Edge, menggunakan manifes penerapan yang dibuat di bagian sebelumnya. Berikan ID perangkat lapisan atas IoT Edge dan nama IoT Hub jika diindikasikan.

# 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

Untuk detail, lihat Menyebarkan modul Azure IoT Edge dengan Azure CLI.

Untuk memeriksa status registri yang terhubung, gunakan perintah az acr connected-registry show berikut. Nama registri yang terhubung adalah nilai dari $CONNECTED_REGISTRY_RW.

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

Setelah penyebaran berhasil, registri yang terhubung menunjukkan status Online.

Langkah berikutnya

Dalam mulai cepat ini, Anda telah mempelajari cara menyebarkan registri yang terhubung ke perangkat IoT Edge. Lanjutkan ke panduan berikutnya untuk mempelajari cara mengambil gambar dari registri terhubung yang baru digunakan atau untuk menerapkan registri yang terhubung pada perangkat IoT Edge yang disarangkan.