Ge Azure IoT Edge-moduler åtkomst till en enhets lokala lagring
Gäller för: IoT Edge 1.5 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:
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.
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:
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 StorageFolder
stö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.
Länka modullagring till enhetslagring för anpassade moduler
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.