Utiliser Visual Studio 2022 pour développer et déboguer des modules pour Azure IoT Edge

S’applique à :IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4 est la version prise en charge. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Cet article explique comment utiliser Visual Studio 2022 pour développer, déboguer et déployer des modules Azure IoT Edge personnalisés. Visual Studio 2022 prend en charge les modèles IoT Edge de modules écrits en C et C#. Les architectures d’appareils prises en charge sont Windows x64 et Linux x64, ARM32 et ARM64 (préversion). Pour plus d’informations sur les systèmes d’exploitation, les langages et les architectures pris en charge, consultez Prise en charge des langages et architectures.

Cet article comprend les étapes pour deux outils de développement IoT Edge.

  • L’interface de ligne de commande (CLI) est l’outil préféré pour le développement.
  • Outils Azure IoT Edge pour l’extension Visual Studio . L’extension est en mode maintenance.

Utilisez le bouton sélecteur d’outils au début pour choisir votre option d’outil pour cet article. Les deux outils offrent les avantages suivants :

  • Créer, modifier, générer, exécuter et déboguer des solutions et des modules Azure IoT Edge sur votre ordinateur de développement local.
  • Codez vos modules Azure IoT en C ou C# tout en bénéficiant de tous les avantages du développement Visual Studio.
  • Déployer votre solution IoT Edge sur un appareil IoT Edge via Azure IoT Hub.

Prérequis

Cet article part du principe que vous utilisez un ordinateur exécutant Windows pour le développement.

  • Installez ou modifiez Visual Studio 2022 sur votre machine de développement. Choisissez les options de charges de travail Développement Azure et Développement de bureau avec C++.

  • Téléchargez et installez Azure IoT Edge Tools à partir de du Visual Studio Marketplace. Vous pouvez utiliser l’extension Azure IoT Edge Tools pour créer et créer votre solution IoT Edge. L’outil de développement préféré est l’outil de développement En ligne de commande (CLI) Azure IoT Edge Dev Tool. L’extension inclut les modèles de projet Azure IoT Edge utilisés pour créer le projet Visual Studio. Actuellement, vous avez besoin de l’extension installée quel que soit l’outil de développement que vous utilisez.

    Important

    L’extension Azure IoT Edge Tools pour VS 2022 est en mode maintenance. L’outil de développement préféré est l’outil de développement En ligne de commande (CLI) Azure IoT Edge Dev Tool.

    Conseil

    Si vous utilisez Visual Studio 2019, téléchargez et installez Azure IoT Edge Tools pour VS 2019 à partir de la Place de marché Visual Studio.

  • Installer le gestionnaire de bibliothèque Vcpkg

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    Installer le package azure-iot-sdk-c pour Windows

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • Téléchargez et installez un système de gestion de conteneurs compatible avec Docker sur votre machine de développement pour générer et exécuter vos images de module. Par exemple, installez Docker Community Edition.

  • Pour développer des modules avec des conteneurs Linux, utilisez un ordinateur Windows présentant la configuration requise pour Docker Desktop.

  • Créer unAzure Container Registry ou Docker Hub pour stocker vos images de module.

    Conseil

    Vous pouvez utiliser un registre Docker local pour le prototype et à des fins de test, au lieu d’un registre cloud.

  • Installez Azure CLI.

  • Pour tester votre module sur un appareil, vous avez besoin d’un IoT Hub actif avec au moins un appareil IoT Edge. Pour créer un appareil IoT Edge à des fins de test, vous pouvez en créer un dans le Portail Azure ou avec l’interface CLI :

    • La création dans le portail Azure est plus rapide. Dans le portail Azure, accédez à votre ressource IoT Hub. Sélectionnez Appareils sous le menu Gestion des appareils, puis sélectionnez Ajouter un appareil.

      Dans Créer un appareil, nommez votre appareil à l’aide de l’ID d’appareil, vérifiez IoT Edge Device, puis sélectionnez Enregistrer dans le coin inférieur gauche.

      Enfin, vérifiez que votre nouvel appareil existe dans IoT Hub, dans le menu Gestion des appareils > Appareils. Pour plus d’informations sur la création d’un appareil IoT Edge via le portail Azure, lisez Créer et provisionner un appareil IoT Edge sur Linux avec des clés symétriques.

    • Pour créer un appareil IoT Edge avec l’interface CLI, suivez les étapes du guide de démarrage rapide pour Linux ou Windows. Lors de l’inscription d’un appareil IoT Edge, vous créez un appareil IoT Edge.

    Si vous exécutez le démon IoT Edge sur votre machine de développement, il peut être nécessaire d’arrêter EdgeHub et EdgeAgent avant de commencer à développer dans Visual Studio.

