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 l’article Mettre à jour IoT Edge.
Utilisez Azure Functions pour déployer du code qui exécute votre logique métier directement sur vos appareils Azure IoT Edge. Ce tutoriel vous montre comment créer et déployer une fonction Azure qui filtre les données de capteur sur un appareil IoT Edge simulé. Utilisez l’appareil IoT Edge simulé que vous avez créé dans les didacticiels de démarrage rapide. Dans ce tutoriel, vous allez apprendre à :
- Utiliser Visual Studio Code pour créer une fonction Azure
- Utiliser Visual Studio Code et Docker pour créer une image Docker et la publier dans un registre de conteneurs
- Déployer le module à partir du registre de conteneurs sur votre appareil IoT Edge
- Afficher les données filtrées
La fonction Azure que vous créez dans ce didacticiel filtre les données de température générées par votre appareil. La fonction envoie uniquement des messages en amont à Azure IoT Hub lorsque la température est supérieure à un seuil spécifié.
Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.
Prérequis
Avant de commencer ce tutoriel, suivez le tutoriel pour configurer votre environnement de développement pour le développement de conteneurs Linux : développer des modules Azure IoT Edge à l’aide de Visual Studio Code. Lorsque vous avez terminé, vous disposez des conditions préalables suivantes :
- IoT Hub de niveau gratuit ou standard dans Azure
- Un appareil AMD64 exécutant Azure IoT Edge avec des conteneurs Linux. Utilisez le guide de démarrage rapide pour configurer un appareil Linux ou un appareil Windows.
- Un registre de conteneurs, comme Azure Container Registry
- Visual Studio Code configuré avec les extensions Azure IoT Edge et Azure IoT Hub . L’extension Outils Azure IoT Edge pour Visual Studio Code est en mode maintenance.
- Téléchargez et installez un système de gestion de conteneurs compatible avec Docker sur votre ordinateur de développement. Définissez-le pour exécuter des conteneurs Linux.
Pour développer un module IoT Edge avec Azure Functions, installez ces prérequis supplémentaires sur votre machine de développement :
- C# pour Visual Studio Code (alimenté par l’extension OmniSharp)
- Kit de développement logiciel (SDK) .NET Core
Créer un projet Function
Azure IoT Edge pour Visual Studio Code vous offre des fonctionnalités de gestion et des modèles de code. Dans cette section, vous utilisez Visual Studio Code pour créer une solution IoT Edge avec une fonction Azure.
Création d'un projet
Suivez ces étapes pour créer un modèle de solution de fonction C# personnalisable.
Ouvrez Visual Studio Code sur votre ordinateur de développement.
Ouvrez la palette de commandes Visual Studio Code en sélectionnant Affichage>Palette de commandes.
Dans la palette de commandes, ajoutez, puis exécutez la commande Azure IoT Edge : nouvelle solution IoT Edge. Suivez ces invites dans la palette de commandes pour créer votre solution :
- Sélectionnez un dossier : choisissez l’emplacement sur votre machine de développement pour que Visual Studio Code crée les fichiers de la solution.
- Indiquez un nom de solution : ajoutez un nom descriptif pour votre solution, par exemple FunctionSolution, ou acceptez le nom par défaut.|
- Sélectionnez un modèle de module : choisissez Azure Functions - C#.
- Fournir un nom de module | Nommez votre module CSharpFunction.
- Indiquez un référentiel d’images Docker pour le module. Un référentiel d’images comprend le nom de votre registre de conteneurs et celui de votre image conteneur. Votre image conteneur est préremplie depuis la dernière étape. Remplacez localhost:5000 par la valeur de Serveur de connexion provenant de votre registre de conteneurs Azure. Vous pouvez récupérer le serveur de connexion depuis la page Vue d’ensemble de votre registre de conteneurs dans le Portail Azure. La chaîne finale ressemble à <nom de registre>.azurecr.io/csharpfunction.
Ajouter les informations d’identification de votre registre
Le fichier d’environnement de votre solution 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 privées sur votre appareil IoT Edge.
L’extension IoT Edge dans Visual Studio Code tente d’extraire d’Azure vos informations d’identification de registre de conteneurs, puis de les insérer dans le fichier d’environnement. Vérifiez si vos informations d’identification se trouvent déjà dans le fichier. Si ce n’est pas le cas, veuillez les ajouter maintenant :
- Dans l’Explorateur Visual Studio Code, ouvrez le fichier
.env
. - Mettez à jour les champs avec les valeurs de nom d’utilisateur et de mot de passe que vous avez copiées à partir de votre registre de conteneurs Azure. Pour les retrouver à nouveau, accédez à votre registre de conteneurs dans Azure et recherchez la page Desclés d’accès>.
- Enregistrez ce fichier.
Notes
Ce tutoriel utilise les informations d’identification de l’administrateur pour Azure Container Registry, qui sont pratiques pour les scénarios de développement et de test. Pour la production, utilisez une option d’authentification avec privilège minimum, comme des principaux de service. Pour plus d’informations, consultez Gérer l’accès au registre de conteneurs.
Définir l’architecture cible sur AMD64
Les modules Azure Functions sur IoT Edge sont pris en charge uniquement sur les conteneurs Linux AMD64. L’architecture cible par défaut pour Visual Studio Code est Linux AMD64, mais vous la définissez explicitement sur Linux AMD64 ici.
Ouvrez la palette de commandes, puis recherchez Azure IoT Edge: Set Default Target Platform for Edge Solution (Azure IoT Edge : définir la plateforme cible par défaut pour la solution Edge).
Dans la palette de commandes, sélectionnez l’architecture cible AMD64 dans la liste des options.
Mettre à jour le module avec du code personnalisé
Ajoutez du code afin que votre module CSharpFunction traite les messages à la périphérie avant de les transférer vers IoT Hub.
Dans l’Explorateur Visual Studio Code, ouvrez modules>CSharpFunction>CSharpFunction.cs.
Remplacez le contenu du fichier CSharpFunction.cs par le code suivant. Ce code reçoit des données de télémétrie sur la température ambiante et de la machine et transfère le message à IoT Hub uniquement si la température de l’ordinateur est supérieure à un seuil défini.
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Functions.Samples { public static class CSharpFunction { [FunctionName("CSharpFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. 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;} } }
Enregistrez le fichier .
Créer et envoyer (push) votre solution IoT Edge
Dans la section précédente, vous avez créé une solution IoT Edge et modifié la fonction CSharpFunction pour filtrer les messages avec des températures de machine signalées inférieures au seuil acceptable. Maintenant, générez la solution en tant qu’image conteneur et envoyez-la à votre registre de conteneurs.
Ouvrez le terminal intégré Visual Studio Code. Sélectionnez Afficher le>terminal.
Connectez-vous à Docker dans le terminal. Utilisez le nom d’utilisateur, le mot de passe et le serveur de connexion à partir de votre registre de conteneurs Azure. Obtenez ces valeurs à partir de la section Clés d’accès de votre registre dans le portail Azure.
docker login -u <ACR username> -p <ACR password> <ACR login server>
Vous pouvez recevoir un avertissement de sécurité qui recommande l’utilisation de
--password-stdin
. Bien qu’il s’agisse de la bonne pratique recommandée pour les scénarios de production, elle n’est pas pertinente pour ce tutoriel. Pour plus d’informations, consultez les informations de référence sur docker login.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 a le manifeste de déploiement complet, qui est généré à partir du modèle de déploiement et d’autres fichiers de solution. Ensuite, il s’exécute
docker build
pour générer l’image conteneur en fonction du fichier Dockerfile approprié pour votre architecture cible. Puis, elle exécutedocker 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.
Afficher votre image de conteneur
Visual Studio Code affiche un message de réussite lorsque votre image conteneur est transférée à votre registre de conteneurs. Pour confirmer l’opération, consultez l’image dans le registre informatique.
- Dans le portail Azure, accédez à votre registre de conteneurs Azure.
- Sélectionnez Services>Référentiels.
- Vous voyez le référentiel csharpfunction dans la liste. Sélectionnez ce référentiel pour afficher plus de détails.
- Dans la section Balises , vous voyez la balise 0.0.1-amd64 . Cette balise montre la version et la plateforme de l’image que vous avez créée. Ces valeurs sont définies dans le fichier module.json dans le dossier CSharpFunction .
Déployer et exécuter la solution
Utilisez le portail Azure pour déployer votre module de fonction sur un appareil IoT Edge comme dans le guide de démarrage rapide. Vous pouvez également déployer et surveiller des modules à partir de Visual Studio Code. Les sections suivantes utilisent les extensions Azure IoT Edge et IoT Hub pour Visual Studio Code répertoriées dans les conditions préalables. Installez les extensions maintenant si vous ne l’avez pas déjà fait.
Dans l’Explorateur Visual Studio Code, sous la section Azure IoT Hub, déplier Devices pour afficher la liste des appareils IoT.
Cliquez avec le bouton droit sur le nom de votre appareil IoT Edge, puis sélectionnez Créer un déploiement pour un seul appareil.
Accédez au dossier de solution qui contient CSharpFunction. Ouvrez le dossier config, sélectionnez le fichier deployment.amd64.json, puis cliquez sur Sélectionner un manifeste de déploiement Edge.
Développez la section Modules sous votre appareil pour voir la liste des modules déployés et en cours d’exécution. Sélectionnez le bouton actualiser. Vous pouvez voir la nouvelle fonction CSharpFunction en cours d’exécution avec le module SimulatedTemperatureSensor , $edgeAgent et $edgeHub.
Cela peut prendre quelques instants pour que les nouveaux modules s'affichent. L’appareil IoT Edge récupère ses nouvelles informations de déploiement à partir d’IoT Hub, démarre les nouveaux conteneurs, puis signale l’état à IoT Hub.
Afficher les données générées
Consultez tous les messages qui arrivent à votre hub IoT à partir de vos appareils en exécutant Azure IoT Hub : démarrez la surveillance du point de terminaison d’événement intégré dans la palette de commandes. Pour arrêter la surveillance des messages, exécutez Azure IoT Hub : arrêtez la surveillance du point de terminaison d’événement intégré dans la palette de commandes.
Pour filtrer l’affichage et afficher les messages à partir d’un appareil spécifique, cliquez avec le bouton droit sur l’appareil dans la sectionAppareils> de l’Explorateur Visual Studio Code, puis sélectionnez Démarrer la surveillance du point de terminaison d’événement intégré.
Nettoyer les ressources
Si vous envisagez de 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 créé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 toutes 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 avez créé un module de fonction Azure contenant le code pour filtrer les données brutes générées par votre appareil IoT Edge.
Passez aux tutoriels suivants pour en savoir plus sur les autres façons dont Azure IoT Edge peut vous aider à transformer des données en informations métier « en périphérie».