Partager via


Tutoriel : Déployer Azure Functions en tant que modules IoT Edge

S'applique à :IoT Edge 1.5 cocher IoT Edge 1.5

Important

IoT Edge 1.5 LTS est la version prise en charge. IoT Edge 1,4 LTS a atteint la fin de vie le 12 novembre 2024. Si vous utilisez une version antérieure, consultez Update 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 simulé IoT Edge que vous avez créé dans les tutoriels de démarrage rapide. Dans ce tutoriel, vous allez apprendre à :

  • Utiliser Visual Studio Code pour créer une fonction Azure
  • Utilisez 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

Diagramme montrant l’architecture de fonction, notamment comment mettre en scène et déployer un module de fonction.

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 n'avez pas de compte Azure, créez un compte free avant de commencer.

Prérequis

Avant de commencer ce didacticiel, suivez le tutoriel pour configurer votre environnement de développement pour le développement de conteneurs Linux : Develop Azure IoT Edge modules à l’aide de Visual Studio Code. Lorsque vous avez terminé, vous disposez des conditions préalables suivantes :

Pour développer un module IoT Edge avec Azure Functions, installez ces prérequis supplémentaires sur votre ordinateur de développement :

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.

  1. Ouvrez Visual Studio Code sur votre ordinateur de développement.

  2. Ouvrez la palette de commandes Visual Studio Code en sélectionnant View > Palette de commandes.

  3. Dans la palette de commandes, ajoutez et 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 ordinateur de développement pour Visual Studio Code pour créer les fichiers de solution.
    • Fournissez un nom de solution : ajoutez un nom descriptif pour votre solution, comme FunctionSolution, ou acceptez la valeur par défaut.
    • Sélectionnez un modèle de module : choisissez Azure Functions - C#.
    • Fournissez un nom de module : nommez votre module CSharpFunction.
    • Fournissez un référentiel d’images Docker pour le module : un référentiel d’images inclut le nom de votre registre de conteneurs et le nom de votre image conteneur. Le portail pré-remplit votre image de conteneur à partir de la dernière étape. Remplacez localhost:5000 par la valeur du serveur de connexion Login de votre registre de conteneurs Azure. Vous pouvez récupérer le serveur Login à partir de la page Overview de votre registre de conteneurs dans le portail Azure. La chaîne finale ressemble à <registry name>.azurecr.io/csharpfunction.

    Screenshot indiquant où ajouter le nom de votre référentiel d’images Docker dans Visual Studio Code.

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 les informations d’identification de votre registre de conteneurs à partir de Azure et de les remplir 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 :

  1. Dans l’explorateur Visual Studio Code, ouvrez le fichier .env.
  2. Mettez à jour les champs avec les valeurs username et password que vous avez copiées à partir de votre registre de conteneurs Azure. Pour les retrouver, accédez à votre registre de conteneurs dans Azure et recherchez la page Settings > Clés d’accès.
  3. Enregistrez ce fichier.

Remarque

Ce tutoriel 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. 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 à votre 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 pouvez la définir explicitement sur Linux AMD64 ici.

  1. Ouvrez la palette de commandes et recherchez Azure IoT Edge : définir la plateforme cible par défaut pour la solution Edge.
  2. 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 en périphérie avant de les transférer vers IoT Hub.

  1. Dans l’explorateur Visual Studio Code, ouvrez modules > CSharpFunction > CSharpFunction.cs.

  2. 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 la machine 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;}
        }
    }
    
  3. Enregistrez le fichier .

Créer et déployer votre solution IoT Edge

Dans la section précédente, vous avez créé une solution IoT Edge et modifié le CSharpFunction pour filtrer les messages avec des températures de machine signalées en dessous du seuil acceptable. Maintenant, générez la solution en tant qu’image conteneur et envoyez-la à votre registre de conteneurs.

  1. Ouvrez le terminal intégré Visual Studio Code. Sélectionnez Afficher le > terminal.

  2. Connectez-vous à Docker dans le terminal. Utilisez le nom d’utilisateur, le mot de passe et le serveur d’authentification à partir de votre registre de conteneurs Azure. Obtenez ces valeurs à partir des clés Access de votre registre dans le portail Azure.

    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. 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 la référence docker login.

  3. Dans l’Explorateur Visual Studio Code, cliquez avec le bouton droit sur le fichier deployment.template.json, puis sélectionnez Build et Push IoT Edge Solution.

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

Afficher votre image de conteneur

Visual Studio Code affiche un message de réussite lorsque vous envoyez (push) votre image conteneur à votre registre de conteneurs. Pour confirmer l’opération, consultez l’image dans le registre informatique.

  1. Dans le portail Azure, accédez à votre registre de conteneurs Azure.
  2. Sélectionnez Référentiels de services>.
  3. Vous voyez le référentiel csharpfunction dans la liste. Sélectionnez ce référentiel pour afficher plus de détails.
  4. 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. Le fichier module.json dans le dossier CSharpFunction définit ces valeurs.

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 l'extension Azure IoT Edge et IoT Hub pour Visual Studio Code, extensions répertoriées dans les prérequis. Installez les extensions maintenant si vous ne l’avez pas déjà fait.

  1. Dans l’Explorateur Visual Studio Code, sous la section Azure IoT Hub, développez Devices pour afficher la liste des appareils IoT.

  2. Cliquez avec le bouton droit sur le nom de votre appareil IoT Edge, puis sélectionnez Create Deployment for Single Device.

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

  4. 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 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 de IoT Hub, démarre les nouveaux conteneurs, puis signale l’état à IoT Hub.

    Screenshot montrant comment afficher les modules déployés dans Visual Studio Code.

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émarrer 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êter 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 section Azure IoT Hub > Appareils de l’Explorateur de 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 qu’un appareil de test.

Sinon, supprimez la configuration locale et les ressources Azure que vous avez créées dans cet article pour éviter les frais.

Supprimer des ressources Azure

Vous ne pouvez pas annuler la suppression de Azure ressources et groupes de ressources. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé le IoT Hub à l’intérieur d’un groupe de ressources existant qui contient des ressources que vous souhaitez conserver, supprimez uniquement la IoT Hub ressource elle-même, et non le groupe de ressources.

Pour supprimer les ressources :

  1. Connectez-vous au portail Azure, puis sélectionnez Resource groups.
  2. Sélectionnez le nom du groupe de ressources qui contient vos ressources de test IoT Edge.
  3. 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 supprimer uniquement certaines d’entre elles, sélectionnez chaque ressource pour les supprimer individuellement.

Étapes suivantes

Dans ce tutoriel, vous avez créé un module de fonction Azure avec du code pour filtrer les données brutes générées par votre appareil IoT Edge.

Passez aux didacticiels suivants pour découvrir d’autres méthodes qu'Azure IoT Edge peut transformer les données en informations commerciales en périphérie.