Fournir à des modules Azure IoT Edge l’accès au stockage local d’un appareil
S’applique à : IoT Edge 1.5 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 sera en fin de vie le 12 novembre 2024. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.
Les modules IoT Edge peuvent utiliser le stockage sur l’appareil hôte IoT Edge lui-même pour améliorer la fiabilité, en particulier lors de l’exploitation hors connexion.
Configurer les modules système pour utiliser le stockage persistant
Par défaut, les modules système IoT Edge, l’agent IoT Edge et le hub IoT Edge stockent l’état dans le système de fichiers éphémère de leur instance de conteneur. Cet état est perdu lorsque l’instance de conteneur est recyclée, par exemple, lorsque la version de l’image de module ou createOptions est mise à jour.
Pour les scénarios de production, utilisez un emplacement de stockage persistant sur le système de fichiers hôte pour stocker l’état du module système. Cela améliore la robustesse de la solution et les garanties de remise de messages cloud.
Pour configurer des modules système pour qu’ils utilisent le stockage persistant :
Pour le hub IoT Edge et l’agent IoT Edge, ajoutez une variable d’environnement appelée StorageFolder qui pointe vers un répertoire dans le module.
Pour le hub IoT Edge et l’agent IoT Edge, ajoutez des liaisons pour connecter un répertoire local sur la machine hôte à un répertoire du module. Par exemple :
Remplacez
<HostStoragePath>
et<ModuleStoragePath>
par votre chemin de stockage hôte et de module. Les deux valeurs doivent être un chemin absolu et<HostStoragePath>
doit exister.
Vous pouvez configurer le stockage local directement dans le manifeste de déploiement. Par exemple, si vous voulez mapper les chemins de stockage suivants :
Module | Chemin de stockage hôte | Chemin de stockage de module |
---|---|---|
edgeAgent | /srv/edgeAgent | /tmp/edgeAgent |
edgeHub | /srv/edgeHub | /tmp/edgeHub |
Votre manifeste de déploiement doit ressembler à ce qui suit :
"systemModules": {
"edgeAgent": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeAgent"
}
},
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeAgent:/tmp/edgeAgent\"]}}"
},
"type": "docker"
},
"edgeHub": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeHub"
}
},
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeHub:/tmp/edgeHub\"],\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
},
"status": "running",
"type": "docker"
}
}
Remarque
Si vous utilisez une installation de snap, veillez à choisir un chemin de stockage hôte accessible aux snaps. Par exemple : $HOME/snap/azure-iot-edge/current/modules/
.
Gestion automatique des autorisations du système hôte
Sur la version 1.4 et les versions ultérieures, il n’est pas nécessaire de définir manuellement la propriété ou les autorisations pour le stockage hôte qui sauvegarde le StorageFolder
. Les autorisations et la propriété sont automatiquement gérées par les modules système au démarrage.
Remarque
La gestion automatique des autorisations du stockage lié à l’hôte s’applique uniquement aux modules système, à l’agent IoT Edge et au hub Edge. Pour les modules personnalisés, la gestion manuelle des autorisations et de la propriété du stockage hôte lié est nécessaire si le conteneur de module personnalisé n’est pas en cours d’exécution en tant qu’utilisateur root
.
Lier le stockage de module à un stockage d’appareils pour les modules personnalisés
Si votre module personnalisé nécessite l’accès au stockage persistant sur le système de fichiers hôte, utilisez les options de création du module pour lier un dossier de stockage dans le conteneur de module à un dossier sur l’ordinateur hôte. Par exemple :
{
"HostConfig": {
"Mounts": [
{
"Target": "<ModuleStoragePath>",
"Source": "<HostStoragePath>",
"Type": "bind",
"ReadOnly": false
}
]
}
}
Remplacez <HostStoragePath>
et <ModuleStoragePath>
par le chemin de stockage de votre hôte et de votre module. Les deux valeurs doivent être des chemins absolus. Reportez-vous à la spécification de montage du moteur Docker pour plus d’informations sur l’option.
Autorisations du système hôte
Assurez-vous que le profil utilisateur que votre module utilise a les autorisations de lecture, d’écriture et d’exécution nécessaires sur le répertoire du système hôte. Par défaut, les conteneurs s’exécutent en tant qu’utilisateur root
disposant déjà des autorisations requises. Toutefois, le fichier Dockerfile de votre module peut spécifier l’utilisation d’un utilisateur non-racine dans lequel les autorisations de stockage hôte doivent être configurées manuellement.
Il existe plusieurs façons de gérer les autorisations de répertoire sur les systèmes Linux , notamment l’utilisation de chown
pour modifier le propriétaire du répertoire, puis chmod
pour modifier les autorisations. Par exemple, pour autoriser l’accès au stockage hôte à un module s’exécutant en tant qu’ID d’utilisateur non-racine 1000, utilisez les commandes suivantes :
sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>
Données chiffrées dans le stockage de module
Lorsque les modules appellent l’API de charge de travail du démon IoT Edge pour chiffrer les données, la clé de chiffrement est obtenue en utilisant l’ID du module et l’ID de génération du module. Un ID de génération est utilisé pour protéger les secrets si un module est supprimé du déploiement et qu’un autre module avec le même ID de module est ensuite déployé sur le même appareil. Vous pouvez afficher l’ID de génération d’un module à l’aide de la commande Azure CLI az iot hub module-identity show.
Si vous souhaitez partager des fichiers entre des modules d’une génération à l’autre, ces fichiers ne doivent pas contenir de secrets, sinon ces derniers ne pourront pas être déchiffrés.
Étapes suivantes
Pour un autre exemple d’accès à l’hôte de stockage à partir d’un module, consultez Stocker des données en périphérie avec le Stockage Blob Azure sur IoT Edge.