Notes
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 tutoriel vous montre comment développer et déployer votre code sur un appareil IoT Edge. Les modules Azure IoT Edge vous permettent de déployer du code qui exécute votre logique métier directement sur votre appareil IoT Edge. Dans le guide de démarrage rapide Déployer du code sur un appareil Linux, vous avez créé un appareil IoT Edge et déployé un module à partir de la Place de marché Azure.
Cet article décrit les étapes de deux outils de développement IoT Edge :
- Ligne de commande (CLI) de l’outil de développement Azure IoT Edge, qui est recommandée pour le développement.
- Outils Azure IoT Edge pour l’extension Visual Studio Code , qui est en mode maintenance.
Utilisez le bouton sélecteur d’outils au début de cet article pour choisir votre outil.
Dans ce tutoriel, vous allez apprendre à :
- Configurer votre ordinateur de développement
- Utiliser les outils IoT Edge pour créer un projet
- Générez votre projet en tant que conteneur Docker et stockez-le dans un registre de conteneurs Azure
- Déployer votre code sur un appareil IoT Edge
Le module IoT Edge que vous créez dans ce tutoriel filtre les données de température générées par votre appareil. Il envoie des messages en amont uniquement si la température est supérieure à un seuil défini. Ce type d’analyse à la périphérie permet de réduire la quantité de données envoyées et stockées dans le cloud.
Prérequis
Une machine de développement :
- Utilisez votre propre ordinateur ou une machine virtuelle.
- Assurez-vous que votre machine de développement prend en charge la virtualisation imbriquée pour exécuter un moteur de conteneur.
- Vous pouvez utiliser la plupart des systèmes d’exploitation qui exécutent un moteur de conteneur pour développer des modules IoT Edge pour les appareils Linux. Ce tutoriel utilise un ordinateur Windows, mais il souligne les différences connues sur macOS ou Linux.
- Installer Visual Studio Code
- Installez Azure CLI.
Un appareil Azure IoT Edge :
- Exécutez IoT Edge sur un appareil distinct. La séparation de la machine de développement et de l’appareil IoT Edge simule un scénario de déploiement réel et permet de garder les concepts clairs. Utilisez l’article de démarrage rapide Déployer du code sur un appareil Linux pour créer un appareil IoT Edge dans Azure ou le modèle de ressource Azure pour déployer une machine virtuelle compatible IoT Edge.
Ressources cloud :
- Utilisez un hub Azure IoT de niveau gratuit ou standard.
Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.
Conseil
Pour obtenir des conseils sur le débogage interactif dans Visual Studio Code ou Visual Studio 2022 :
- Déboguer des modules Azure IoT Edge à l’aide de Visual Studio Code
- Utiliser Visual Studio 2022 pour développer et déboguer des modules pour Azure IoT Edge
Ce didacticiel décrit les étapes de développement pour Visual Studio Code.
Concepts clés
Ce tutoriel décrit le développement d’un module IoT Edge. Un module IoT Edge est un conteneur avec du code exécutable. Déployez un ou plusieurs modules sur un appareil IoT Edge. Les modules effectuent des tâches spécifiques telles que l’ingestion de données à partir de capteurs, le nettoyage et l’analyse des données, ou l’envoi de messages à un IoT Hub. Pour plus d’informations, consultez Comprendre les modules Azure IoT Edge.
Lorsque vous développez des modules IoT Edge, comprenez la différence entre l’ordinateur de développement et l’appareil IoT Edge cible où le module se déploie. 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 consiste à développer un module sur un ordinateur Windows pour cibler un appareil Linux exécutant IoT Edge. Dans ce cas, le système d’exploitation conteneur est Linux. À mesure que vous parcourez ce tutoriel, gardez à l’esprit la différence entre le système d’exploitation de l’ordinateur de développement et le système d’exploitation conteneur.
Conseil
Si vous utilisez IoT Edge pour Linux sur Windows, l’appareil cible dans votre scénario est la machine virtuelle Linux, et non l’hôte Windows.
Ce tutoriel cible les appareils exécutant IoT Edge avec des conteneurs Linux. Utilisez votre système d’exploitation préféré tant que votre machine de développement exécute des conteneurs Linux. Visual Studio Code est recommandé pour le développement avec des conteneurs Linux. Ce didacticiel l’utilise donc. Vous pouvez aussi bien utiliser Visual Studio, bien qu’il existe des différences de prise en charge entre les deux outils.
Le tableau suivant répertorie les scénarios de développement pris en charge pour les conteneurs Linux dans Visual Studio Code et Visual Studio.
Visual Studio Code | Visual Studio 2019/2022 | |
---|---|---|
Architecture des appareils Linux | Linux AMD64 Linux ARM32v7 Linux ARM64 |
Linux AMD64 Linux ARM32 Linux ARM64 |
Services Azure | Azure Functions Azure Stream Analytics Azure Machine Learning |
|
Langues | C C# Java Node.js Python |
C C# |
Plus d’informations | Azure IoT Edge pour Visual Studio Code |
Azure IoT Edge Tools pour Visual Studio 2019 Outils Azure IoT Edge pour Visual Studio 2022 |
Installer le moteur de conteneur
Les modules IoT Edge sont empaquetés en tant que conteneurs. Vous avez donc besoin d’un système de gestion de conteneurs compatible Docker sur votre ordinateur de développement pour les générer et les gérer. Docker Desktop est un choix populaire pour le développement, car il offre une prise en charge forte des fonctionnalités. Docker Desktop sur Windows vous permet de basculer entre les conteneurs Linux et les conteneurs Windows, afin de pouvoir développer des modules pour différents types d’appareils IoT Edge.
Utilisez la documentation Docker pour installer Docker sur votre ordinateur de développement :
Installer Docker Desktop pour Windows
- Quand vous installez Docker Desktop pour Windows, vous êtes invité à indiquer si vous souhaitez utiliser des conteneurs Linux ou Windows. Vous pouvez modifier ce paramètre à tout moment. Ce tutoriel utilise des conteneurs Linux, car les modules ciblent des appareils Linux. Pour plus d’informations, consultez Basculer entre les conteneurs Windows et Linux.
Lisez À propos de Docker CE pour obtenir des informations sur l'installation sur plusieurs plateformes Linux.
- Pour le sous-système Windows pour Linux (WSL), installez Docker Desktop pour Windows.
Configurer des outils
Installez l’outil de développement Azure IoT Edge basé sur Python pour créer votre solution IoT Edge. Deux options s'offrent à vous :
- Utiliser le conteneur de développement prédéfini IoT Edge préféré
- Installer l’outil à l’aide de la configuration de développement iotedgedev
Important
Les outils Azure IoT Edge pour l’extension Visual Studio Code sont en mode maintenance. L’outil de développement préféré est l’outil de développement En ligne de commande (CLI) Azure IoT Edge Dev Tool.
Utilisez les extensions IoT pour Visual Studio Code pour développer des modules IoT Edge. Ces extensions offrent des modèles de projet, automatisent la création du manifeste de déploiement et vous permettent de surveiller et de gérer les appareils IoT Edge. Dans cette section, vous installez Visual Studio Code et l’extension IoT, puis configurez votre compte Azure pour gérer les ressources IoT Hub à partir de Visual Studio Code.
Installez l’extension Azure IoT Edge .
Installez l’extension Azure IoT Hub .
Après avoir installé les extensions, ouvrez la palette de commandes en sélectionnant Afficher> lapalette de commandes.
Dans la palette de commandes, recherchez et sélectionnez Azure IoT Hub : sélectionnez IoT Hub. Suivez les invites pour sélectionner votre abonnement Azure et IoT Hub.
Ouvrez la section Explorateur de Visual Studio Code en sélectionnant l’icône dans la barre d’activité ou en sélectionnant View>Explorer.
En bas de la section Explorateur, développez le menu Azure IoT Hub / Appareils réduit. Vous voyez les appareils et les appareils IoT Edge associés à IoT Hub que vous avez sélectionnés via la palette de commandes.
Installer des outils spécifiques au langage
Installez des outils spécifiques à votre langage de développement :
Créer un registre de conteneur
Dans ce tutoriel, vous utilisez les extensions Azure IoT Edge et Azure IoT Hub pour générer un module et créer une image conteneur à partir des fichiers. Ensuite, vous envoyez cette image à un registre qui stocke et gère vos images. Enfin, déployez votre image à partir de votre registre de façon à l’exécuter sur votre appareil IoT Edge.
Important
L’extension Azure IoT Edge Visual Studio Code est en mode maintenance.
Vous pouvez utiliser n’importe quel registre Docker pour stocker vos images conteneur. Deux services de Registre Docker populaires sont Azure Container Registry et Docker Hub. Ce didacticiel utilise Azure Container Registry.
Si vous ne disposez pas d’un registre de conteneurs, suivez ces étapes pour en créer un dans Azure :
Dans le portail Azure, sélectionnez Créer une ressource>Conteneurs>Registre de conteneurs.
Fournissez les valeurs suivantes qui sont nécessaires pour créer votre registre de conteneurs :
Champ Valeur Abonnement Sélectionnez un abonnement dans la liste déroulante. groupe de ressources Utilisez le même groupe de ressources pour toutes les ressources de test que vous créez dans le cadre des tutoriels et guides de démarrage rapide IoT Edge. Par exemple, IoTEdgeResources. Nom du registre Fournissez un nom unique. Emplacement Choisissez un emplacement proche de vous. Référence (SKU) Sélectionnez De base. Sélectionnez Vérifier + créer, puis Créer.
Sélectionnez votre nouveau registre de conteneurs dans la section Ressources de votre page d’accueil du portail Azure pour l’ouvrir.
Dans le volet gauche de votre registre de conteneurs, sélectionnez Clés d’accès dans le menu situé sous Paramètres.
Activez l’utilisateur administrateur avec le bouton bascule et affichez le nom d’utilisateur et le mot de passe de votre registre de conteneurs.
Copiez les valeurs du serveur de connexion, du nom d’utilisateur et du mot de passe , puis enregistrez-les quelque part de façon pratique. Vous utilisez ces valeurs dans le tutoriel pour permettre l’accès au registre de conteneurs.
Créer un projet de module
L’extension Azure IoT Edge offre des modèles de projet pour tous les langages de module IoT Edge pris en charge dans Visual Studio Code. Ces modèles incluent tous les fichiers et le code dont vous avez besoin pour déployer un module de travail pour tester IoT Edge ou vous donner un point de départ pour personnaliser le modèle avec votre propre logique métier.
Créer un modèle de projet
L’outil de développement IoT Edge simplifie le développement Azure IoT Edge avec des commandes pilotées par des variables d’environnement. Il vous aide à démarrer avec le développement IoT Edge à l’aide du conteneur de développement IoT Edge et de la structure de solution IoT Edge qui inclut un module par défaut et tous les fichiers de configuration requis.
Créez un répertoire pour votre solution sur le chemin souhaité. Accédez à votre
iotedgesolution
répertoire.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolution
Utilisez la commande init de la solution iotedgedev pour créer une solution et configurer votre Hub Azure IoT dans le langage de développement de votre choix.
Le script init de la solution iotedgedev vous invite à effectuer plusieurs étapes, notamment :
- Authentification auprès d’Azure
- Choisir un abonnement Azure
- Choisir ou créer un groupe de ressources
- Choisir ou créer un hub IoT Azure
- Choisir ou créer un appareil Azure IoT Edge
Utilisez Visual Studio Code et l’extension Azure IoT Edge . Commencez par créer une solution, puis générez le premier module dans cette solution. Chaque solution peut inclure plusieurs modules.
- Sélectionnez Afficher>Palette de commandes.
- Dans la palette de commandes, entrez et exécutez la commande Azure IoT Edge : Nouvelle solution IoT Edge.
- Accédez au dossier dans lequel vous souhaitez créer la nouvelle solution, puis sélectionnez Sélectionner un dossier.
- Entrez un nom pour votre solution.
- Sélectionnez un modèle de module correspondant à votre langage de développement préféré. Il s'agira du premier module de la solution.
- Entrez un nom pour votre module. Choisissez un nom qui est unique dans le registre de conteneurs.
- Entrez le nom du référentiel d’images du module. Visual Studio Code 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.
À partir des informations que vous avez fournies, Visual Studio Code crée une solution IoT Edge, puis la charge dans une nouvelle fenêtre.
Après avoir créé la solution, ces fichiers principaux se trouvent dans la solution :
Le dossier .vscode inclut le fichier de configuration launch.json.
Le dossier modules contient des sous-dossiers pour chaque module. Dans chaque sous-dossier, le fichier module.json contrôle la façon dont les modules sont générés et déployés.
Le fichier .env répertorie vos variables d’environnement. La variable d’environnement pour le registre de conteneurs est localhost :5000 par défaut.
Deux fichiers de déploiement de module, deployment.template.json et deployment.debug.template.json, répertorient les modules à déployer sur votre appareil. Par défaut, la liste inclut les modules système IoT Edge (edgeAgent et edgeHub) et des exemples de modules tels que :
- filtermodule est un exemple de module qui implémente une fonction de filtre simple.
- Le module SimulatedTemperatureSensor simule les données que vous pouvez utiliser pour les tests. Pour plus d’informations sur le fonctionnement des manifestes de déploiement, consultez Découvrez comment utiliser des manifestes de déploiement pour déployer des modules et établir des itinéraires. Pour plus d’informations sur le fonctionnement du module de température simulée, consultez le code source SimulatedTemperatureSensor.csproj.
Notes
Les modules exacts installés peuvent dépendre de votre langue de choix.
Définir la version du runtime IoT Edge
La dernière version stable du module système IoT Edge est la version 1.5. Définissez vos modules système sur la version 1.5.
Dans Visual Studio Code, ouvrez deployment.template.json fichier manifeste de déploiement. 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, 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",
Fournir vos informations d’identification de registre à l’agent IoT Edge
Le fichier d’environnement stocke les informations d’identification de votre registre de conteneurs et les partage avec le runtime IoT Edge. Le runtime a besoin de ces informations d’identification pour extraire vos images conteneur sur l’appareil IoT Edge.
L’extension IoT Edge tente d’extraire d’Azure vos informations d’identification de registre de conteneurs et de les insérer dans le fichier d’environnement.
Notes
Le fichier d’environnement est créé uniquement si vous fournissez un référentiel d’images pour le module. Si vous avez accepté les valeurs localhost par défaut pour tester et déboguer localement, vous n’avez pas besoin de déclarer des variables d’environnement.
Vérifiez si vos informations d’identification existent. Si ce n’est pas le cas, veuillez les ajouter maintenant :
Si Azure Container Registry est votre registre, définissez un nom d’utilisateur et un mot de passe Azure Container Registry. Obtenez ces valeurs à partir du menuDes clés d’accès> de votre registre de conteneurs dans le portail Azure.
Ouvrez le fichier .env dans votre solution de module.
Ajoutez les valeurs de nom d’utilisateur et de mot de passe que vous avez copiées à partir de votre registre de conteneurs Azure. Par exemple :
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"
Enregistrez vos modifications dans le fichier .env .
Notes
Ce tutoriel utilise des informations d’identification 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 ou les jetons délimités au dépôt. Pour plus d’informations, consultez Gérer l’accès à votre registre de conteneurs.
Architecture cible
Sélectionnez l’architecture que vous ciblez avec chaque solution, car cela affecte la façon dont le conteneur est généré et s’exécute. Linux AMD64 est la valeur par défaut. Pour ce tutoriel, utilisez une machine virtuelle Ubuntu comme appareil IoT Edge et conservez l’amd64 par défaut.
Si vous devez modifier l’architecture cible de votre solution, procédez comme suit.
Ouvrez la palette de commandes et recherchez Azure IoT Edge : Définir la plateforme cible par défaut pour la solution Edge, ou sélectionnez l’icône de raccourci dans la barre latérale en bas de la fenêtre.
Dans la palette de commandes, sélectionnez l’architecture cible dans la liste des options.
L’architecture cible est définie lorsque vous créez l’image conteneur lors d’une étape ultérieure.
Mettre à jour un module avec du code personnalisé
Chaque modèle inclut des exemples de code qui acceptent des données de capteur simulées à partir du module SimulatedTemperatureSensor et les acheminent vers ioT Hub. L’exemple de module reçoit des messages et les transmet. La fonctionnalité de pipeline montre un concept important dans IoT Edge : comment les modules communiquent entre eux.
Chaque module peut avoir plusieurs files d’attente d’entrée et de sortie déclarées dans son code. Le hub IoT Edge exécuté sur l’appareil achemine les messages de la sortie d’un module vers l’entrée d’un ou plusieurs modules. Le code spécifique permettant de déclarer des entrées et des sorties varie entre les langages, mais le concept est le même pour tous les modules. Pour plus d’informations sur le routage entre les modules, consultez Déclarer des itinéraires.
L’exemple de code C# fourni avec le modèle de projet utilise la classe ModuleClient à partir du Kit de développement logiciel (SDK) IoT Hub pour .NET.
Dans l’Explorateur Visual Studio Code, ouvrez les modules>filtermodule>ModuleBackgroundService.cs.
Avant l’espace de noms filtermodule, ajoutez trois instructions using pour les types utilisés ultérieurement :
using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConvert
Ajoutez la variable temperatureThreshold à la classe ModuleBackgroundService . Cette variable définit la valeur que la température mesurée doit dépasser pour que les données soient envoyées au hub IoT.
static int temperatureThreshold { get; set; } = 25;
Ajoutez les classes MessageBody, Machine et Ambient . Ces classes définissent le schéma attendu pour le corps des messages entrants.
class MessageBody { public Machine machine {get;set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} }
Recherchez la fonction ExecuteAsync . Cette fonction crée et configure un objet ModuleClient qui permet au module de se connecter au runtime Azure IoT Edge local pour envoyer et recevoir des messages. Après avoir créé le ModuleClient, le code lit la valeur temperatureThreshold à partir des propriétés souhaitées du jumeau de module. Le code inscrit un rappel pour recevoir des messages d’un hub IoT Edge via un point de terminaison appelé input1.
Remplacez l’appel à la méthode ProcessMessageAsync par une nouvelle méthode qui met à jour le nom du point de terminaison et la méthode appelée lorsque l’entrée arrive. Ajoutez également une méthode SetDesiredPropertyUpdateCallbackAsync pour les mises à jour des propriétés souhaitées. Pour apporter cette modification, remplacez la dernière ligne de la méthode ExecuteAsync par le code suivant :
// Register a callback for messages that are received by the module. // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken); // Read the TemperatureThreshold value from the module twin's desired properties var moduleTwin = await _moduleClient.GetTwinAsync(); await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient); // Attach a callback for updates to the module twin's desired properties. await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null); // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method. await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);
Ajoutez la méthode onDesiredPropertiesUpdate à la classe ModuleBackgroundService . Cette méthode reçoit des mises à jour sur les propriétés souhaitées à partir du jumeau de module et met à jour la variable temperatureThreshold pour qu’elle corresponde. Tous les modules ont leur propre module jumeau, ce qui vous permet de configurer le code exécuté à l’intérieur d’un module directement à partir du cloud.
static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext) { try { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); if (desiredProperties["TemperatureThreshold"]!=null) temperatureThreshold = desiredProperties["TemperatureThreshold"]; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", exception); } } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", ex.Message); } return Task.CompletedTask; }
Ajoutez la méthode FilterMessages . Cette méthode est appelée chaque fois que le module reçoit un message d’IoT Edge Hub. Il filtre les messages qui signalent des températures situées sous le seuil de température défini via le double de module. Il ajoute également la propriété MessageType au message avec la valeur définie sur Alert.
async Task<MessageResponse> FilterMessages(Message message, object userContext) { var counterValue = Interlocked.Increment(ref _counter); try { ModuleClient moduleClient = (ModuleClient)userContext; var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {counterValue}: [{messageString}]"); // Get the message body. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " + $"exceeds threshold {temperatureThreshold}"); using (var filteredMessage = new Message(messageBytes)) { foreach (KeyValuePair<string, string> prop in message.Properties) { filteredMessage.Properties.Add(prop.Key, prop.Value); } filteredMessage.Properties.Add("MessageType", "Alert"); await moduleClient.SendEventAsync("output1", filteredMessage); } } // Indicate that the message treatment is completed. return MessageResponse.Completed; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", exception); } // Indicate that the message treatment is not completed. var moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); // Indicate that the message treatment is not completed. ModuleClient moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } }
Enregistrez le fichier ModuleBackgroundService.cs .
Dans l’Explorateur Visual Studio Code, ouvrez le fichier deployment.template.json dans votre espace de travail de solution IoT Edge.
Étant donné que nous avons modifié le nom du point de terminaison sur lequel le module écoute, nous devons également mettre à jour les itinéraires dans le manifeste de déploiement afin que le edgeHub envoie des messages au nouveau point de terminaison.
Recherchez la section routes dans le module jumeau $edgeHub. Mettez à jour l’itinéraire sensorTofiltermodule pour remplacer
input1
parinputFromSensor
:"sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"
Ajoutez le module jumeau filtermodule au manifeste de déploiement. Insérez le contenu JSON suivant en bas de la section modulesContent, après le module jumeau $edgeHub :
"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }
Enregistrez le fichier deployment.template.json .
Générer et envoyer (push) votre solution
Vous avez mis à jour le code du module et le modèle de déploiement pour comprendre plus facilement certains concepts de déploiement clés. Maintenant, vous êtes prêt à générer votre image conteneur module, puis à l’envoyer (push) à votre registre de conteneurs.
Dans Visual Studio Code, ouvrez le fichier manifeste de déploiementdeployment.template.json . Le manifeste de déploiement décrit les modules à configurer 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 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 à la section modulesContent>edgeAgent>settings>registryCredentials dans deployment.template.json. Remplacez myacr par votre propre nom de Registre et indiquez votre mot de passe et votre adresse du serveur de connexion . Par exemple :
"registryCredentials": {
"myacr": {
"username": "myacr",
"password": "<your_acr_password>",
"address": "myacr.azurecr.io"
}
}
Ajoutez ou remplacez le contenu sérialisé suivant dans la valeur createOptions pour chaque système (edgeHub et edgeAgent) et module personnalisé (filtermodule et tempSensor) listés. Modifiez les valeurs si nécessaire.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Par exemple, la configuration filtermodule doit être similaire à :
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
Générer l’image Docker du module
Ouvrez le terminal intégré Visual Studio Code en sélectionnant Terminal>New Terminal.
Utilisez la commande dotnet publish
afin de générer l’image conteneur pour l’architecture Linux et amd64. Accédez au répertoire filtermodule dans votre projet et exécutez la commande dotnet publish.
dotnet publish --os linux --arch x64 /t:PublishContainer
Actuellement, le modèle d’outil iotedgedev cible .NET 7.0. Si vous souhaitez cibler une autre version de .NET, vous pouvez modifier le fichier filtermodule.csproj et modifier les valeurs TargetFramework et PackageReference . Par exemple, pour cibler .NET 8.0, votre fichier filtermodule.csproj doit ressembler à ceci :
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Étiquetez l’image Docker avec vos informations de registre de conteneurs, version et architecture. Remplacez myacr par votre propre nom de Registre.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64
Pousser (push) l’image Docker du module
Fournissez les informations d’identification du registre de conteneurs à Docker afin qu’il puisse envoyer (push) votre image du conteneur à stocker dans le registre.
Connectez-vous à Docker avec les informations d’identification ACR (Azure Container Registry).
docker login -u <ACR username> -p <ACR password> <ACR login server>
Il se peut que vous receviez un avertissement de sécurité recommandant d’utiliser
--password-stdin
. Nous recommandons cette meilleure pratique pour les scénarios de production, mais elle sort de l’étendue de ce tutoriel. Pour plus d’informations, consultez la référence docker login.Connectez-vous à Azure Container Registry. Vous devez installer Azure CLI pour utiliser la
az
commande. Cette commande demande votre nom d’utilisateur et votre mot de passe trouvés dans votre registre de conteneurs dans lesclés d’accès>.az acr login -n <ACR registry name>
Conseil
Si vous vous déconnectez à un moment quelconque de ce tutoriel, répétez les étapes de connexion Docker et Azure Container Registry pour continuer.
Poussez 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/filtermodule:0.0.1-amd64 # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name. az acr login --name myacr docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Mettre à jour le modèle de déploiement
Mettez à jour le modèle de déploiement deployment.template.json avec l’emplacement de l’image du registre de conteneurs. Par exemple, si vous utilisez un myacr.azurecr.io Azure Container Registry et que votre image est filtermodule :0.0.1-amd64, mettez à jour la configuration filtermodule sur :
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
Dans l’Explorateur Visual Studio Code, cliquez avec le bouton droit sur le fichier deployment.template.json , puis sélectionnez Générer et envoyer (push) la solution IoT Edge.
La commande de génération et d’envoi (push) déclenche trois opérations. Tout d’abord, il crée un dossier dans la solution appelée configuration qui contient le manifeste de déploiement complet, généré à partir d’informations dans le modèle de déploiement et d’autres fichiers de solution. Ensuite, elle exécute docker build
pour générer l’image de conteneur basée sur le fichier docker correspondant à votre architecture cible. Puis, elle exécute docker push
pour envoyer (push) le dépôt d’images vers votre registre de conteneurs.
Ce processus peut prendre plusieurs minutes la première fois, mais il est plus rapide la prochaine fois que vous exécutez les commandes.
Facultatif : Mettre à jour le module et l’image
Si vous apportez des modifications au code de votre module, vous devez reconstruire et envoyer l’image de module à votre registre de conteneurs. Suivez les étapes de cette section pour mettre à jour la build et l’image conteneur. Vous pouvez ignorer cette section si vous n’avez apporté aucune modification au code de votre module.
Ouvrez le fichier deployment.amd64.json dans le dossier config nouvellement créé. Le nom de fichier, reflétant l’architecture cible, est ainsi différent si vous avez choisi une autre architecture.
Notez que les deux paramètres qui avaient des espaces réservés contiennent maintenant leurs valeurs appropriées. La section registryCredentials contient votre nom d’utilisateur et mot de passe de registre extraits du fichier .env . Le filtermodule a le référentiel d’images complet avec le nom, la version et la balise d’architecture à partir du fichier module.json .
Ouvrez le fichier module.json dans le dossier filtermodule .
Changez le numéro de version de l’image de module. Par exemple, incrémentez le numéro de version de correctif en le définissant sur
"version": "0.0.2"
comme si vous aviez apporté un petit correctif dans le code du module.Conseil
Les versions de module activent la gestion de version, ce qui vous permet de tester les modifications sur un petit ensemble d’appareils avant de déployer des mises à jour en production. Si vous n’incrémentez pas la version du module avant d’effectuer les opérations de génération et d’envoi (push), vous remplacez le dépôt dans votre registre de conteneurs.
Enregistrez vos modifications dans le fichier module.json .
Générez et envoyez (push) l’image mise à jour avec une balise de version 0.0.2 . Par exemple, pour générer, puis envoyer (push) l’image pour le registre local ou un registre de conteneurs Azure, utilisez les commandes suivantes :
# Build the container image for Linux and amd64 architecture.
dotnet publish --os linux --arch x64
# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.
docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64
# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64
Cliquez de nouveau avec le bouton droit sur le fichier deployment.template.json , puis sélectionnez à nouveau Générer et envoyer (push) la solution IoT Edge.
Ouvrez à nouveau le fichier deployment.amd64.json . Notez que le système de génération ne crée pas de fichier lorsque vous exécutez à nouveau la commande générer et envoyer (push). Le même fichier est plutôt mis à jour pour refléter les modifications. L’image filtermodule pointe désormais vers la version 0.0.2 du conteneur.
Pour vérifier plus en détail ce que la commande build et push a fait, accédez au portail Azure et accédez à votre registre de conteneurs.
Dans votre registre de conteneurs, sélectionnez Référentiels , puis filtermodule. Vérifiez que les deux versions de l’image envoient au registre.
Dépanner
Si vous rencontrez des erreurs lors de la génération et de l’envoi (push) de votre image de module, elles sont souvent liées à la configuration de Docker sur votre machine de développement. Pour passer en revue votre configuration, effectuez les vérifications suivantes :
- Avez-vous exécuté la commande
docker login
en utilisant les informations d’identification que vous avez copiées à partir de votre registre de conteneurs ? Ces informations d’identification sont différentes de celles que vous utilisez pour vous connecter à Azure. - Votre référentiel de conteneurs est-il correct ? A-t-il les noms de registre de conteneur et de module appropriés ? Ouvrez le fichier module.json dans le dossier filtermodule à vérifier. La valeur du référentiel doit ressembler à <nom du registre>.azurecr.io/filtermodule.
- Si vous avez utilisé un nom différent de filtermodule pour votre module, ce nom est-il cohérent dans l’ensemble de la solution ?
- Votre machine exécute-t-elle le même type de conteneurs que celui que vous générez ? Ce tutoriel concerne les appareils Linux IoT Edge. Visual Studio Code doit donc dire amd64 ou arm32v7 dans la barre latérale, et Docker Desktop doit exécuter des conteneurs Linux.
Déployer des modules sur un appareil
Vous avez vérifié que des images de conteneur générées sont stockées dans votre registre de conteneurs, il est donc temps de les déployer sur un appareil. Vérifiez que votre appareil IoT Edge est opérationnel.
Utilisez la commande Azure CLI set-modules IoT Edge pour déployer les modules sur Azure IoT Hub. Par exemple, pour déployer les modules définis dans le fichier deployment.template.json sur IoT Hub my-iot-hub pour l’appareil IoT Edge my-device, utilisez la commande suivante. Remplacez les valeurs de nom du hub, ID d’appareil et login dans la chaîne de connexion IoT Hub par vos propres valeurs.
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
Conseil
Recherchez votre chaîne de connexion IoT Hub, y compris la clé d’accès partagé, dans le portail Azure. Accédez à votre IoT Hub >paramètres de sécurité>Stratégies d’accès partagé>iothubowner.
Dans l’Explorateur Visual Studio Code, sous la section Azure IoT Hub , développez Appareils pour afficher votre liste d’appareils IoT.
Cliquez avec le bouton droit sur l’appareil IoT Edge sur lequel vous souhaitez effectuer le déploiement, puis sélectionnez Créer un déploiement pour un seul appareil.
Dans l’Explorateur de fichiers, accédez au dossier de configuration , puis sélectionnez le fichier deployment.amd64.json .
N’utilisez pas le fichier deployment.template.json qui ne contient pas les informations d’identification du registre de conteneurs ou les valeurs d’image de module. Si vous ciblez un appareil Linux ARM32, le nom du manifeste de déploiement est deployment.arm32v7.json.
Sous votre appareil, ouvrez Modules pour voir la liste des modules déployés et en cours d’exécution. Sélectionnez le bouton actualiser. Vous devez voir les nouveaux modules tempSensor et filtermodule s’exécutant sur votre appareil.
Le démarrage des modules peut prendre quelques minutes. Le runtime IoT Edge reçoit son nouveau manifeste de déploiement, extrait les images de module à partir du runtime de conteneur, puis démarre chaque nouveau module.
Afficher les messages provenant de l’appareil
L’exemple de code de module obtient des messages via sa file d’attente d’entrée et les envoie via sa file d’attente de sortie. Le manifeste de déploiement configure des itinéraires qui envoient des messages à filtermodule à partir de tempSensor, puis transfèrent les messages de filtermodule vers IoT Hub. Les extensions Azure IoT Edge et Azure IoT Hub vous permettent de voir les messages à mesure qu’ils arrivent à IoT Hub à partir de votre appareil.
Dans l’Explorateur Visual Studio Code, sélectionnez l’appareil IoT Edge que vous souhaitez surveiller, puis sélectionnez Démarrer la surveillance du point de terminaison d’événement intégré.
Regardez la fenêtre de sortie dans Visual Studio Code pour voir les messages arrivent à votre IoT Hub.
Afficher les modifications sur l’appareil
Pour voir ce qui se passe sur votre appareil, utilisez les commandes de cette section pour inspecter l'environnement d'exécution et les modules IoT Edge s'exécutant sur votre appareil.
Ces commandes concernent votre appareil IoT Edge, et non votre ordinateur de développement. Si vous utilisez une machine virtuelle pour votre appareil IoT Edge, connectez-vous-y maintenant. Dans Azure, accédez à la page de présentation de la machine virtuelle et sélectionnez Se connecter pour accéder à la connexion shell sécurisée.
Affichez tous les modules déployés sur votre appareil et vérifiez leur état :
iotedge list
Vous voyez quatre modules : les deux modules d’exécution IoT Edge, tempSensor et filtermodule. Les quatre doivent être répertoriés comme étant en cours.
Examinez les journaux d’activité d’un module spécifique :
iotedge logs <module name>
Les noms de module respectent la casse.
Les logs de tempSensor et de filtermodule montrent les messages qu'ils traitent. Le module edgeAgent démarre les autres modules. Ses journaux d’activité ont donc des informations sur le manifeste de déploiement. Si un module n’est pas répertorié ou n’est pas en cours d’exécution, vérifiez les journaux edgeAgent pour les erreurs. Le module edgeHub gère la communication entre les modules et IoT Hub. Si les modules s’exécutent, mais que les messages ne sont pas arrivés à votre IoT Hub, vérifiez les journaux edgeHub pour les erreurs.
Nettoyer les ressources
Si vous souhaitez passer à l’article recommandé suivant, conservez les ressources et les configurations que vous avez créées et réutilisées. 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 les 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.
Étapes suivantes
Dans ce tutoriel, vous configurez Visual Studio Code sur votre ordinateur de développement et déployez votre premier module IoT Edge avec du code qui filtre les données brutes générées par votre appareil IoT Edge.
Passez aux didacticiels suivants pour découvrir comment Azure IoT Edge vous permet de déployer des services cloud Azure pour traiter et analyser des données en périphérie.