Tutoriel : Créer une hiérarchie d’appareils IoT Edge à l’aide d’Azure IoT Edge pour Linux sur Windows
S’applique à : IoT Edge 1.4
Important
Azure IoT Edge 1.5 LTS et IoT Edge 1.4 sont des versions prises en charge. IoT Edge 1.4 LTS arrive en fin de service le 12 novembre 2024. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.
Vous pouvez déployer des nœuds Azure IoT Edge sur des réseaux organisés en couches hiérarchiques. Chaque couche d’une hiérarchie est un appareil de passerelle qui gère les messages et les requêtes des appareils situés dans la couche du dessous. Cette configuration est également appelée périphérie imbriquée.
Vous pouvez structurer une hiérarchie d’appareils de sorte que seule la couche supérieure soit connectée au cloud, et que les couches inférieures puissent uniquement communiquer avec les couches Nord et Sud adjacentes. Cette structure en couches réseau est la base de la plupart des réseaux industriels, qui respectent la norme ISA-95.
Ce tutoriel vous guide dans la création d’une hiérarchie d’appareils IoT Edge à l’aide d’Azure IoT Edge pour Linux sur Windows, le déploiement de conteneurs de runtime IoT Edge sur vos appareils et la configuration locale de vos appareils. Vous effectuez les tâches suivantes :
- Créer et définir les relations dans une hiérarchie d’appareils IoT Edge.
- Configurer le runtime IoT Edge sur les appareils de votre hiérarchie.
- Installer des certificats cohérents dans votre hiérarchie d’appareils.
- Ajouter des charges de travail aux appareils de votre hiérarchie.
- Utiliser le module Proxy d’API IoT Edge pour router en toute sécurité le trafic HTTP sur un port unique à partir de vos appareils de couche inférieure.
Conseil
Ce tutoriel comprend un mélange d’étapes manuelles et automatisées pour fournir une présentation des fonctionnalités IoT Edge imbriquées.
Si vous souhaitez une présentation entièrement automatisée de la configuration d’une hiérarchie d’appareils IoT Edge, vous pouvez créer votre propre script basé sur le l’exemple Azure IoT Edge pour IoT industriel scripté. Ce scénario scripté déploie des machines virtuelles Azure en tant qu’appareils préconfigurés pour simuler un environnement de fabrique.
Si vous souhaitez examiner en détail les étapes manuelles de création et de gestion d’une hiérarchie d’appareils IoT Edge, consultez le guide pratique sur les hiérarchies d’appareils de passerelle IoT Edge.
Dans ce tutoriel, les couches réseau suivantes sont définies :
Couche supérieure : les appareils IoT Edge de cette couche peuvent se connecter directement au cloud.
Couches inférieures : les appareils IOT Edge se trouvant dans des couches en dessous de la couche supérieure ne peuvent pas se connecter directement au cloud. Ils doivent passer par un ou plusieurs appareils IoT Edge intermédiaires pour envoyer et recevoir des données.
Ce tutoriel utilise une hiérarchie à deux appareils pour des raisons de simplicité. L’appareil de couche supérieure représente un appareil dans la couche supérieure de la hiérarchie qui peut se connecter directement au cloud. Cet appareil est également s’appelle l’appareil parent. L’appareil de couche inférieure représente un appareil dans la couche inférieure de la hiérarchie ne peut pas se connecter directement au cloud. Vous pouvez ajouter d’autres appareils pour représenter votre environnement de production, selon les besoins. Les appareils dans les couches inférieures s’appellent appareils enfants.
Notes
Un appareil enfant peut être un appareil en aval ou un appareil de passerelle dans une topologie imbriquée.
Prérequis
Pour créer une hiérarchie d’appareils IoT Edge, vous devez effectuer ce qui suit :
- Interpréteur de commandes Bash dans Azure Cloud Shell utilisant Azure CLI v2.3.1 avec l’extension Azure IoT v0.10.6 ou supérieure installée. Ce tutoriel utilise Azure Cloud Shell. Pour afficher vos versions actuelles des modules et extensions Azure CLI, exécutez la commande az version.
- Deux appareils Windows exécutant Azure IoT Edge pour Linux sur Windows. Les deux appareils doivent être déployés à l’aide d’un commutateur virtuel externe.
Conseil
Il est possible d’utiliser un commutateur virtuel interne ou par défaut si un transfert de port est configuré sur le système d’exploitation hôte Windows. Mais pour faciliter ce tutoriel, les deux appareils doivent utiliser un commutateur virtuel externe et être connectés au même réseau externe.
Pour plus d’informations sur la mise en réseau, consultez Mise en réseau d’Azure IoT Edge pour Linux sur Windows et Configuration de mise en réseau pour Azure IoT Edge pour Linux sur Windows.
Si vous devez configurer les appareils EFLOW sur une zone DMZ, consultez Comment configurer Azure IoT Edge pour Linux sur Windows et la configuration DMZ.
- Un compte Azure avec un abonnement valide. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
- Un hub IoT de niveau gratuit ou standard dans Azure
- Vérifiez que les ports suivants sont ouverts en entrée pour tous les appareils, à l’exception de l’appareil de la couche la plus basse : 443, 5671, 8883 :
- 443 : Utilisé entre les hubs de périphérie parent et enfant pour les appels d’API REST et pour extraire des images conteneur Docker.
- 5671, 8883 : Utilisé pour AMQP et MQTT.
Conseil
Pour plus d’informations sur le pare-feu de machine virtuelle EFLOW, consultez Sécurité d’Azure IoT Edge pour Linux sur Windows.
Créer votre hiérarchie d’appareils IoT Edge
Les appareils IoT Edge composent les couches de votre hiérarchie. Ce tutoriel crée une hiérarchie de deux appareils IoT Edge : l’appareil de couche supérieure, et l’appareil de couche inférieure. Vous pouvez créer d’autres appareils en aval selon les besoins.
Pour créer et configurer votre hiérarchie des appareils IoT Edge, vous utilisez la commande az iot edge devices create Azure CLI. Cet outil simplifie la configuration de la hiérarchie en automatisant et en condensant plusieurs étapes :
- Créer des appareils dans votre IoT Hub
- Définit des relations parent-enfant pour autoriser la communication entre les appareils
- Applique le manifeste de déploiement à chaque appareil
- Génère une chaîne de certificats pour chaque appareil afin d’établir une communication sécurisée entre eux
- Génère des fichiers config pour chaque appareil
Créer une configuration d’appareil
Vous créez un groupe d’appareils de périphérie imbriquée contenant un appareil parent avec un appareil enfant. Dans ce tutoriel, nous utilisons des exemples de manifestes de déploiement de base. Pour obtenir d’autres exemples de scénarios, passez en revue les exemples de modèles de configuration.
Avant d’utiliser la commande az iot edge devices create, vous devez définir le manifeste de déploiement pour des appareils de couche supérieure et inférieure. Téléchargez l’exemple de fichier deploymentTopLayer.json sur votre ordinateur local.
Le manifeste de déploiement d’appareil de couche supérieure définit le module proxy d’API IoT Edge et déclare l’itinéraire de l’appareil de couche inférieure vers IoT Hub.
Téléchargez l’exemple de fichier deploymentLowerLayer.json sur votre ordinateur local.
Le manifeste de déploiement d’appareil de couche inférieure inclut le module du capteur de température simulé et déclare l’itinéraire vers l’appareil de couche supérieure. Vous pouvez voir dans la section systemModules que les modules runtime sont définis pour extraire à partir de $amont:443 au lieu de mcr.microsoft.com. L’appareil de couche inférieure envoie des demandes d’image Docker au module Proxy d’API IoT Edge sur le port 443, car il ne peut pas tirer directement les images du cloud. L’autre module déployé sur l’appareil de couche inférieure, le module Simulated Temperature Sensor, effectue également sa demande d’image auprès de
$upstream:443
.Pour obtenir plus d’informations sur la création d’un manifeste de déploiement de couche inférieure, consultez Connecter des appareils Azure IoT Edge pour créer une hiérarchie.
Dans Azure Cloud Shell, utilisez la commande az iot edge devices create Azure CLI pour créer des appareils dans IoT Hub et des bundles de configuration pour chaque appareil de votre hiérarchie. Remplacez les espaces réservés suivant par les valeurs appropriées :
Espace réservé Description <hub-name> Nom de votre IoT Hub <config-bundle-output-path> Le chemin d’accès au dossier dans lequel vous souhaitez enregistrer les bundles de configuration. <parent-device-name> Nom de l’ID d’appareil parent de couche supérieure. <parent-deployment-manifest> Fichier manifeste de déploiement de l’appareil parent. <parent-fqdn-or-ip> Nom de domaine complet ou adresse IP de l’appareil parent. <child-device-name> Nom d’ID d’appareil enfant de couche inférieure. <child-deployment-manifest> Fichier manifeste de déploiement de l’appareil enfant. <child-fqdn-or-ip> Nom de domaine complet ou adresse IP de l’appareil enfant. az iot edge devices create \ --hub-name <hub-name> \ --output-path <config-bundle-output-path> \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \ --device id=<parent-device-name> \ deployment=<parent-deployment-manifest> \ hostname=<parent-fqdn-or-ip> \ --device id=child-1 \ parent=parent-1 \ deployment=<child-deployment-manifest> \ hostname=<child-fqdn-or-ip>
Par exemple, la commande suivante crée une hiérarchie de deux appareils IoT Edge dans IoT Hub. Un appareil de couche supérieure nommé parent-1 et un appareil de couche inférieure nommé child-1*. La commande enregistre les bundles de configuration pour chaque appareil dans le répertoire de sortie. La commande génère également des certificats de test auto-signés et les inclut dans le bundle de configuration. Les bundles de configuration sont installés sur chaque appareil à l’aide d’un script d’installation.
az iot edge devices create \ --hub-name my-iot-hub \ --output-path ./output \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \ --device id=parent-1 \ deployment=./deploymentTopLayer.json \ hostname=10.0.0.4 \ --device id=child-1 \ parent=parent-1 \ deployment=./deploymentLowerLayer.json \ hostname=10.1.0.4
Après exécution la commande, vous trouverez les bundles de configuration d’appareil dans le répertoire de sortie. Par exemple :
PS C:\nested-edge\output> dir
Directory: C:\nested-edge\output
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 4/10/2023 4:12 PM 7192 child-1.tgz
-a--- 4/10/2023 4:12 PM 6851 parent-1.tgz
Vous pouvez utiliser vos propres certificats et clés passés en tant qu’arguments à la commande ou créer une hiérarchie d’appareils plus complexe. Si vous souhaitez obtenir plus d’informations sur la création d’appareils imbriqués en utilisant la commande az, consultez az iot edge devices create. Si vous ne savez pas comment les certificats sont utilisés dans un scénario de passerelle, consultez la section relative aux certificats du guide pratique.
Dans ce tutoriel, vous utilisez des arguments inline pour créer les appareils et les bundles de configuration. Vous pouvez également utiliser un fichier de configuration au format YAML ou JSON. Pour obtenir un exemple de fichier de configuration, consultez l’exemple sample_devices_config.yaml.
Configurer le runtime IoT Edge
Outre l’approvisionnement de vos appareils, les étapes de configuration établissent une communication approuvée entre les appareils dans votre hiérarchie à l’aide des certificats que vous avez créés précédemment. Les étapes commencent également à établir la structure réseau de votre hiérarchie. L’appareil de couche supérieure conserve la connectivité Internet, ce qui lui permet d’extraire des images pour son runtime à partir du cloud, tandis que les appareils de couche inférieure passent par l’appareil de couche supérieure pour accéder à ces images.
Pour configurer le runtime IoT Edge, vous devez appliquer les bundles de configuration à vos appareils. Les configurations de l’appareil de couche supérieure et d’un appareil de couche inférieure étant différentes, veillez à appliquer le bon fichier config à chaque appareil.
Chaque appareil a besoin de son bundle de configurations correspondant. Vous pouvez utiliser une clé USB ou un programme de copie sécurisée de fichiers pour déplacer les bundles de configurations sur chaque appareil. Vous devez copier le bundle de configuration dans le système d’exploitation hôte Windows de chaque appareil EFLOW, puis sur la machine virtuelle EFLOW.
Avertissement
Veillez à envoyer le bundle de configurations approprié à chaque appareil.
Configuration de l’appareil de couche supérieure
Connectez-vous à votre appareil hôte Windows de niveau supérieur et copiez le fichier parent-1.tzg sur l’appareil.
Démarrez une session PowerShell avec élévation de privilèges à l’aide de la commande Exécuter en tant qu’administrateur.
Copiez parent-1.tzg dans la machine virtuelle EFLOW.
Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
Connectez-vous à la machine virtuelle EFLOW
Connect-EflowVm
Extrayez l’archive du bundle de configuration. Par exemple, utilisez la commande tar pour extraire le fichier d’archive parent-1 :
tar -xzf ./parent-1.tgz
Définissez l’autorisation d’exécution pour le script d’installation.
chmod +x install.sh
Exécutez le script install.sh.
sudo sh ./install.sh
Appliquez les autorisations de certificat appropriées et redémarrez le runtime IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Vérifiez que tous les services IoT Edge s’exécutent correctement.
sudo iotedge system status
Pour finir, ajoutez les règles de pare-feu appropriées pour activer la connectivité entre l’appareil de couche inférieure et l’appareil de couche supérieure.
sudo iptables -A INPUT -p tcp --dport 5671 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 8883 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT sudo iptables-save | sudo tee /etc/systemd/scripts/ip4save
Effectuez les vérifications de configuration et de connectivité sur vos appareils.
sudo iotedge check
Sur l’appareil de couche supérieure, attendez-vous à voir une sortie avec plusieurs évaluations réussies. Vous pouvez voir des avertissements concernant les stratégies de journaux et, en fonction de votre réseau, les stratégies DNS.
Si vous souhaitez examiner de plus près les modifications apportées au fichier config de votre appareil, consultez la section Configurer IoT Edge sur les appareils dans le guide pratique.
Configuration de l’appareil de couche inférieure
Connectez-vous à votre appareil hôte Windows de niveau inférieur et copiez le fichier child-1.tzg sur l’appareil.
Démarrez une session PowerShell avec élévation de privilèges à l’aide de la commande Exécuter en tant qu’administrateur.
Copiez child-1.tzg dans la machine virtuelle EFLOW.
Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
Connectez-vous à la machine virtuelle EFLOW
Connect-EflowVm
Extrayez l’archive du bundle de configuration. Par exemple, utilisez la commande tar pour extraire le fichier d’archive child-1 :
tar -xzf ./child-1.tgz
Définissez l’autorisation d’exécution pour le script d’installation.
chmod +x install.sh
Exécutez le script install.sh.
sudo sh ./install.sh
Appliquez les autorisations de certificat appropriées et redémarrez le runtime IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Vérifiez que tous les services IoT Edge s’exécutent correctement.
sudo iotedge system status
Effectuez les vérifications de configuration et de connectivité sur vos appareils. Pour l’appareil de couche inférieure, l’image de diagnostic doit être passée manuellement dans la commande :
sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:443/azureiotedge-diagnostics:1.2
Si vous avez correctement suivi les étapes antérieures, vous pouvez vérifier que vos appareils sont configurés correctement. Une fois que vous êtes satisfait de vos configurations sur chaque appareil, vous êtes prêt à continuer.
Déploiement de module d’appareil
Le déploiement de module pour vos appareils a été appliqué lors de la création des appareils dans IoT Hub. La commande az iot edge devices create a appliqué les fichiers JSON de déploiement pour les appareils de couche supérieure et inférieure. Une fois ces déploiements effectués, l’appareil de couche inférieure utilise le module Proxy d’API IoT Edge pour extraire les images nécessaires.
En plus des modules de runtime Agent IoT Edge et Hub IoT Edge, l’appareil de couche supérieure reçoit les modules Registre Docker et Proxy d’API IoT Edge.
Le module Registre Docker pointe vers un registre Azure Container Registry existant. Dans ce cas, REGISTRY_PROXY_REMOTEURL
pointe vers Microsoft Container Registry. Par défaut, le registre Docker écoute sur le port 5000.
Le module Proxy d’API IoT Edge route les requêtes HTTP vers d’autres modules, ce qui permet aux appareils de couche inférieure de tirer (pull) des images conteneur ou de pousser (push) des objets blob vers le stockage. Dans ce tutoriel, il communique sur le port 443 et est configuré pour envoyer des demandes de tirage (pull requests) d’images conteneur Docker à votre module Registre Docker sur le port 5000. De plus, toutes les demandes de chargement du service Stockage Blob sont routées vers le module AzureBlobStorageonIoTEdge sur le port 11002. Pour plus d’informations sur le module Proxy d’API IoT Edge et sur sa configuration, consultez le guide pratique du module.
Pour découvrir comment créer un déploiement comme celui-ci via le portail Azure ou Azure Cloud Shell, consultez la section consacrée aux appareils de couche supérieure dans le guide pratique.
Vous pouvez voir l’état des modules à l’aide de la commande :
az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"
Cette commande renvoie toutes les propriétés edgeAgent signalées. Voici quelques exemples utiles pour superviser l’état de l’appareil : état du runtime, heure de début du runtime, heure de la dernière sortie du runtime, nombre de redémarrages du runtime.
Vous pouvez également voir l’état des modules sur le portail Azure. Accédez à la section Appareils de votre hub IoT pour voir les appareils et les modules.
Afficher les données générées
Le module Capteur de température simulé que vous avez envoyé (push) génère des exemples de données d’environnement. Il envoie des messages qui incluent la température et l’humidité ambiantes, la température et la pression de la machine, ainsi qu’un horodatage.
Vous pouvez aussi afficher ces messages par le biais d’Azure Cloud Shell :
az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>
Par exemple :
az iot hub monitor-events -n my-iot-hub -d child-1
{
"event": {
"origin": "child-1",
"module": "simulatedTemperatureSensor",
"interface": "",
"component": "",
"payload": "{\"machine\":{\"temperature\":104.29281270901808,\"pressure\":10.48905461241978},\"ambient\":{\"temperature\":21.086561171611102,\"humidity\":24},\"timeCreated\":\"2023-04-17T21:50:30.1082487Z\"}"
}
}
Dépannage
Exécutez la commande iotedge check
pour vérifier la configuration et résoudre les problèmes.
Vous pouvez exécuter iotedge check
dans une hiérarchie imbriquée, même si les appareils en aval n’ont pas d’accès direct à Internet.
Quand vous exécutez iotedge check
à partir de la couche inférieure, le programme essaie de tirer l’image du parent via le port 443.
sudo iotedge check --diagnostics-image-name $upstream:443/azureiotedge-diagnostics:1.2
La valeur azureiotedge-diagnostics
est extraite du registre de conteneurs lié au module registre. Dans ce tutoriel, elle est définie par défaut sur https://mcr.microsoft.com :
Nom | Valeur |
---|---|
REGISTRY_PROXY_REMOTEURL |
https://mcr.microsoft.com |
Si vous utilisez un registre de conteneurs privé, vérifiez que toutes les images (IoTEdgeAPIProxy, edgeAgent, edgeHub, Simulated Temperature Sensor et diagnostics) sont présentes dans le registre de conteneurs.
Si un appareil en aval a une architecture de processeur différente de l’appareil parent, vous avez besoin de l’image d’architecture appropriée. Vous pouvez utiliser un registre connecté ou spécifier l’image appropriée pour les modules edgeAgent et edgeHub dans le fichier config.toml de l’appareil en aval. Par exemple, si l’appareil parent s’exécute sur une architecture ARM32v7 et que l’appareil en aval s’exécute sur une architecture AMD64, vous devez spécifier la version et la balise d’image d’architecture correspondantes dans le fichier config.toml de l’appareil en aval.
[agent.config]
image = "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
},
},
"edgeHub": {
"settings": {
"image": "$upstream:443/azureiotedge-hub:1.4.10-linux-amd64",
}
}
}
Nettoyer les ressources
Vous pouvez supprimer les ressources Azure et les configurations locales que vous avez créées dans cet article pour éviter des frais.
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 configuré deux appareils IoT Edge en tant que passerelles et défini l’un des deux comme appareil parent de l’autre. Vous avez vu ensuite comment tirer une image conteneur sur l’appareil enfant via une passerelle à l’aide du module Proxy d’API IoT Edge. Pour en savoir plus, consultez le guide pratique sur l’utilisation du module proxy.
Si vous souhaitez en savoir plus sur l’utilisation des passerelles pour créer des couches hiérarchiques d’appareils IoT Edge, consultez l’article suivant.