Dela via


Ge Azure IoT Edge-moduler åtkomst till en enhets lokala lagring

Gäller för: Bockmarkering för IoT Edge 1.5 IoT Edge 1.5 Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 LTS stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

IoT Edge-moduler kan använda lagring på själva värd-IoT Edge-enheten för bättre tillförlitlighet, särskilt när du arbetar offline.

Konfigurera systemmoduler för att använda beständig lagring

Som standard lagrar IoT Edge-systemmoduler, IoT Edge-agenten och IoT Edge-hubben tillståndet i det tillfälliga filsystemet i containerinstansen. Det här tillståndet går förlorat när containerinstansen återanvänds, till exempel när modulavbildningsversionen eller createOptions uppdateras.

För produktionsscenarier använder du en beständig lagringsplats i värdfilsystemet för att lagra systemmodultillstånd. Detta förbättrar lösningens robusthet och garantier för leverans av molnmeddelanden.

Så här konfigurerar du systemmoduler för att använda beständig lagring:

  1. För både IoT Edge-hubben och IoT Edge-agenten lägger du till en miljövariabel med namnet StorageFolder som pekar på en katalog i modulen.

  2. För både IoT Edge-hubben och IoT Edge-agenten lägger du till bindningar för att ansluta en lokal katalog på värddatorn till en katalog i modulen. Till exempel:

    Skärmbild som visar hur du lägger till skapa alternativ och miljövariabler för lokal lagring.

    Ersätt <HostStoragePath> och <ModuleStoragePath> med din värd- och modullagringssökväg. Båda värdena måste vara en absolut sökväg och <HostStoragePath> måste finnas.

Du kan konfigurera den lokala lagringen direkt i distributionsmanifestet. Om du till exempel vill mappa följande lagringssökvägar:

Modul Värdlagringssökväg Modullagringssökväg
edgeAgent /srv/edgeAgent /tmp/edgeAgent
edgeHub /srv/edgeHub /tmp/edgeHub

Distributionsmanifestet skulle likna följande:

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

Kommentar

Om du använder en snapinstallation kontrollerar du att du väljer en värdlagringssökväg som är tillgänglig för snappar. Exempel: $HOME/snap/azure-iot-edge/current/modules/

Automatisk hantering av värdsystembehörigheter

I version 1.4 och senare behöver du inte manuellt ange ägarskap eller behörigheter för värdlagring som StorageFolderstöder . Behörigheter och ägarskap hanteras automatiskt av systemmodulerna under starten.

Kommentar

Automatisk behörighetshantering av värdbunden lagring gäller endast för systemmoduler, IoT Edge-agent och Edge-hubb. För anpassade moduler krävs manuell hantering av behörigheter och ägarskap för bunden värdlagring om containern för den anpassade modulen inte körs som root användare.

Om din anpassade modul kräver åtkomst till beständig lagring i värdfilsystemet använder du modulens alternativ för att skapa för att binda en lagringsmapp i modulcontainern till en mapp på värddatorn. Till exempel:

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

Ersätt <HostStoragePath> och <ModuleStoragePath> med din värd- och modullagringssökväg. Båda värdena måste vara en absolut sökväg. Se Docker Engine Mount-specifikationen för alternativinformation.

Behörigheter för värdsystem

Kontrollera att den användarprofil som modulen använder har nödvändiga läs-, skriv- och körningsbehörigheter till värdsystemkatalogen. Som standard körs containrar som root användare som redan har de behörigheter som krävs. Men modulens Dockerfile kan ange användning av en icke-rotanvändare, i vilket fall värdlagringsbehörigheter måste konfigureras manuellt.

Det finns flera sätt att hantera katalogbehörigheter på Linux-system, inklusive att använda chown för att ändra katalogägaren och sedan chmod ändra behörigheterna. Om du till exempel vill tillåta värdlagringsåtkomst till en modul som körs som icke-rotanvändar-ID 1000 använder du följande kommandon:

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

Krypterade data i modullagring

När moduler anropar IoT Edge-daemonens arbetsbelastnings-API för att kryptera data härleds krypteringsnyckeln med hjälp av modul-ID:t och modulens generations-ID. Ett generations-ID används för att skydda hemligheter om en modul tas bort från distributionen och sedan distribueras en annan modul med samma modul-ID senare till samma enhet. Du kan visa en moduls generations-ID med hjälp av Azure CLI-kommandot az iot hub module-identity show.

Om du vill dela filer mellan moduler mellan generationer får de inte innehålla några hemligheter, annars dekrypteras de.

Nästa steg

Ett ytterligare exempel på hur du kommer åt värdlagring från en modul finns i Lagra data vid gränsen med Azure Blob Storage på IoT Edge.