Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :
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.batInstaller le package azure-iot-sdk-c pour Windows
vcpkg.exe install azure-iot-sdk-c:x64-windows vcpkg.exe --triplet x64-windows integrate installTé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.
Dans Visual Studio, créez un projet.
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.
Dans Configurer votre nouveau projet, entrez un nom pour votre projet, spécifiez l’emplacement, puis sélectionnez Créer.
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.
Dans Nom du module, entrez un nom pour votre module. Choisissez un nom qui est unique dans le registre de conteneurs.
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> .
Sélectionnez Ajouter pour ajouter votre module au projet.
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.
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.
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", //...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.
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é.
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 :
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]Dans le menu Outils dans Visual Studio, sélectionnez Azure IoT Edge Tools>Configurer un simulateur IoT Edge.
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.
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.
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.
Si le module a été initialisé avec succès, vous devriez voir apparaître une fenêtre d’application console .NET Core.
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()dansInputQueue1Callback().
- Si vous développez en C#, définissez un point d’arrêt dans la fonction
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/messagesSi 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/messagesLe 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]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é.
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.
Dans la fenêtre
Add module, donnez un nom à votre nouveau module et remplacez la partielocalhost:5000de l’URL du référentiel par votre serveur de connexion Azure Container Registry, comme vous l’avez fait précédemment.Ouvrez le fichier
deployment.debug.template.jsonet constatez que le nouveau module a été ajouté dans la section modules. Un nouvel itinéraire a également été ajouté à la section routes dansEdgeHubpour 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 deJSON. Remplacez<NewModuleName>(à deux emplacements) par votre propre nom de module."sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"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é.
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.
Deux fenêtres d’application console .NET Core doivent apparaître une pour chaque module.
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()dansInputQueue1Callback().
- Si vous développez en C#, définissez un point d’arrêt dans la fonction
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.
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.
Définir le projet principal de IoT Edge est le projet de démarrage, pas l’un des modules individuels.
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).debugpour 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 utiliseDockerfile.(amd64|windows-amd64)sans VSDBG.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>Ajoutez les informations de connexion Azure Container Registry aux paramètres d’exécution dans le
deployment.debug.template.jsonfichier. Vous pouvez ajouter vos informations d’identification de Registre à votre.envfichier (le plus sécurisé) ou les ajouter directement à votredeployment.debug.template.jsonfichier.Ajoutez les informations d’identification à votre fichier
.env:Dans l’Explorateur de solutions, sélectionnez le bouton Afficher tous les fichiers. Le fichier
.envs’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.
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.
Si vous utilisez un registre local, exécutez un registre local.
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.
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.
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 exempledeployment.amd64.debug.json.Ouvrez votre
deployment.amd64.debug.jsonfichier et vérifiez que la version duedgeHubsché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 manuellementdeployment.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.
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 configDé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.jsonAprè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.
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" } } } }, //...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-amd64pour le module personnalisé IotEdgeModule1, remplacez la valeur de la propriété image par la valeur de balise.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.
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.
Suivez les étapes pour utiliser Visual Studio pour Attacher un processus en cours d’exécution sur un conteneur Docker sur votre appareil distant.
Dans Visual Studio, définissez des points d’arrêt dans votre module personnalisé.
Lorsqu’un point d’arrêt est atteint, vous pouvez inspecter les variables, parcourir le code et déboguer votre module.
Étapes suivantes
Pour développer des modules personnalisés pour vos appareils IoT Edge, voir Comprendre et utiliser les kits Azure IoT Hub SDK.
Pour surveiller les messages appareil-à-cloud (D2C) d’un appareil IoT Edge spécifique, passez en revue le Tutoriel : Monitoring des appareils IoT Edge pour commencer.