Développer vos propres modules IoT Edge

S’applique à :Coche IoT Edge 1.5 IoT Edge 1.5 Coche IoT Edge 1.4 IoT Edge 1.4

Important

IoT Edge 1.5 LTS et IoT Edge 1.4 LTS sont des versions prises en charge. IoT Edge 1.4 LTS est en fin de vie le 12 novembre 2024. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Les modules Azure IoT Edge peuvent se connecter à d’autres services Azure et contribuer à votre pipeline de données cloud plus volumineuses. Cet article explique comment vous pouvez développer des modules pour communiquer avec le runtime IoT Edge et IoT Hub, et par conséquent, avec le reste du cloud Azure.

Environnement d’exécution IoT Edge

Le runtime IoT Edge fournit l’infrastructure nécessaire pour intégrer les fonctionnalités de plusieurs modules IoT Edge et pour les déployer sur des appareils IoT Edge. Tout programme peut être empaqueté en tant que module IoT Edge. Pour tirer pleinement parti des fonctionnalités de communication et de gestion d’IoT Edge, un programme qui s’exécute dans un module peut utiliser Azure IoT Device SDK pour se connecter au hub IoT Edge local.

Empaquetage de votre programme en tant que module IoT Edge

Pour déployer votre programme sur un appareil IoT Edge, il doit d’abord être conteneurisé et exécuté à l’aide d’un moteur compatible avec Docker. IoT Edge utilise Moby, le projet open source à l’origine de Docker, comme moteur compatible avec Docker. Les mêmes paramètres que ceux que vous utilisez avec Docker peuvent être transmis à vos modules IoT Edge. Pour en savoir plus, consultez Guide pratique pour configurer les options de création de conteneur pour les modules IoT Edge.

Utilisation du hub IoT Edge

Le hub IoT Edge fournit deux fonctionnalités principales : un proxy vers IoT Hub et des communications locales.

Connexion au hub IoT Edge à partir d’un module

La connexion au hub IoT Edge local à partir d’un module implique les mêmes étapes de connexion que pour tout autre client. Pour plus d’informations, consultez Connexion au hub IoT Edge.

Pour utiliser le routage IoT Edge sur AMQP, vous pouvez utiliser le ModuleClient du SDK Azure IoT. Créez une instance ModuleClient pour connecter votre module au hub IoT Edge en cours d’exécution sur l’appareil, de la même façon que les instances DeviceClient connectent les appareils IoT à IoT Hub. Pour plus d’informations sur la classe ModuleClient et ses méthodes de communication, reportez-vous à la référence de l’API de votre langage SDK préféré : C#, C, Python, Java ou Node.js.

Primitives IoT Hub

IoT Hub voit une instance de module comme étant similaire à un appareil. Une instance de module peut :

Actuellement, les modules ne peuvent pas recevoir de messages cloud-à-appareil, ni utiliser la fonctionnalité de chargement de fichier.

Lors de l’écriture d’un module, vous pouvez vous connecter au hub IoT Edge et utiliser les primitives IoT Hub comme vous le feriez lors de l’utilisation d’IoT Hub avec une application d’appareil. La seule différence entre les modules IoT Edge et les applications d’appareil IoT est qu’avec les modules, vous devez vous référer à l’identité du module plutôt qu’à l’identité de l’appareil.

Messages appareil-à-cloud

Un module IoT Edge peut envoyer des messages au cloud via le hub IoT Edge qui agit comme un répartiteur local et propage les messages dans le cloud. Pour permettre un traitement complexe des messages appareil-à-cloud, un module IoT Edge peut intercepter et traiter les messages envoyés par d’autres modules ou appareils à son hub IoT Edge local. Le module IoT Edge envoie ensuite les nouveaux messages avec des données traitées. Il est donc possible de créer des chaînes de modules IoT Edge pour construire des pipelines de traitement locaux.

Pour envoyer des messages de télémétrie appareil-à-cloud à l’aide de routes :

  • Utilisez la classe Module Client du Kit de développement logiciel (SDK) Azure IoT. Chaque module a des points de terminaison d’entrée et de sortie.
  • Utilisez une méthode d’envoi de message à partir de votre classe Module Client pour envoyer des messages sur le point de terminaison de sortie de votre module.
  • Configurez une route dans le module edgeHub de votre appareil de façon à envoyer ce point de terminaison de sortie à IoT Hub.

Pour traiter les messages à l’aide de routes :

  • Configurez une route pour envoyer les messages provenant d’un autre point de terminaison (module ou appareil) au point de terminaison d’entrée de votre module.
  • Écoutez les messages sur le point de terminaison d’entrée de votre module. Chaque fois qu’un nouveau message revient, une fonction de rappel est déclenchée par le Kit de développement logiciel (SDK) Azure IoT.
  • Traitez votre message avec cette fonction de rappel et envoyez éventuellement les nouveaux messages dans la file d’attente de point de terminaison de votre module.

