Partager via


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

S’applique à :Coche IoT Edge 1.5 IoT Edge 1.5

Important

IoT Edge 1.5 LTS est la version prise en charge. IoT Edge 1.4 LTS est en fin de vie depuis le 12 novembre 2024. 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 incluent Windows x64, 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 des étapes pour deux outils de développement IoT Edge :

  • Interface de ligne de commande (CLI), l’outil préféré pour le développement
  • Extension des outils Azure IoT Edge pour Visual Studio (en mode maintenance)

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

  • 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éployez 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. Utilisez l'extension Azure IoT Edge Tools pour créer et développer votre solution IoT Edge. L’outil de développement préféré est l’interface CLI des outils de développement Azure IoT Edge. L’extension inclut les modèles de projet Azure IoT Edge utilisés pour créer le projet Visual Studio. 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’interface CLI des outils de développement Azure IoT Edge.

    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

    Utilisez un registre Docker local pour le prototypage et le test au lieu d’un registre cloud.

  • Installez Azure CLI.

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

    • La création d’un dans le portail Azure est la méthode la 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 l’appareil IoT Edge, puis sélectionnez Enregistrer en bas à gauche.

      Vérifiez que votre nouvel appareil existe dans votre IoT Hub à partir du menu Appareils de gestion des > appareils . Pour plus d’informations sur la création d’un appareil IoT Edge via le portail Azure, consultez Créer et approvisionner un appareil IoT Edge sur Linux à l’aide de 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.

Avertissement

Les outils Azure IoT Edge pour l’extension Visual Studio ne contiennent pas les modèles de projet pour les modules C et C#. Si vous ne pouvez pas créer de modules IoT Edge à l’aide de l’extension, utilisez la solution de contournement suivante.

Téléchargez les fichiers suivants et placez-les dans le répertoire des modèles de Visual Studio :

Fichier de modèle Ajoutez au répertoire
azureiotedgemodule-v0.0.4.zip %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C#
azureiotedgevcmodulevs17-v0.0.9.zip %userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates\Visual C++ Project

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 du 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. Utilisez 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 qui correspond à la plateforme et à l’architecture de votre appareil IoT Edge, puis sélectionnez Suivant.

  3. Dans Configurer votre nouveau projet, entrez un nom pour votre projet, spécifiez l’emplacement, puis 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.

    Capture d’écran montrant comment ajouter l’application et le module.

    Remarque

    Pour modifier l’URL du référentiel dans un projet IoT Edge existant, ouvrez le fichier module.json . L’URL du référentiel se trouve dans la propriété du dépôt du fichier JSON.

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

Structure de projet

Votre solution comporte deux dossiers au niveau du projet : 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 votre code de module, nommé soit Program.cs soit main.c, selon la langue que vous choisissez. Ce dossier possède également un fichier nommé module.json qui décrit les métadonnées de votre module. Différents fichiers Docker fournissent ici les informations nécessaires pour générer votre module en tant que conteneur Windows ou Linux.

Manifeste de déploiement de votre projet

Modifiez le manifeste de déploiement nommé deployment.debug.template.json. Ce fichier est un modèle de manifeste de déploiement IoT Edge qui définit tous les modules qui s’exécutent sur un appareil et comment ils communiquent entre eux. Pour plus d’informations sur les manifestes de déploiement, consultez Découvrir comment déployer des modules et établir des routes.

Lorsque vous ouvrez ce modèle de déploiement, vous voyez que les deux modules d’exécution, 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 supprimer s’il n’est pas nécessaire. Pour savoir comment fonctionne le capteur de température simulé, consultez le code source SimulatedTemperatureSensor.csproj.

Définir la version du runtime IoT Edge

