Développer vos propres modules IoT Edge

S’applique à :IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4 est la version prise en charge. 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, consultez la référence d’API pour votre langage SDK préféré : C#, C, Python, Java ou Node.js.

Primitives IoT Hub

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

  • Envoyer des messages appareil-à-cloud
  • Recevoir des méthodes directes ciblées spécifiquement sur son identité
  • Avoir un jumeau de module distinct et isolé du jumeau d’appareil et des autres jumeaux de module de cet appareil

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 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 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 de 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 d’itinéraires :

  • 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 Client de module pour envoyer des messages sur le point de terminaison de sortie de votre module.
  • Configurez un itinéraire dans le module EdgeHub de votre appareil pour envoyer ce point de terminaison de sortie à IoT Hub.

Pour traiter les messages à l’aide d’itinéraires :

  • Configurez un itinéraire pour envoyer des 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 (éventuellement) envoyez de nouveaux messages dans votre file d’attente de point de terminaison de module.

Remarque

Pour en savoir plus sur la déclaration d’un itinéraire, consultez Découvrir comment déployer des modules et établir des itinéraires 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 de développement logiciel (SDK) Azure IoT, appelez la ModuleClient.getTwin méthode.

  • Pour recevoir un correctif de jumeau de module avec le Kit de développement logiciel (SDK) Azure IoT, implémentez une fonction de rappel et inscrivez-la auprès de la ModuleClient.moduleTwinCallback méthode du Kit de développement logiciel (SDK) Azure IoT afin que votre fonction de rappel soit déclenchée chaque fois qu’un correctif de jumeau est fourni.

Recevoir des méthodes directes

Pour recevoir une méthode directe avec le Kit de développement logiciel (SDK) Azure IoT, implémentez une fonction de rappel et inscrivez-la auprès de la ModuleClient.methodCallback méthode du Kit de développement logiciel (SDK) Azure IoT 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 pour vous permettre de créer 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 amd64 et la plupart des conteneurs Linux ARM64. Il existe également la prise en charge des 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 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. Lorsqu’il est défini sur true, cet indicateur autorise l’indicateur --privileged et toutes les fonctionnalités supplémentaires que vous définissez dans le CapAdd champ de Docker HostConfig dans les options de création de 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