Créer un projet Azure IoT Edge

Le modèle de projet IoT Edge dans Visual Studio crée une solution à déployér sur des appareils IoT Edge. Tout d’abord, vous créez une solution Azure IoT Edge. Ensuite, vous créez un module dans cette solution. Chaque solution IoT Edge peut contenir plusieurs modules.

Dans notre solution, nous allons créer trois projets. Le module principal, qui contient EdgeAgent et EdgeHub, en plus du module capteur de température. Ensuite, vous ajoutez deux modules IoT Edge supplémentaires.

Important

La structure de projet IoT Edge créée par Visual Studio n’est pas la même que celle de Visual Studio Code.

Actuellement, l’interface CLI de l’outil de développement Azure IoT Edge ne prend pas en charge la création du type de projet Visual Studio. Vous devez utiliser l’extension Visual Studio IoT Edge pour créer le projet Visual Studio.

  1. Dans Visual Studio, créez un projet.

  2. Dans Créer un projet, recherchez Azure IoT Edge. Sélectionnez le projet correspondant à la plateforme et l’architecture de votre appareil IoT Edge, puis sélectionnez suivant.

    Create New Project

  3. Dans Configurer votre nouveau projet, entrez un nom pour votre projet, spécifiez l’emplacement, et sélectionnez Créer.

  4. DansAjouter un module, sélectionnez le type de module que vous souhaitez développer. Si vous avez un module existant que vous souhaitez ajouter à votre déploiement, sélectionnez Module existant.

  5. Dans Nom du module, entrez un nom pour votre module. Choisissez un nom qui est unique dans le registre de conteneurs.

  6. Dans Url du dépôt, indiquez le nom du référentiel d’images du module. Par défaut, Visual Studio nomme le module localhost:5000/<nom de votre module>. Remplacez-le par vos propres informations de registre. Utilisez localhost si vous utilisez un registre Docker local pour les tests. Si vous utilisez Azure Container Registry, utilisez le serveur de connexion à partir des paramètres de votre registre. Le serveur de connexion se présente comme suit : <nom du registre>.azurecr.io. Remplacez uniquement la partie localhost:5000 de la chaîne afin d’obtenir le résultat final suivant : <nom du registre>.azurecr.io/ <nom de votre module> .

  7. Sélectionnez Ajouter pour ajouter votre module au projet.

    Screenshot of how to add Application and Module.

    Remarque

    Si vous disposez d’un projet IoT Edge existant, vous pouvez modifier l’URL du référentiel en ouvrant le fichier module.json. L’URL du référentiel se trouve dans la propriété repositorydu fichier JSON.

Vous disposez maintenant d’un projet IoT Edge et d’un module IoT Edge dans votre solution Visual Studio.

Structure de projet

Dans votre solution, il existe deux dossiers au niveau du projet, notamment un dossier de projet principal et un dossier de module unique. Par exemple, vous pouvez avoir un dossier de projet principal nommé AzureIotEdgeApp1 et un dossier de module nommé IotEdgeModule1. Le dossier principal du projet contient votre manifeste de déploiement.

Le dossier du projet de module contient un fichier pour le code de votre module, nommé Program.cs ou main.c selon le langage que vous avez choisi. Ce dossier contient également un fichier nommé module.json décrivant les métadonnées de votre module. Différents fichiers Docker inclus ici fournissent les informations nécessaires pour générer votre module en tant que conteneur Windows ou Linux.

Manifeste de déploiement de votre projet

Le manifeste de déploiement que vous modifiez est nommé deployment.debug.template.json. Ce fichier est un modèle de manifeste de déploiement IoT Edge définissant tous les modules qui s’exécuteront sur un appareil, ainsi que la façon dont ils communiqueront les uns avec les autres. Pour plus d’informations sur les manifestes de déploiement, consultez Découvrir comment déployer des modules et établir des routes.