La dernière version du runtime stable est 1.5. Mettez à jour la version du runtime IoT Edge 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 droit sur le nom de votre projet principal, puis sélectionnez Définir la version du runtime IoT Edge.

    Capture d’écran montrant comment trouver et sélectionner l’élément de menu nommé « Définir la version du runtime IoT Edge ».

  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.

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

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.5"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
       //...
    
  3. Si vous avez modifié la version, régénérez 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 le place dans le dossier config de votre projet Visual Studio.

  1. Ouvrez le fichier manifeste de déploiementdeployment.debug.template.json . Le manifeste de déploiement est un document JSON qui décrit les modules à configurer 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, pour utiliser le runtime IoT Edge version 1.5, modifiez les lignes suivantes dans le fichier manifeste de déploiement :

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

Infrastructure de module et options de développement

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 général, il est préférable de tester et de déboguer chaque module avant de l’exécuter au sein d’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.

    Capture d’écran montrant comment exécuter un 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 les messages sur le port par défaut 53000. 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
    

    Capture d’écran de la console de sortie, du projet Visual Studio et de la fenêtre Bash.

    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]
    
  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 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.

    Capture d’écran montrant comment ajouter un nouveau module IoT Edge à partir du 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 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.

    Capture d’écran de Visual Studio avec deux consoles de sortie.

  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

Après avoir développé et débogué votre module, compilez et transférez l’image du module à votre Azure Container Registry. Déployez ensuite 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. Cela inclut un débogueur de ligne de commande .NET Core, VSDBG, dans votre image de conteneur. Pour les modules IoT Edge prêts pour la production, utilisez la configuration Release , qui utilise Dockerfile.(amd64|windows-amd64) sans VSDBG.

  3. Si vous utilisez un registre privé comme Azure Container Registry (ACR), utilisez la commande Docker suivante pour vous connecter. Obtenez 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. Ajoutez les informations de connexion Azure Container Registry aux paramètres d’exécution dans le deployment.debug.template.json fichier. Vous pouvez ajouter vos informations d’identification de Registre à votre .env fichier (le plus sécurisé) ou les ajouter directement à votre deployment.debug.template.json fichier.

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

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

    Capture d’écran montrant un bouton qui affiche tous les fichiers dans l’Explorateur de solutions.

        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 souhaitez 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, exécutez 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 envoyé vos images de module à votre Azure Container Registry, déployez la solution sur votre appareil IoT Edge. Vous disposez déjà d’un modèle de manifeste de déploiement dans ce didacticiel. Générez un manifeste de déploiement à partir de celui-ci, puis utilisez 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.

    Capture d’écran montrant l’emplacement de l’élément de menu « Générer un déploiement ».

  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 figure le manifeste de déploiement généré, par exemple deployment.amd64.debug.json.

  3. Ouvrez votre deployment.amd64.debug.json fichier et vérifiez que la version du edgeHub schéma 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 changez pas dans deployment.debug.template.json). La génération d’un déploiement crée un schéma 1.2 par défaut. 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 votre appareil IoT Edge déployé, il ne s’affiche pas correctement dans le portail Azure avec la version 1.2 du schéma (la version 1.1 est correcte). Toutefois, cela n’affecte pas votre appareil, car il est toujours connecté dans IoT Hub et peut être communiqué à tout moment à l’aide d’Azure CLI.

    Capture d’écran montrant une erreur du portail Azure dans la page de l’appareil IoT Edge.

  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 voyez une confirmation du déploiement imprimé dans JSON dans votre invite de commandes.

Générer l’image Docker du module

Après avoir développé votre module, générez 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, si votre interpréteur de commandes se trouve dans votre répertoire de projet et que votre nom de module est IotEdgeModule1, utilisez les commandes suivantes pour générer l’image pour le registre local ou un registre de conteneurs Azure :

# 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 en chaîne 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 set-modules Azure CLI IoT Edge pour déployer les modules sur Azure IoT Hub. Par exemple, pour déployer les modules définis dans le fichier deployment.debug.amd64.json sur IoT Hub my-iot-hub pour l’appareil IoT Edge my-device, exécutez 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

Trouvez votre chaîne de connexion IoT Hub dans le portail Azure sous >Paramètres de sécurité>.

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 souhaiterez peut-être 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.

    Capture d’écran de Visual Studio attaché à un conteneur Docker distant sur un appareil suspendu sur un point d’arrêt.

Étapes suivantes