Share via


Démarrage rapide : Déployer un registre connecté sur un appareil IoT Edge

Dans ce guide de démarrage rapide, vous utilisez la commande Azure CLI pour déployer un registre connecté en tant que module sur un appareil Azure IoT Edge. L’appareil IoT Edge peut accéder au registre de conteneurs Azure parent dans le cloud.

Pour obtenir une vue d’ensemble de l’utilisation d’un registre connecté avec IoT Edge, consultez Utilisation d’un registre connecté avec Azure IoT Edge. Ce scénario correspond à un appareil situé dans la couche supérieure d’une hiérarchie IoT Edge.

Prérequis

Importer des images dans votre registre cloud

Importez les images conteneur suivantes dans votre registre cloud à l’aide de la commande az acr import. Si vous avez déjà importé ces images, ignorez cette étape.

Image de registre connecté

Pour prendre en charge des scénarios IoT Edge imbriqués, l’image de conteneur pour le runtime du registre connecté doit être disponible dans votre registre de conteneurs Azure privé. Utilisez la commande az acr import pour importer l’image du registre connecté dans votre registre privé.

# 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

Images d’IoT Edge et de proxy d’API

Pour prendre en charge le registre connecté sur un IoT Edge imbriqué, vous devez déployer des modules pour l’IoT Edge et le proxy d’API. Importez ces images dans votre registre privé.

Le module proxy d’API IoT Edge permet à un appareil IoT Edge d’exposer plusieurs services à l’aide du protocole HTTPS sur le même port, tel que 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

Image Hello-World

Pour tester le registre connecté, importez l’image hello-world. Ce référentiel sera synchronisé sur le registre connecté et extrait par les clients du registre connecté.

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

Récupérer la configuration de registre connecté

Avant de déployer le registre connecté sur l’appareil IoT Edge, vous devez récupérer les paramètres de configuration à partir de la ressource de registre connecté dans Azure.

Utilisez la commande az acr connected-registry get-settings pour obtenir les informations de paramètres nécessaires à l’installation d’un registre connecté. L’exemple suivant spécifie HTTPs comme protocole parent. Ce protocole est requis lorsque le registre parent est un registre cloud.

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

Par défaut, les informations de paramètres n’incluent pas le mot de passe du jeton de synchronisation qui est également nécessaire pour déployer le registre connecté. Vous pouvez également générer l’un des mots de passe en passant le paramètre --generate-password 1 ou generate-password 2. Enregistrez le mot de passe généré dans un emplacement sûr. Vous ne pourrez le récupérer une nouvelle fois.

Avertissement

La régénération d’un mot de passe déclenche une rotation des informations d’identification du jeton de synchronisation. Si vous avez configuré un appareil à l’aide du mot de passe précédent, vous devez mettre à jour la configuration.

La sortie de commande comprend la chaîne de connexion au registre et les paramètres associés. L’exemple de sortie suivant montre la chaîne de connexion du registre connecté nommé myconnectedregistry, avec le registre parent contosoregistry :

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

Configurer un manifeste de déploiement pour IoT Edge

Un manifeste de déploiement est un document JSON décrivant les modules à déployer sur un appareil IoT Edge. Pour plus d’informations, consultez Comprendre comment les modules IoT Edge peuvent être utilisés, configurés et réutilisés.

Pour déployer le registre connecté et les modules de proxy d’API à l’aide de la commande Azure CLI, enregistrez le manifeste de déploiement suivant localement sous la forme d’un fichier manifest.json. Vous utiliserez le chemin du fichier dans la section suivante au moment d’exécuter la commande permettant d’appliquer la configuration à votre appareil.

Paramètres du module de registre connecté

  • Utilisez les informations d’identification du jeton et la chaîne de connexion des sections précédentes pour mettre à jour les valeurs JSON pertinentes dans le nœud env.

  • Les variables d’environnement suivantes sont facultatives dans le nœud env :

    Variable Description
    ACR_REGISTRY_LOGIN_SERVER Spécifie un nom d’hôte unique ou un nom de domaine complet. S’il est utilisé, le registre connecté accepte uniquement les requêtes effectuées à cette valeur de serveur de connexion.

    Si aucune valeur n’est fournie, le registre connecté est accessible avec n’importe quelle valeur de serveur de connexion.
    ACR_REGISTRY_CERTIFICATE_VOLUME Si votre registre connecté est accessible via HTTPS, pointe vers le volume sur lequel les certificats HTTPS sont stockés.

    S’il n’est pas défini, l’emplacement par défaut est /var/acr/certs.
    ACR_REGISTRY_DATA_VOLUME Remplace l’emplacement par défaut /var/acr/data où les images sont stockées par le registre connecté.

    Cet emplacement doit correspondre à la liaison de volume pour le conteneur.

    Important

    Si le registre connecté écoute sur un port différent entre 80 et 443, la valeur ACR_REGISTRY_LOGIN_SERVER (si spécifiée) doit inclure le port. Exemple : 192.168.0.100:8080.

  • Une liaison HostPort pour le registre connecté doit être définie si le module proxy d’API n’est pas utilisé. Exemple :

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

Paramètres du module de proxy d’API

  • Le proxy d’API écoute sur le port 8000 configuré comme NGINX_DEFAULT_PORT. Pour plus d’informations sur les paramètres de proxy d’API, consultez le Référentiel GitHub 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
                }
            }
        }
    }
}

Déployer le registre connecté et les modules de proxy d’API sur IoT Edge

Utilisez la commande suivante pour déployer le registre connecté et les modules de proxy d’API sur l’appareil IoT Edge, à l’aide du manifeste de déploiement créé dans la section précédente. Indiquez l’ID du périphérique de couche supérieure IoT Edge et le nom de l’IoT Hub, le cas échéant.

# 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

Pour plus d’informations, consultez Déployer des modules Azure IoT Edge avec Azure CLI.

Pour vérifier l’état du registre connecté, utilisez la commande az acr connected-registry show suivante. Le nom du registre connecté est la valeur de $CONNECTED_REGISTRY_RW.

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

Une fois le déploiement réussi, le registre connecté affiche l’état Online.

Étapes suivantes

Dans ce démarrage rapide, vous avez appris à déployer un registre connecté sur un appareil IoT Edge. Passez aux guides suivants pour apprendre à extraire des images du registre connecté nouvellement déployé ou à déployer le registre connecté sur des appareils IoT Edge imbriqués.