Si vous ouvrez ce modèle de déploiement, vous constatez que les deux modules de runtime, edgeAgent et edgeHub, sont inclus, ainsi que le module personnalisé que vous avez créé dans ce projet Visual Studio. Un quatrième module nommé SimulatedTemperatureSensor est également inclus. Ce module par défaut génère des données simulées que vous pouvez utiliser pour tester vos modules, ou les supprimer s’ils ne sont pas nécessaires. Pour voir comment fonctionne le capteur de température simulé, consultez le code source SimulatedTemperatureSensor.csproj.

Définir la version du runtime IoT Edge

Actuellement, la dernière version stable est la version 1.4. Vous devez mettre à jour la version IoT Edge runtime vers la dernière version stable ou la version que vous souhaitez cibler pour vos appareils.

  1. Dans l’Explorateur de solutions, cliquez avec le bouton de droite sur le nom de votre projet principal, puis sélectionnez Définir la version du runtime IoT Edge.

    Screenshot of how to find and select the menu item named 'Set IoT Edge Runtime version'.

  2. Utilisez le menu déroulant pour choisir la version du runtime que vos appareils IoT Edge exécutent, puis sélectionnez OK pour enregistrer vos modifications. Si aucune modification n’a été apportée, sélectionnez Annuler pour quitter.

    Actuellement, l’extension n’inclut pas de sélection pour les dernières versions du runtime. Si vous souhaitez définir la version du runtime supérieure à 1.2, ouvrez le fichier manifeste de déploiement deployment.debug.template.json . Modifiez la version du runtime pour les images de module du runtime système edgeAgent et edgeHub. Par exemple, si vous souhaitez utiliser la version 1.4 du runtime IoT Edge, modifiez les lignes suivantes dans le fichier manifeste de déploiement :

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. Si vous avez modifié la version, générez à nouveau votre manifeste de déploiement en cliquant avec le bouton droit sur le nom de votre projet, puis sélectionnez Générer le déploiement pour IoT Edge. Cela génère un manifeste de déploiement basé sur votre modèle de déploiement et apparaît dans le dossier de configuration de votre projet Visual Studio.

  1. Ouvrez le fichier manifeste de déploiement deployment.debug.template.json . Le manifeste de déploiement est un document JSON qui décrit les modules devant être configurés sur l’appareil IoT Edge ciblé.

  2. Modifiez la version du runtime pour les images de module du runtime système edgeAgent et edgeHub. Par exemple, si vous souhaitez utiliser la version 1.4 du runtime IoT Edge, modifiez les lignes suivantes dans le fichier manifeste de déploiement :

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

Options de développement de l’infrastructure de module

