Fournir à des modules l’accès au stockage local d’un appareil

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 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 :

  1. 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.

  2. 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 :

    Screenshot that shows how to add create options and environment variables for local storage.

    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.4",
            "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.4",
            "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.

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.