Partager via


Développer vos propres 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.

Azure IoT Edge modules peuvent se connecter à d’autres services Azure et contribuer à votre pipeline de données cloud plus volumineux. Cet article explique comment développer des modules pour communiquer avec le runtime IoT Edge et les IoT Hub, ainsi que le reste du cloud Azure.

environnement d’exécution IoT Edge

Le runtime IoT Edge fournit l’infrastructure pour intégrer les fonctionnalités de plusieurs modules IoT Edge et 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 de IoT Edge, un programme s’exécutant dans un module peut utiliser le sdk d’appareil Azure IoT 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, vous devez d’abord le conteneuriser et l’exécuter à l’aide d’un moteur compatible Docker. IoT Edge utilise Moby, le projet open source derrière Docker, en tant que moteur compatible Docker. Vous pouvez transmettre les mêmes paramètres que ceux que vous utilisez avec Docker à vos modules IoT Edge. Pour plus d’informations, consultez Comment configurer les options de création de conteneurs pour les modules IoT Edge.

Utilisation du hub IoT Edge

Un hub IoT Edge fournit deux fonctionnalités principales : un proxy pour IoT Hub et les communications locales.

Connexion à IoT Edge hub à partir d’un module

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

Pour utiliser le routage IoT Edge sur AMQP, vous pouvez utiliser le ModuleClient à partir de l'Azure IoT SDK. Créez une instance ModuleClient pour connecter votre module au hub IoT Edge s’exécutant sur l’appareil, comme la façon dont DeviceClient instances connectent des appareils IoT à IoT Hub. Pour plus d’informations sur la classe ModuleClient et ses méthodes de communication, consultez la référence d’API pour votre langage sdk préféré : C#, C, Python, Java ou Node.js.

primitives d'IoT Hub

IoT Hub voit une instance de module 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 des primitives IoT Hub comme vous le feriez lorsque vous utilisez IoT Hub avec une application d’appareil. La seule différence entre les modules IoT Edge et les applications d’appareil IoT est que, avec les modules, vous devez faire référence à l’identité du module au lieu de 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 en tant que répartiteur local et propage les messages vers 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 de IoT Edge local. Le module IoT Edge envoie ensuite de nouveaux messages avec des données traitées. De cette façon, vous pouvez créer des chaînes de modules IoT Edge pour créer des pipelines de traitement locaux.

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

  • Utilisez la classe ModuleClient de la classe Azure IoT SDK. Chaque module a des points de terminaison d’entrée et de sortie.
  • Pour envoyer des messages sur le point de terminaison de sortie de votre module, utilisez une méthode d’envoi de message à partir de votre ModuleClient classe.
  • Pour envoyer ce point de terminaison de sortie à IoT Hub, configurez un itinéraire dans le module edgeHub de votre appareil.

Pour traiter les messages en utilisant des 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, le Azure IoT SDK déclenche une fonction de rappel.
  • Traitez votre message à l’aide de cette fonction de rappel et (éventuellement) envoyez de nouveaux messages dans votre file d’attente de point de terminaison de module.

Remarque

Pour plus d’informations sur la déclaration d’un itinéraire, consultez Learn comment déployer des modules et établir des itinéraires dans IoT Edge.

Jumeaux

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

  • Pour obtenir un jumeau de module à l’aide du Azure IoT SDK, appelez la méthode ModuleClient.getTwin.
  • Pour recevoir un patch jumeau de module à l'aide de l'Azure IoT SDK, implémentez une fonction de rappel et enregistrez-la à l'aide de la méthode ModuleClient.moduleTwinCallback, afin que votre fonction soit activée à chaque réception d'un patch jumeau.

Recevoir des méthodes directes

Pour recevoir une méthode directe à l’aide de la méthode Azure IoT SDK, implémentez une fonction de rappel et inscrivez-la à l’aide de la méthode ModuleClient.methodCallback afin que votre fonction de rappel soit déclenchée chaque fois qu’une méthode directe est entrée.

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 de créer le scénario qui correspond à vos besoins. Utilisez cette section pour comprendre vos options de développement de modules IoT Edge personnalisés. Vous pouvez en savoir plus sur la prise en charge des outils et les exigences pour chaque langage dans Preparez votre environnement de développement et de test pour IoT Edge.

Linux

Pour toutes les langues du tableau suivant, IoT Edge supporte le développement pour AMD64 et la plupart des conteneurs Linux ARM64. Il prend également en charge les conteneurs Debian 11 ARM32.

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 arm32 IoT Edge sur un ordinateur de développement AMD64, vous devez configurer l’ordinateur de développement pour compiler du code sur l’architecture de l’appareil cible correspondant au module IoT Edge. Pour plus d’informations sur les architectures d’appareils cibles, consultez Tutorial : Développer des modules Azure IoT Edge à l’aide de Visual Studio Code.

Windows

Microsoft ne prend plus en charge les conteneurs Windows. IoT Edge pour Linux sur Windows est la méthode recommandée pour exécuter des IoT Edge sur des appareils Windows.

Sécurité du module

Développez vos modules en ayant la sécurité à l'esprit. Pour en savoir plus sur la sécurisation de vos modules, consultez sécurité du moteur 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 des permissions Docker avancées

Dans le fichier de configuration sur un appareil IoT Edge, un paramètre appelé allow_elevated_docker_permissions contrôle les autorisations Docker élevées. Lorsqu’il est défini sur true, cet indicateur accorde l’indicateur --privileged et toutes les autres fonctionnalités que vous définissez dans le CapAdd champ de Docker HostConfig dans les options de création de conteneur.

Remarque

Actuellement, cet indicateur est vrai par défaut, qui accorde des autorisations privilégiées aux déploiements. Définissez cet indicateur sur false pour améliorer la sécurité des appareils.

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 écrire dans des fichiers sécurisés sur l’appareil hôte et potentiellement accéder aux privilèges d'administrateur.

Si vous avez besoin de ces fonctionnalités, réactivez-les manuellement à l’aide CapADD des options de création de conteneur.

Étapes suivantes