Lorsque vous ajoutez un nouveau module, celui-ci est fourni avec un code par défaut prêt pour génération et déploiement sur un appareil afin que vous puissiez commencer à tester sans écrire de code. Le code du module se trouve dans le dossier de celui-ci, dans un fichier nommé Program.cs (pour C#) ou main.c (pour C).

La solution par défaut est générée de façon à ce que les données simulées du module SimulatedTemperatureSensor soient acheminées vers votre module qui prend l’entrée, puis l’envoie à IoT Hub.

Lorsque vous êtes prêt à personnaliser le modèle de module avec votre propre code, utilisez les kits SDK Azure IoT Hub pour générer des modules répondant aux besoins des solutions IoT, tels que la sécurité, la gestion des appareils et la fiabilité.

Déboguer à l’aide du simulateur

L’outil de développement hub Azure IoT Edge fournit une expérience de développement et débogage locale. L’outil aide à démarrer des modules IoT Edge sans le runtime IoT Edge de façon à pouvoir créer, développer, tester, exécuter et déboguer des modules et solutions IoT Edge localement. Vous n’êtes pas obligé d’envoyer des images à un registre de conteneurs et de les déployer sur un appareil à des fins de test.

Pour plus d’informations, consultez Azure IoT EdgeHub Dev Tool.

Pour initialiser l’outil dans Visual Studio :

  1. Récupérez la chaîne de connexion de votre appareil IoT Edge (disponible dans votre IoT Hub) à partir du portail Azure ou d’Azure CLI.

    Si vous utilisez l’interface CLI pour récupérer votre chaîne de connexion, utilisez cette commande, en remplaçant « [device_id] » et « [hub_name] » par vos propres valeurs :

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. Dans le menu Outils dans Visual Studio, sélectionnez Azure IoT Edge Tools>Configurer un simulateur IoT Edge.

  3. Collez la chaîne de connexion, puis sélectionnez OK.

Remarque

Vous ne devez suivre ces étapes qu’une seule fois sur votre ordinateur de développement, car les résultats sont automatiquement appliqués à toutes les solutions Azure IoT Edge suivantes. Vous pouvez suivre cette procédure à nouveau si vous devez changer de chaîne de connexion.

Générer et déboguer un seul module

En règle générale, vous souhaitez tester et déboguer chaque module avant de l’exécuter dans une solution entière avec plusieurs modules. L’outil de simulateur IoT Edge vous permet d’exécuter un seul module de manière isolée et d’envoyer des messages sur le port 53000.

  1. Dans Explorateur de solutions, sélectionnez et mettez en surbrillance le dossier du projet de module (par exemple, IotEdgeModule1). Définissez le module personnalisé comme projet de démarrage. SélectionnezProjet> Définir comme projet de démarrage dans le menu.

  2. Appuyez sur F5 ou sélectionnez le bouton Exécuter la barre d’outils pour démarrer le simulateur de IoT Edge pour un seul module. Cela peut prendre 10 à 20 secondes au départ.

    Screenshot of how to run a module.

  3. Si le module a été initialisé avec succès, vous devriez voir apparaître une fenêtre d’application console .NET Core.

  4. Définissez un point d’arrêt pour inspecter le module.

    • Si vous développez en C#, définissez un point d’arrêt dans la fonction PipeMessage() dans ModuleBackgroundService.cs.
    • Si vous utilisez C, définissez un point d’arrêt dans la fonction InputQueue1Callback() dans InputQueue1Callback().
  5. Testez le module en envoyant un message. Lorsque vous déboguez un seul module, le simulateur écoute sur le port par défaut 53000 pour les messages. Pour envoyer un message à votre module, exécutez la commande curl suivante à partir d’un interpréteur de commandes comme Git Bash ou WSL Bash.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    Si vous obtenez l’erreur Accolade/crochet fermant sans correspondance dans l’URL, essayez à la place la commande suivante :

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    Screenshot of the output console, Visual Studio project, and Bash window.

    Le point d’arrêt doit être déclenché. Vous pouvez observer les variables dans la fenêtre Variables locales de Visual Studio, disponible lorsque le débogueur est en cours d’exécution. Accédez à Déboguer >Windows>Local.

    Dans votre interpréteur de commandes Bash ou shell, vous devriez voir une confirmation {"message":"accepted"}.

    Dans votre console .NET, vous devriez voir :

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    Conseil

    Vous pouvez aussi utiliser PostMan ou d’autres outils d’API pour envoyer des messages à la place de curl.

  6. Appuyez sur Ctrl+F5 ou sélectionnez le bouton Arrêter pour arrêter le débogage.

Générer et déboguer plusieurs modules

Une fois que nous avons fini de développer un module, nous pouvons exécuter et déboguer une solution entière avec plusieurs modules. L’outil de simulateur IoT Edge vous permet d’exécuter tous les modules définis dans le manifeste de déploiement, y compris un edgeHub simulé pour le routage des messages. Dans cet exemple, vous exécutez deux modules personnalisés et le module de capteur de température simulé. Les messages du module de capteur de température simulé sont routés vers chaque module personnalisé.

  1. Dans Explorateur de solutions, ajoutez un deuxième module à la solution en cliquant avec le bouton droit sur le dossier du projet principal. Dans le menu, sélectionnez Ajouter>Nouveau module IoT Edge.

    Screenshot of how to add a 'New IoT Edge Module' from the menu.

  2. Dans la fenêtre Add module, donnez un nom à votre nouveau module et remplacez la partie localhost:5000 de l’URL du référentiel par votre serveur de connexion Azure Container Registry, comme vous l’avez fait précédemment.

  3. Ouvrez le fichier deployment.debug.template.json et constatez que le nouveau module a été ajouté dans la section modules. Un nouvel itinéraire a également été ajouté à la section routes dans EdgeHub pour envoyer des messages du nouveau module à IoT Hub. Pour envoyer des données du capteur de température simulé au nouveau module, ajoutez un autre itinéraire comme dans avec la ligne suivante de JSON. Remplacez <NewModuleName> (à deux emplacements) par votre propre nom de module.

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. Cliquez avec le bouton droit sur le projet principal (par exemple AzureIotEdgeApp1) et sélectionnez Définir en tant que projet de démarrage. En définissant le projet principal comme projet de démarrage, tous les modules de la solution s’exécutent. Cela inclut les deux modules que vous avez ajoutés à la solution, le module de capteur de température simulé et le hub Edge simulé.

  5. Appuyez sur F5 ou sélectionnez le bouton Exécuter de la barre d’outils pour exécuter la solution. Cela peut prendre 10 à 20 secondes au départ. Assurez-vous que vous n’avez pas d’autres conteneurs Docker en cours d’exécution qui peuvent lier le port dont vous avez besoin pour ce projet.

  6. Deux fenêtres d’application console .NET Core doivent apparaître une pour chaque module.

  7. Définissez un point d’arrêt pour inspecter les modules.

    • Si vous développez en C#, définissez un point d’arrêt dans la fonction PipeMessage() dans ModuleBackgroundService.cs.
    • Si vous utilisez C, définissez un point d’arrêt dans la fonction InputQueue1Callback() dans InputQueue1Callback().
  8. Créez des points d’arrêt dans chaque module, puis appuyez sur F5 pour exécuter et déboguer plusieurs modules simultanément. Vous devriez voir plusieurs fenêtres d’applications console .NET Core, chacune d’elles représentant un module différent.

    Screenshot of Visual Studio with two output consoles.

  9. Appuyez sur Ctrl+F5 ou sélectionnez le bouton Arrêter pour arrêter le débogage.

Générer et envoyer (push) des images au registre

Une fois que vous avez développé et débogué votre module, vous pouvez générer et envoyer (push) l’image du module à votre Azure Container Registry. Vous pouvez ensuite déployer le module sur votre appareil IoT Edge.

  1. Définir le projet principal de IoT Edge est le projet de démarrage, pas l’un des modules individuels.

  2. Sélectionnez Déboguer ou Publier comme configuration pour générer vos images de module.

    Remarque

    Lorsque vous choisissez Déboguer, Visual Studio utilise Dockerfile.(amd64|windows-amd64).debug pour générer des images Docker. Ceci inclut le débogueur en ligne de commande .NET Core (VSDBG) dans votre image conteneur lors de sa génération. Pour obtenir des modules IoT Edge prêts pour la production, nous vous recommandons d’utiliser la configuration Publier qui utilise Dockerfile.(amd64|windows-amd64) sans VSDBG.

  3. Si vous utilisez un registre privé tel qu’Azure Container Registry (ACR), servez-vous de la commande Docker suivante pour vous y connecter. Vous pouvez récupérer le nom d’utilisateur et le mot de passe à partir de la page Clés d’accès de votre registre dans le Portail Azure.

    docker login <ACR login server>
    
  4. Ajoutons les informations de connexion Azure Container Registry aux paramètres d’exécution trouvés dans le fichier deployment.debug.template.json. Il existe deux façons d'effectuer cette opération. Vous pouvez ajouter vos informations d’identification à votre fichier .env (plus sûr) ou les ajouter directement à votre fichier deployment.debug.template.json.

    Ajoutez les informations d’identification à votre fichier .env :

    Dans l’Explorateur de solutions, sélectionnez le bouton Afficher tous les fichiers. Le .env fichier s’affiche. Ajoutez votre nom d’utilisateur et votre mot de passe Azure Container Registry à votre fichier .env. Ces informations d’identification sont disponibles sur la page Clés d’accès d’Azure Container Registry dans le portail Azure.

    Screenshot of button that shows all files in the Solution Explorer.

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    Ajouter les informations d’identification directement dans deployment.debug.template.json

    Si vous préférez ajouter vos informations d’identification directement à votre modèle de déploiement, remplacez les espaces réservés par votre nom d’utilisateur administrateur ACR, votre mot de passe et votre nom de registre.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Remarque

    Cet article utilise les informations d’identification de l’administrateur pour Azure Container Registry, qui conviennent pour des scénarios de développement et de test. Lorsque vous êtes prêt pour les scénarios de production, nous vous recommandons d’utiliser l’option d’authentification de moindre privilège, comme les principaux de service. Pour plus d’informations, consultez Gérer l’accès au registre de conteneurs.

  5. Si vous utilisez un registre local, vous pouvez exécuter un registre local.

  6. Enfin, dans Explorateur de solutions, cliquez avec le bouton droit sur le projet de dossier principal, puis sélectionnez Générer et envoyer (push) les modules IoT Edge afin de générer et envoyer l’image Docker pour chaque module. Cette opération peut prendre une minute. Lorsque vous voyez Finished Build and Push IoT Edge Modules. dans la console de sortie de Visual Studio, vous avez terminé.

Déployer la solution

Maintenant que vous avez créé et poussé vos images de module vers votre Azure Container Registry, vous pouvez déployer la solution sur votre appareil IoT Edge. Vous disposez déjà d’un modèle de manifeste de déploiement que vous avez observé tout au long de ce tutoriel. Nous allons générer un manifeste de déploiement à partir de celui-ci, puis utiliser une commande Azure CLI pour déployer vos modules sur votre appareil IoT Edge dans Azure.

  1. Cliquez avec le bouton droit sur votre projet principal dans l’Explorateur de solutions Visual Studio et choisissez Générer le déploiement pour IoT Edge.

    Screenshot of location of the 'generate deployment' menu item.

  2. Accédez à votre dossier de projet principal Visual Studio local et recherchez le dossier config. Le chemin d’accès du fichier peut se présenter de la façon suivante : C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config. Ici, vous trouverez le manifeste de déploiement généré, tel que deployment.amd64.debug.json.

  3. Vérifiez votre fichier deployment.amd64.debug.json pour confirmer que la version du schéma edgeHub est définie sur 1.2.

     "$edgeHub": {
         "properties.desired": {
           "schemaVersion": "1.2",
           "routes": {
             "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream",
             "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")",
             "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream"
           },
           "storeAndForwardConfiguration": {
             "timeToLiveSecs": 7200
           }
         }
       }
    

    Conseil

    Le modèle de déploiement pour Visual Studio 2022 nécessite la version de schéma 1.2. Si vous avez besoin de la version 1.1 ou 1.0, attendez jusqu’à ce que le déploiement soit généré (ne le modifiez pas dans deployment.debug.template.json). La génération d’un déploiement crée par défaut un schéma 1.2. Toutefois, vous pouvez modifier manuellement deployment.amd64.debug.json, le manifeste généré, si nécessaire avant de le déployer sur Azure.

    Important

    Une fois que votre appareil IoT Edge est déployé, il ne s’affiche pas correctement dans le portail Azure avec la version de schéma 1.2 (la version 1.1 n’aura pas ce problème). Il s’agit d’un bogue connu qui sera bientôt corrigé. Toutefois, cela n’affecte pas votre appareil, car il est toujours connecté dans IoT Hub et peut communiquer à tout moment à l’aide d’Azure CLI.

    Screenshot of Azure portal error on the IoT Edge device page.

  4. Nous allons maintenant déployer notre manifeste avec une commande Azure CLI. Ouvrez l’Invite de commandes développeur de Visual Studio et accédez au répertoire config.

        cd config
    
  5. Déployez le manifeste pour votre appareil IoT Edge sur IoT Hub. La commande configure l’appareil pour utiliser les modules développés dans votre solution. Le manifeste de déploiement a été créé à l’étape précédente et est stocké dans le dossier config. À partir de votre dossier config, exécutez la commande de déploiement suivante. Remplacez [device id], [hub name] et [file path] par vos valeurs. Si l’ID d’appareil IoT Edge n’existe pas dans le hub IoT, il doit être créé.

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    Par exemple, votre commande peut se présenter comme suit :

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. Après avoir exécuté la commande, vous verrez une confirmation du déploiement imprimé dans JSON dans votre invite de commandes.

