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 Mettre à jour IoT Edge.
Ce didacticiel vous guide dans le développement, le débogage et le déploiement de votre propre code sur un appareil Azure IoT Edge à l’aide d’IoT Edge pour Linux sur Windows et Visual Studio 2022. Vous apprendrez le scénario de développement le plus courant pour les solutions IoT Edge en déployant un module C# sur un appareil Linux. Vous déploierez et déboguerez un module IoT Edge personnalisé exécuté dans un conteneur Linux sous Windows. Même si vous prévoyez d’utiliser un langage différent ou de déployer un service Azure, ce didacticiel reste utile pour en savoir plus sur les outils et concepts de développement.
Ce didacticiel comprend les étapes de deux outils de développement IoT Edge :
- L'interface de ligne de commande (CLI) Azure IoT Edge Dev Tool, qui est l'outil privilégié pour le développement
- Extension Azure IoT Edge Tools pour Visual Studio, qui est en mode maintenance
Utilisez le bouton de sélection au début de ce didacticiel pour sélectionner la version de l'outil.
Dans ce tutoriel, vous allez apprendre à :
- Configurer votre machine de développement
- Utilisez les outils de développement IoT Edge pour créer un nouveau projet.
- Générez votre projet en tant que conteneur et stockez-le dans azure Container Registry.
- Déployer votre code sur un appareil IoT Edge
Prérequis
Ce didacticiel suppose que vous utilisez une machine exécutant Windows comme machine de développement. Sur les ordinateurs Windows, vous pouvez développer des modules Windows ou Linux. Ce tutoriel vous guide tout au long du développement de conteneurs Linux, à l’aide d’IoT Edge pour Linux sur Windows pour la génération et le déploiement des modules.
Avant de commencer :
Installez IoT Edge pour Linux sur Windows.
Lisez le guide de démarrage rapide Déployer votre premier module IoT Edge sur un appareil Windows.
Téléchargez le Kit de développement logiciel (SDK) .NET Core.
Installez ou modifiez Visual Studio 2022 sur votre machine de développement. Choisissez le développement Azure et le développement Desktop avec les options de charge de travail C++ .
Une fois votre installation de Visual Studio 2022 prête, téléchargez et installez Azure IoT Edge Tools à partir de Visual Studio Marketplace.
Vous pouvez utiliser l’extension Azure IoT Edge Tools pour créer et générer votre solution IoT Edge. L’outil de développement préféré est l’interface de ligne de commande Azure IoT Edge Dev Tool CLI. L’extension inclut les modèles de projet Azure IoT Edge que vous utilisez pour créer le projet Visual Studio. Actuellement, vous devez installer l'extension quel que soit l'outil de développement que vous utilisez.
Conseil
Si vous utilisez Visual Studio 2019, téléchargez et installez Azure IoT Edge Tools pour Visual Studio 2019 à partir de Visual Studio Marketplace.
- Installez Azure CLI.
- Créez un hub IoT de niveau gratuit ou standard dans Azure en tant que ressource cloud.
Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.
Concepts clés
Ce tutoriel décrit le développement d’un module IoT Edge. Un module IoT Edge est un conteneur contenant du code exécutable. Vous pouvez déployer un ou plusieurs modules sur un appareil IoT Edge. Les modules effectuent des tâches spécifiques comme l’ingestion de données provenant de capteurs, le nettoyage et l’analyse de données ou encore l’envoi de messages à un hub IoT. Pour plus d’informations, consultez Comprendre les modules Azure IoT Edge.
Lorsque vous développez des modules IoT Edge, il est important de comprendre la différence entre la machine de développement et l'appareil IoT Edge cible sur lequel le module sera éventuellement déployé. Le conteneur que vous générez pour contenir votre code de module doit correspondre au système d’exploitation de l’appareil cible.
Par exemple, le scénario le plus courant est celui d’une personne développant un module sur un ordinateur Windows qui souhaite cibler un appareil Linux exécutant IoT Edge. Dans ce cas, le système d’exploitation du conteneur est Linux.
À mesure que vous parcourez ce tutoriel, gardez à l’esprit la différence entre système d’exploitation de la machine de développement et système d’exploitation du conteneur. Pour ce didacticiel, vous utiliserez votre hôte Windows pour le développement et la machine virtuelle (VM) IoT Edge pour Linux sur Windows pour créer et déployer les modules.
Ce didacticiel cible les appareils qui exécutent IoT Edge avec des conteneurs Linux. Vous pouvez utiliser le système d’exploitation de votre choix, à condition que votre machine de développement exécute des conteneurs Linux. Visual Studio étant recommandé pour développer avec des conteneurs Linux, nous l’utilisons dans le cadre de ce tutoriel. Vous pouvez également utiliser Visual Studio Code, bien qu’il existe des différences de support entre les deux outils. Pour plus d’informations, consultez Développer des modules Azure IoT Edge à l’aide de Visual Studio Code.
Configurez la CLI Docker et le moteur Docker pour la connexion à distance
Les modules IoT Edge étant empaquetés en tant que conteneurs, vous avez besoin d’un moteur de conteneur sur votre machine de développement pour les générer et les gérer.
L’IoT Edge pour Linux sur la machine virtuelle Windows contient déjà une instance du moteur Docker. Ce didacticiel vous montre comment vous connecter à distance depuis la machine de développement Windows à l'instance Docker IoT Edge pour Linux sur Windows VM. En utilisant cette connexion à distance, vous supprimez la dépendance à Docker Desktop pour Windows.
Configurez la CLI Docker
La première étape consiste à configurer la CLI Docker sur la machine de développement Windows pour pouvoir se connecter au moteur Docker distant :
Téléchargez la version précompilée
docker.exede l’interface CLI Docker à partir de Chocolatey. Vous pouvez également télécharger le projet cli officiel à partir de GitHub et le compiler en suivant les instructions du dépôt.Extrayez
docker.exedans un répertoire de votre machine de développement ; par exemple,C:\Docker\bin.Ouvrez À propos de votre PC>Informations système>Paramètres système avancés.
Sélectionnez Avancé>variables d’environnement avancées. Sous Variables utilisateur, sélectionnez Chemin d’accès.
Modifiez la variable Path et ajoutez l’emplacement de
docker.exe.Ouvrez une session PowerShell avec élévation de privilèges.
Vérifiez que la CLI Docker est accessible en utilisant cette commande :
docker --versionSi vous avez tout configuré avec succès, la sortie de la commande doit afficher la version de Docker. Elle doit se présenter comme
Docker version 20.10.12, build e91ed57.
Configurez le moteur Docker
La deuxième étape consiste à configurer le moteur Docker IoT Edge pour Linux sur Windows VM pour accepter les connexions externes et à ajouter les règles de pare-feu appropriées.
Avertissement
L’exposition du moteur Docker à des connexions externes peut augmenter les risques de sécurité. Vous ne devez utiliser cette configuration qu'à des fins de développement. Veillez à rétablir les paramètres par défaut de la configuration une fois le développement terminé.
Ouvrez une session PowerShell avec privilèges élevés et exécutez les commandes suivantes :
# Configure the IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules. Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder. Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" # Replace the service execution line to listen for external connections. Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" # Reload the IoT Edge for Linux on Windows VM services configurations. Invoke-EflowVmCommand "sudo systemctl daemon-reload" # Reload the Docker engine service. Invoke-EflowVmCommand "sudo systemctl restart docker.service" # Check that the Docker engine is listening to external connections. Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"Voici un exemple de sortie :
PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules. PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT" PS C:\> PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder. PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service" PS C:\> PS C:\> # Replace the service execution line to listen for external connections. PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service" PS C:\> PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations. PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload" PS C:\> PS C:\> # Reload the Docker engine service. PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service" PS C:\> PS C:\> # Check that the Docker engine is listening to external connections. PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd" tcp6 0 0 :::2375 :::* LISTEN 2790/dockerd
Tester la connexion
L'étape de configuration finale consiste à tester la connexion Docker au moteur Docker IoT Edge pour Linux sur Windows VM :
Obtenez l'adresse IP de l'IoT Edge pour Linux sur une machine virtuelle Windows :
Get-EflowVmAddrConseil
Si IoT Edge pour Linux sur une machine virtuelle Windows a été déployé sans IP statique, l’adresse IP peut changer lors des redémarrages du système d’exploitation hôte Windows ou des modifications du réseau. Assurez-vous d’utiliser l’adresse IP correcte pour IoT Edge pour Linux sur la machine virtuelle Windows chaque fois que vous souhaitez établir une connexion à distance au moteur Docker.
Voici un exemple de sortie :
PS C:\> Get-EflowVmAddr [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW) - Virtual machine MAC: 00:15:5d:6f:da:78 - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine 00:15:5d:6f:da:78 172.31.24.105Connectez-vous au moteur Docker IoT Edge pour Linux sur Windows VM et exécutez l’exemple de conteneur
hello-world. Remplacez<EFLOW-VM-IP>par l’adresse IP de la machine virtuelle IoT Edge pour Linux sur Windows que vous avez obtenue à l’étape précédente.docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-worldUne fois le téléchargement du conteneur terminé, le conteneur s'exécute et produit cette sortie :
PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you're currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Créer un projet Azure IoT Edge
Le modèle de projet IoT Edge dans Visual Studio crée une solution que vous pouvez déployer sur des appareils IoT Edge. Utilisez les étapes suivantes pour créer une solution Azure IoT Edge, puis générez le premier module de cette solution. Chaque solution IoT Edge peut contenir plusieurs modules.
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. Vous devez utiliser l’extension Azure IoT Edge Tools pour créer le projet Visual Studio.
Dans Visual Studio, créez un projet en sélectionnant Créer un projet sur la page de démarrage ou en sélectionnant le bouton Nouveau projet dans la barre d’outils.
Dans la page Créer un projet , recherchez Azure IoT Edge. Sélectionnez le projet qui correspond à la plateforme (module Linux IoT Edge) et à l’architecture de votre appareil IoT Edge, puis sélectionnez Suivant.
Dans la page Configurer votre nouveau projet , entrez un nom pour votre projet et spécifiez l’emplacement, puis sélectionnez Créer.
Dans la boîte de dialogue Ajouter un module , sélectionnez le type de module que vous souhaitez développer. Vous pouvez également sélectionner un module existant pour ajouter un module IoT Edge existant à votre déploiement.
Dans Le nom du module, spécifiez le nom de votre module.
Dans l’URL du référentiel, indiquez le nom du référentiel d’images du module. Visual Studio remplit automatiquement le nom du module avec localhost :5000/<votre nom> de 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 ressemble à <nom du registre>.azurecr.io. Remplacez uniquement la partie localhost :5000 de la chaîne, afin que le résultat final ressemble <au nom> du registre.azurecr.io/< nom> du module.
Sélectionnez Ajouter pour ajouter votre module au projet.
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
Votre solution comporte deux dossiers au niveau du projet : un dossier de projet principal et un dossier de module. Par exemple, vous pouvez avoir un dossier de projet principal nommé AzureIotEdgeApp1 et un dossier de module nommé IotEdgeModule1.
Le dossier du projet principal contient votre manifeste de déploiement. Le manifeste de déploiement est un document JSON qui décrit les modules devant être configurés sur l’appareil IoT Edge ciblé.
Le dossier du module contient un fichier pour le code de votre module. Il s'appelle soit Program.cs ou main.c, selon la langue que vous avez choisie. Ce dossier contient également un fichier nommé module.json décrivant les métadonnées de votre module. Divers fichiers Docker fournissent les informations nécessaires pour créer 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 qui définit tous les modules qui s'exécutent sur un appareil. Le fichier définit également comment les modules communiquent entre eux. Pour plus d’informations sur les manifestes de déploiement, consultez Découvrez comment déployer des modules et établir des itinéraires.
Le modèle de déploiement comprend :
- Les deux modules d'exécution
edgeAgentetedgeHub. - Le module personnalisé que vous avez créé dans ce projet Visual Studio.
- Un module nommé
SimulatedTemperatureSensor. Ce module par défaut génère des données simulées que vous pouvez utiliser pour tester vos modules (ou supprimer si ce n'est pas nécessaire). Pour voir comment fonctionne le capteur de température simulé, affichez le code source SimulatedTemperatureSensor.csproj.
Définissez la version d'exécution d'IoT Edge
Actuellement, la dernière version stable est la version 1.5. Mettez à jour la version d'exécution d'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 d’exécution exécutée par vos appareils IoT Edge. Sélectionnez OK pour enregistrer vos modifications. Si vous n’avez apporté aucune modification, sélectionnez Annuler.
Actuellement, l’extension n’inclut pas de sélection pour les dernières versions du runtime. Si vous souhaitez définir la version d’exécution supérieure à 1.2, ouvrez le fichier manifeste de déploiement
deployment.debug.template.json. Modifiez la version d'exécution pour les images du module d'exécution du systèmeedgeAgentetedgeHub. Par exemple, si vous souhaitez utiliser la version 1.5 du runtime IoT Edge, 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 et en sélectionnant Générer le déploiement pour IoT Edge. Cette étape génère un manifeste de déploiement basé sur votre modèle de déploiement. Le manifeste apparaît dans le dossier
configde votre projet Visual Studio.
Ouvrez le fichier manifeste de déploiement
deployment.debug.template.json.Modifiez la version d'exécution pour les images du module d'exécution du système
edgeAgentetedgeHub. Par exemple, si vous souhaitez utiliser la version 1.5 d’IoT Edge Runtime, 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", //...
Configurez l'instance du moteur Docker distant de Visual Studio 2022
Configurez l’extension Azure IoT Edge Tools pour utiliser le moteur Docker distant qui s’exécute dans IoT Edge pour Linux sur une machine virtuelle Windows :
Sélectionnez Outils>>Paramètres des outils IoT Edge.
Remplacez la valeur DOCKER_HOST localhost par l’adresse IP de l’IoT Edge pour Linux sur une machine virtuelle Windows. Si vous ne vous souvenez pas de l’adresse IP, utilisez l’applet de commande IoT Edge pour Linux sur Windows PowerShell
Get-EflowVmAddrpour l’obtenir. Par exemple, si l’adresse IP de machine virtuelle IoT Edge pour Linux sur Windows est 172.20.1.100, la nouvelle valeur doit être tcp://172.20.1.100:2375.
Sélectionnez OK.
Développer votre module
Lorsque vous ajoutez un nouveau module, il est livré avec un code par défaut prêt à être créé et déployé sur un appareil afin que vous puissiez commencer les tests sans toucher à aucun 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).
Dans la solution par défaut, les données simulées du module SimulatedTemperatureSensor sont acheminées vers votre module. Le module prend l’entrée, puis l’envoie à Azure 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 créer d’autres modules qui répondent aux besoins clés des solutions IoT. Ces besoins peuvent inclure la sécurité, la gestion des appareils et la fiabilité.
Générer et envoyer (push) un module unique
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. Étant donné que la solution sera créée ou déboguée à l'aide du moteur Docker exécuté dans IoT Edge pour Linux sur une machine virtuelle Windows, la première étape consiste à créer et à publier le module pour permettre le débogage à distance :
Dans l’Explorateur de solutions, sélectionnez le dossier du projet de module (par exemple,
myIotEdgeModule).Définissez le module personnalisé comme projet de démarrage. Dans le menu, sélectionnez Project>Set as StartUp Project.
Pour déboguer le module C# Linux, vous devez mettre à jour le fichier
Dockerfile.amd64.debugpour activer le service SSH. Mettez à jour le fichierDockerfile.amd64.debugpour utiliser le modèle suivant : Dockerfile pour le module AMD64 C# Azure IoT Edge avec prise en charge du débogage à distance.Remarque
Lorsque vous sélectionnez Déboguer, Visual Studio utilise
Dockerfile.(amd64|windows-amd64).debugpour générer des images Docker. Ce fichier inclut le débogueur de ligne de commande .NET Core VSDBG dans votre image de conteneur lors de sa création. Pour les modules IoT Edge prêts pour la production, nous vous recommandons d’utiliser la configuration Release , qui utiliseDockerfile.(amd64|windows-amd64)sans VSDBG.Assurez-vous que dans la dernière ligne du modèle,
ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"], le nom de la DLL correspond au nom de votre projet de module IoT Edge.Pour établir une connexion SSH avec le module Linux, vous devez créer une clé RSA. Ouvrez une session PowerShell avec élévation de privilèges et exécutez les commandes suivantes pour créer une clé RSA. Enregistrez la clé RSA dans le même dossier du module IoT Edge et assurez-vous que le nom de la clé est
id_rsa.ssh-keygen -t RSA -b 4096 -m PEM
Si vous utilisez un registre privé tel qu’Azure Container Registry, servez-vous de la commande Docker suivante pour vous y connecter. Vous pouvez obtenir 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. Si vous utilisez un registre local, vous pouvez exécuter un registre local.
docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le dossier du projet, puis sélectionnez Générer et envoyer (push) des modules IoT Edge. Cette commande crée et envoie l'image Docker pour chaque module.
Si vous utilisez un registre privé tel qu’Azure Container Registry, vous devez ajouter vos informations de connexion au registre aux paramètres de runtime figurant dans le fichier
deployment.template.json. Remplacez les espaces réservés par votre nom d’utilisateur, votre mot de passe et votre nom de registre d’administrateur Container Registry."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 connexion d’administrateur pour Azure Container Registry, qui sont pratiques pour les scénarios de développement et de test. Quand vous êtes prêt pour les scénarios de production, nous vous recommandons d’utiliser l’option d’authentification avec les privilèges minimum, comme les principaux de service. Pour plus d’informations, consultez Gérer l’accès à votre registre de conteneurs.
Il est nécessaire d'exposer le port 22 pour accéder au service SSH du module. Ce tutoriel utilise 10022 comme port hôte, mais vous pouvez spécifier un port différent. Le port que vous spécifiez sera utilisé comme port SSH pour se connecter au module Linux C#. Vous devez ajouter les informations du port SSH
createOptionspour ce paramètre de module Linux dans le fichierdeployment.debug.template.json:"createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le dossier du projet, puis sélectionnez Générer le déploiement pour IoT Edge pour générer le nouveau json de déploiement IoT Edge.
Sélectionnez Afficher>Cloud Explorer. Assurez-vous que vous êtes connecté à Visual Studio 2019.
Dans Cloud Explorer, développez votre abonnement, puis recherchez Azure IoT Hub et l’appareil Azure IoT Edge que vous souhaitez déployer.
Cliquez avec le bouton droit sur l’appareil IoT Edge, puis sélectionnez Créer un déploiement. Accédez au manifeste de déploiement de débogage configuré pour votre plateforme. Il se trouve dans le dossier
configde votre solution Visual Studio, par exempledeployment.amd64.json.
Générez l’image Docker du Module
Après avoir développé votre module, vous pouvez créer l’image du module à stocker dans un registre de conteneurs pour le déploiement sur votre appareil IoT Edge.
Utilisez le Dockerfile du module pour créer l'image Docker du module :
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Par exemple, supposons que votre shell de commande se trouve dans votre répertoire de projet et que le nom de votre module est IotEdgeModule1. Pour générer l’image pour le registre local ou Azure Container Registry, 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"
Poussez l'image Docker du module
Envoyez l'image de votre module vers le registre local ou vers un registre de conteneurs :
docker push <ImageName>
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.
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 createOption les valeurs, consultez Comment configurer des options de création de conteneur pour les modules IoT Edge.
Si vous utilisez Azure Container Registry pour stocker votre image de module, ajoutez vos informations d’identification à
deployment.debug.template.jsondans les paramètresedgeAgent. 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é
imagepar le nom de l’image du module que vous avez envoyé au registre. Par exemple, si vous avez envoyé une image baliséemyacr.azurecr.io/iotedgemodule1:0.0.1-amd64pour un module personnaliséIotEdgeModule1, remplacez la valeur de la propriété de l'image par la valeur de la balise.Ajoutez ou remplacez la valeur
createOptionspar du contenu converti en chaîne pour chaque module système et personnalisé dans le modèle de déploiement.Par exemple, les paramètres
imageetcreateOptionspourIotEdgeModule1seraient similaires à l'exemple suivant :"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 le hub Azure IoT. Par exemple, pour déployer les modules définis dans le fichier
deployment.debug.amd64.jsonsur le hub IoTmy-iot-hubpour le périphérique IoT Edgemy-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 pouvez trouver 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é.
Dans Cloud Explorer, cliquez avec le bouton droit sur votre appareil Edge et actualisez pour vérifier que le nouveau module est en cours d'exécution, ainsi que les modules
$edgeAgentet$edgeHub.
Déboguer la solution
Dans une session PowerShell avec privilèges élevés, exécutez les commandes suivantes :
Obtenez la valeur
moduleId, en fonction du nom du module Linux C#. Remplacez l'espace réservé<iot-edge-module-name>par le nom de votre module.$moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"Vérifiez que
$moduleIdest correct. Si la variable est vide, assurez-vous que vous utilisez le nom de module correct.Démarrez le service SSH dans le conteneur Linux :
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"Ouvrez le port SSH du module sur IoT Edge pour Linux sur la machine virtuelle Windows. (Ce tutoriel utilise le port 10022.)
Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
Avertissement
Pour des raisons de sécurité, chaque fois que la machine virtuelle IoT Edge pour Linux sur Windows redémarre, la règle de table IP est supprimée et revient aux paramètres d'origine. De plus, vous devez redémarrer manuellement le service SSH du module.
Une fois que vous avez démarré le service SSH, sélectionnez Déboguer>Attacher au Processus, définissez le type de connexion sur SSH et définissez la cible de connexion sur l’adresse IP de votre IoT Edge pour Linux sur une machine virtuelle Windows. Si vous ne connaissez pas l’adresse IP de votre machine virtuelle IoT Edge pour Linux sur Windows, vous pouvez utiliser l’applet de commande PowerShell
Get-EflowVmAddr.Tapez l'adresse IP puis sélectionnez la touche Entrée. Dans la fenêtre contextuelle, entrez les configurations suivantes :
Champ Valeur Nom d’hôte Adresse IP pour IoT Edge pour Linux sur machine virtuelle Windows Port 10022 (ou celui que vous avez utilisé dans votre configuration de déploiement) Nom d’utilisateur racine Type d’authentification Clé privée Fichier de clé privée Chemin d'accès complet vers la valeur id_rsaque vous avez créée à une étape précédentePhrase secrète Phrase secrète utilisée pour la clé que vous avez créée à une étape précédente Une fois que vous avez réussi à vous connecter au module à l’aide de SSH, vous pouvez choisir le processus et sélectionner Attacher. Pour le module C#, vous devez choisir le processus dotnet et Attacher à Managed (CoreCLR). Cela peut prendre 10 à 20 secondes la première fois.
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()dansModuleBackgroundService.cs. - Si vous utilisez C, définissez un point d'arrêt dans la fonction
InputQueue1Callback()dansmain.c.
- Si vous développez en C#, définissez un point d'arrêt dans la fonction
La sortie
SimulatedTemperatureSensordoit être redirigée versinput1du module Linux C# personnalisé. Le point d’arrêt doit être déclenché. Vous pouvez regarder des variables dans la fenêtre Locals de Visual Studio.
Pour arrêter le débogage, sélectionnez Ctrl+F5 ou sélectionnez le bouton Arrêter .
Nettoyer les ressources
Si vous envisagez de passer à l’article recommandé suivant, vous pouvez conserver les ressources et configurations que vous avez créées afin de les réutiliser. Vous pouvez également continuer à utiliser le même appareil IoT Edge comme appareil de test.
Sinon, supprimez les configurations locales et les ressources Azure que vous avez utilisées dans cet article pour éviter des frais.
Supprimer les ressources Azure
La suppression des ressources et des groupes de ressources Azure est irréversible. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé le hub IoT à l’intérieur d’un groupe de ressources existant qui a des ressources que vous souhaitez conserver, supprimez uniquement la ressource IoT Hub elle-même, et non le groupe de ressources.
Pour supprimer les ressources :
- Connectez-vous au portail Azure, puis sélectionnez Groupes de ressources.
- Sélectionnez le nom du groupe de ressources contenant vos ressources de test de IoT Edge.
- Passez en revue la liste des ressources contenues dans votre groupe de ressources. Si vous souhaitez les supprimer, vous pouvez sélectionner Supprimer le groupe de ressources. Si vous souhaitez en supprimer seulement quelques-unes, vous pouvez sélectionner chaque ressource pour la supprimer individuellement.
Étape suivante
Dans ce didacticiel, vous avez configuré Visual Studio sur votre machine de développement et vous avez déployé et débogué votre premier module IoT Edge à partir de celui-ci. Maintenant que vous connaissez les concepts de base, essayez d'ajouter des fonctionnalités à un module afin qu'il puisse analyser les données qui le traversent :