Consentire ai moduli di accedere all'archiviazione locale di un dispositivo

Si applica a:Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS è di fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

I moduli IoT Edge possono usare l'archiviazione nel dispositivo IoT Edge host per migliorare l'affidabilità, soprattutto quando si opera offline.

Configurare i moduli di sistema per l'uso dell'archiviazione permanente

Per impostazione predefinita, i moduli di sistema IoT Edge, l'agente IoT Edge e l'hub IoT Edge, archiviano lo stato nel file system temporaneo dell'istanza del contenitore. Questo stato viene perso quando l'istanza del contenitore viene riciclata, ad esempio quando viene aggiornata la versione dell'immagine del modulo o createOptions.

Per gli scenari di produzione, usare un percorso di archiviazione permanente nel file system host per archiviare lo stato del modulo di sistema. In questo modo si migliora l'affidabilità della soluzione e le garanzie di recapito dei messaggi nel cloud.

Per configurare i moduli di sistema per l'uso dell'archiviazione permanente:

  1. Sia per l'hub IoT Edge che per l'agente IoT Edge, aggiungere una variabile di ambiente denominata Archiviazione Folder che punta a una directory nel modulo.

  2. Sia per l'hub di IoT Edge che per l'agente di IoT Edge, aggiungere binding per connettere una directory locale nel computer host a una directory nel modulo. Ad esempio:

    Screenshot che mostra come aggiungere opzioni di creazione e variabili di ambiente per l'archiviazione locale.

    Sostituire <HostStoragePath> e <ModuleStoragePath> con il percorso di archiviazione dell'host e del modulo. Entrambi i valori devono essere un percorso assoluto e <HostStoragePath> devono esistere.

È possibile configurare l'archiviazione locale direttamente nel manifesto della distribuzione. Ad esempio, se si vuole eseguire il mapping dei percorsi di archiviazione seguenti:

Modulo Percorso di archiviazione host Percorso di archiviazione del modulo
edgeAgent /srv/edgeAgent /tmp/edgeAgent
edgeHub /srv/edgeHub /tmp/edgeHub

Il manifesto della distribuzione sarà simile al seguente:

"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"
    }
}

Nota

Se si usa un'installazione snap, assicurarsi di scegliere un percorso di archiviazione host accessibile agli snap. Ad esempio: $HOME/snap/azure-iot-edge/current/modules/.

Gestione automatica delle autorizzazioni del sistema host

Nella versione 1.4 e successive non è necessario impostare manualmente la proprietà o le autorizzazioni per l'archiviazione host che esegue il backup di StorageFolder. Le autorizzazioni e la proprietà vengono gestite automaticamente dai moduli di sistema durante l'avvio.

Nota

La gestione automatica delle autorizzazioni dell'archiviazione associata all'host si applica solo ai moduli di sistema, all'agente IoT Edge e all'hub Edge. Per i moduli personalizzati, è necessaria la gestione manuale delle autorizzazioni e della proprietà dell'archiviazione host associata se il contenitore del modulo personalizzato non è in esecuzione come root utente.

Se il modulo personalizzato richiede l'accesso all'archiviazione permanente nel file system host, usare le opzioni di creazione del modulo per associare una cartella di archiviazione nel contenitore del modulo a una cartella nel computer host. Ad esempio:

{
  "HostConfig": {
    "Mounts": [
      {
        "Target": "<ModuleStoragePath>",
        "Source": "<HostStoragePath>",
        "Type": "bind",
        "ReadOnly": false
      }
    ]
  }
}

Sostituire <HostStoragePath> e <ModuleStoragePath> con i percorsi di archiviazione dell'host e del modulo. Entrambi i valori devono essere percorsi assoluti. Per informazioni dettagliate sull'opzione, vedere la specifica del montaggio del motore Docker.

Autorizzazioni del sistema host

Assicurarsi che il profilo utente usato dal modulo disponga delle autorizzazioni di lettura, scrittura ed esecuzione necessarie per la directory del sistema host. Per impostazione predefinita, i contenitori vengono eseguiti come root utente che dispone già delle autorizzazioni necessarie. Ma il Dockerfile del modulo potrebbe specificare l'uso di un utente non radice, nel qual caso le autorizzazioni di archiviazione host devono essere configurate manualmente.

Esistono diversi modi per gestire le autorizzazioni di directory nei sistemi Linux, tra cui l'uso chown per modificare il proprietario della directory e quindi chmod per modificare le autorizzazioni. Ad esempio, per consentire l'accesso all'archiviazione host a un modulo in esecuzione come ID utente non radice 1000, usare i comandi seguenti:

sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>

Dati crittografati nell'archiviazione dei moduli

Quando i moduli richiamano l'API del carico di lavoro del daemon IoT Edge per crittografare i dati, la chiave di crittografia viene derivata usando l'ID modulo e l'ID di generazione del modulo. Un ID di generazione viene usato per proteggere i segreti se un modulo viene rimosso dalla distribuzione e quindi un altro modulo con lo stesso ID modulo viene distribuito successivamente nello stesso dispositivo. È possibile visualizzare l'ID di generazione di un modulo usando il comando dell'interfaccia della riga di comando di Azure az iot hub module-identity show.

Se si desidera condividere file tra moduli tra generazioni, non devono contenere segreti o non verranno decrittografati.

Passaggi successivi

Per un esempio aggiuntivo di accesso all'archiviazione host da un modulo, vedere Archiviare i dati nella rete perimetrale con Archiviazione BLOB di Azure in IoT Edge.