Générer l’image Docker du module

Une fois que vous avez développé votre module, vous pouvez générer l’image de module à stocker dans un registre de conteneurs pour le déploiement sur votre appareil IoT Edge.

Utilisez le Dockerfile du module pour générer l’image Docker du module.

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

Par exemple, supposons que votre interpréteur de commandes se trouve dans le répertoire de votre projet et que le nom de votre module est IotEdgeModule1. Pour générer l’image pour le registre local ou un registre de conteneurs Azure, utilisez les commandes suivantes :

# Build the image for the local registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

# Or build the image for an Azure Container Registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

Pousser (push) l’image Docker du module

Envoyez (push) votre image de module vers le registre local ou un registre de conteneurs.

docker push <ImageName>

Par exemple :

# Push the Docker image to the local registry

docker push localhost:5000/iotedgemodule1:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64

Déployer le module sur l’appareil IoT Edge

Dans Visual Studio, ouvrez le fichier manifeste de déploiement deployment.debug.template.json dans le projet principal. Le manifeste de déploiement est un document JSON qui décrit les modules devant être configurés sur l’appareil IoT Edge ciblé. Avant le déploiement, vous devez mettre à jour vos informations d’identification Azure Container Registry et vos images de module avec les valeurs createOptions appropriées. Pour plus d’informations sur les valeurs createOption, consultez Guide pratique pour configurer les options de création de conteneur pour les modules IoT Edge.

  1. Si vous utilisez Azure Container Registry pour stocker votre image de module, vous devez ajouter vos informations d’identification à deployment.debug.template.json dans les paramètres edgeAgent. Par exemple,

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_acr_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    //...
    
  2. Remplacez la valeur de la propriété image par le nom de l’image de module que vous avez envoyée au registre. Par exemple, si vous avez envoyé (push) une image marquée myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 pour le module personnalisé IotEdgeModule1, remplacez la valeur de la propriété image par la valeur de balise.

  3. Ajoutez ou remplacez la valeur createOptions par du contenu stringified pour chaque système et module personnalisé dans le modèle de déploiement.

    Par exemple, les paramètres image etcreateOptions de iotEdgeModule1 sont similaires à ce qui suit :

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    