Remarque

Pour plus d’informations sur la déclaration d’une route, consultez Découvrir comment déployer des modules et établir des routes dans IoT Edge.

Jumeaux

Les jumeaux sont l’une des primitives fournies par IoT Hub. Il existe des documents JSON qui stockent des informations sur l’état, notamment des métadonnées, des configurations et des conditions. Chaque module ou appareil possède son propre jumeau.

  • Pour obtenir un jumeau de module avec le kit SDK Azure IoT, appelez la méthode ModuleClient.getTwin.

  • Pour recevoir un patch de jumeau de module avec le kit SDK Azure IoT, implémentez une fonction de rappel et inscrivez-la avec la méthode ModuleClient.moduleTwinCallback du kit SDK Azure IoT afin que votre fonction de rappel soit déclenchée chaque fois qu’un patch de jumeau est disponible.

Recevoir des méthodes directes

Pour recevoir une méthode directe avec le kit SDK Azure IoT, implémentez une fonction de rappel et inscrivez-la avec la méthode ModuleClient.methodCallback du kit SDK Azure IoT afin que votre fonction de rappel soit déclenchée chaque fois qu’une méthode directe est disponible.

Prise en charge du langage et de l’architecture

IoT Edge prend en charge plusieurs systèmes d’exploitation, architectures d’appareils et langages de développement afin que vous puissiez générer le scénario qui correspond à vos besoins. Utilisez cette section pour comprendre les options de développement de modules de IoT Edge personnalisés. Vous pouvez en savoir plus sur la prise en charge des outils et les exigences pour chaque langage dans Préparer votre environnement de développement et de test pour IOT Edge.

Linux

Pour tous les langages du tableau suivant, IoT Edge prend en charge le développement pour les conteneurs Linux AMD64 et la plupart des conteneurs ARM64. Les conteneurs Debian 11 ARM32 sont également pris en charge.

Langage de développement Outils de développement
C Visual Studio Code
Visual Studio 2019/2022
C# Visual Studio Code
Visual Studio 2019/2022
Java Visual Studio Code
Node.JS Visual Studio Code
Python Visual Studio Code

Remarque

Pour la compilation multiplateforme, comme la compilation d’un module IoT Edge ARM32 sur un ordinateur de développement AMD64, vous devez configurer l’ordinateur de développement pour compiler le code sur l’architecture de l’appareil cible correspondant au module IoT Edge. Pour plus d’informations sur les architectures d’appareils cibles, consultez Développer des modules Azure IoT Edge à l’aide de Visual Studio Code.

Windows

Nous ne prenons plus en charge les conteneurs Windows. IoT Edge pour Linux sous Windows est la méthode recommandée pour exécuter IoT Edge sur les appareils Windows.

Sécurité du module

Vous devez développer vos modules en tenant compte de la sécurité. Pour en savoir plus sur la sécurisation de vos modules, consultez sécurité Docker.

Pour améliorer la sécurité des modules, IoT Edge désactive certaines fonctionnalités de conteneur par défaut. Vous pouvez remplacer les valeurs par défaut pour fournir des fonctionnalités privilégiées à vos modules, si nécessaire.

Autoriser les autorisations Docker élevées

Dans le fichier config sur un appareil IoT Edge, il existe un paramètre appelé allow_elevated_docker_permissions. Quand la valeur est true, cet indicateur autorise l’indicateur --privileged et toutes les fonctionnalités supplémentaires que vous définissez dans le champ CapAdd du HostConfig Docker dans les options de création du conteneur.

Remarque

Actuellement, cet indicateur a la valeur true par défaut, ce qui permet aux déploiements d’accorder des autorisations privilégiées aux modules. Nous vous recommandons de définir cet indicateur sur false pour améliorer la sécurité de l’appareil.

Activer CAP_CHOWN et CAP_SETUID

Les fonctionnalités Docker CAP_CHOWN et CAP_SETUID sont désactivées par défaut. Ces fonctionnalités peuvent être utilisées pour écrire dans des fichiers sécurisés sur le périphérique hôte et éventuellement obtenir un accès racine.

Si vous avez besoin de ces fonctionnalités, vous pouvez les réactiver manuellement à l’aide de CapADD dans les options de création du conteneur.

Étapes suivantes

Préparer votre environnement de développement et de test pour IoT Edge

Développer des modules Azure IoT Edge à l’aide de Visual Studio Code

Déboguer des modules Azure IoT Edge à l’aide de Visual Studio Code

Comprendre et utiliser les kits Azure IoT Hub SDK