Utilisez la commande IoT Edge Azure CLI set-modules pour déployer les modules sur le hub Azure IoT. Par exemple, pour déployer les modules définis dans le fichier deployment.debug.amd64.json sur le hub IoT my-iot-hub pour l’appareil IoT Edge my-device, utilisez la commande suivante :

az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Conseil

Vous trouverez votre chaîne de connexion IoT Hub dans le portail Azure sous Azure IoT Hub >Paramètres de sécurité>Stratégies d’accès partagé.

Confirmer le déploiement sur votre appareil

Pour vérifier que vos modules IoT Edge ont été déployés sur Azure, connectez-vous à votre appareil (ou machine virtuelle), par exemple via SSH ou Azure Bastion, puis exécutez la commande de liste IoT Edge.

   iotedge list

Vous devriez voir la liste de vos modules s’exécutant sur votre appareil ou machine virtuelle.

   NAME                        STATUS           DESCRIPTION      CONFIG
   SimulatedTemperatureSensor  running          Up a minute      mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
   edgeAgent                   running          Up a minute      mcr.microsoft.com/azureiotedge-agent:1.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   IotEdgeModule1              running          Up a minute      myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
   myIotEdgeModule2            running          Up a minute      myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug

Déboguer avec Docker Remote SSH

Les moteurs Docker et Moby prennent en charge les connexions SSH aux conteneurs, ce qui vous permet d’attacher et de déboguer du code sur un appareil distant à l’aide de Visual Studio.

  1. La connexion distante à Docker nécessite des privilèges de niveau root. Effectuez les étapes dans Gérer Docker en tant qu’utilisateur non-root pour autoriser la connexion au démon Docker sur l’appareil distant. Une fois le débogage terminé, vous pouvez supprimer votre utilisateur du groupe Docker.

  2. Suivez les étapes pour utiliser Visual Studio pour Attacher un processus en cours d’exécution sur un conteneur Docker sur votre appareil distant.

  3. Dans Visual Studio, définissez des points d’arrêt dans votre module personnalisé.

  4. Lorsqu’un point d’arrêt est atteint, vous pouvez inspecter les variables, parcourir le code et déboguer votre module.

    Screenshot of Visual Studio attached to remote docker container on a device paused on a breakpoint.

Étapes suivantes