Gewähren von Azure IoT Edge-Modulen Zugriff auf den lokalen Speicher eines Geräts
Gilt für: IoT Edge 1.5 IoT Edge 1.4
Wichtig
IoT Edge 1.5 LTS und IoT Edge 1.4 LTS sind unterstützte Releases. Das Ende der Lebensdauer von IoT Edge 1.4 LTS wird am 12. November 2024 erreicht. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.
IoT Edge-Module können Speicher auf dem IoT Edge-Hostgerät selbst verwenden, um insbesondere beim Offlinebetrieb mehr Zuverlässigkeit zu erzielen.
Konfigurieren von Systemmodulen zur Verwendung von beständigem Speicher
Standardmäßig speichern IoT Edge-Systemmodule – IoT Edge-Agent und IoT Edge-Hub – ihren Zustand im kurzlebigen Dateisystem ihrer Containerinstanz. Dieser Zustand geht verloren, wenn die Containerinstanz neu gestartet wird, z. B. beim Aktualisieren von Modulimageversion oder createOptions.
Verwenden Sie in Produktionsszenarien einen persistenten Speicherort im Hostdateisystem, um den Systemmodulzustand zu speichern. Dadurch wird die Zuverlässigkeit der Lösung und die garantierte Cloudnachrichtenübermittlung verbessert.
So konfigurieren Sie Systemmodule zur Verwendung von persistentem Speicher:
Fügen Sie sowohl für den IoT Edge-Hub als auch für den IoT Edge-Agent eine Umgebungsvariable namens StorageFolder hinzu, die auf ein Verzeichnis im Modul verweist.
Fügen Sie sowohl für den IoT Edge-Hub als auch für den IoT Edge-Agent Bindungen hinzu, um ein lokales Verzeichnis auf dem Hostcomputer mit einem Verzeichnis im Modul zu verbinden. Zum Beispiel:
Ersetzen Sie
<HostStoragePath>
und<ModuleStoragePath>
durch Ihren Host- und Modulspeicherpfad. Beide Werte müssen absolute Pfade sein, und<HostStoragePath>
muss vorhanden sein.
Sie können den lokalen Speicher auch direkt im Bereitstellungsmanifest konfigurieren. Angenommen, Sie möchten die folgenden Speicherpfade zuordnen:
Modul | Hostspeicherpfad | Modulspeicherpfad |
---|---|---|
edgeAgent | /srv/edgeAgent | /tmp/edgeAgent |
edgeHub | /srv/edgeHub | /tmp/edgeHub |
Dann würde Ihr Bereitstellungsmanifest Folgendem ähneln:
"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"
}
}
Hinweis
Wenn Sie eine Snap-Installation verwenden, stellen Sie sicher, dass Sie einen Hostspeicherpfad auswählen, auf den die Snaps zugreifen können. Beispiel: $HOME/snap/azure-iot-edge/current/modules/
.
Automatische Verwaltung von Hostsystemberechtigungen
In Version 1.4 und höher müssen der Besitz oder die Berechtigungen für den Hostspeicher für den StorageFolder
nicht manuell festgelegt werden. Berechtigungen und Besitz werden beim Start automatisch durch die Systemmodule verwaltet.
Hinweis
Die automatische Berechtigungsverwaltung des hostgebundenen Speichers ist nur für die Systemmodule relevant: IoT Edge-Agent und IoT Edge-Hub. Bei benutzerdefinierten Modulen müssen Berechtigungen und Besitz für den gebundenen Hostspeicher manuell verwaltet werden, wenn der benutzerdefinierte Modulcontainer nicht als root
-Benutzer ausgeführt wird.
Verknüpfen des Modulspeichers mit dem Gerätespeicher bei benutzerdefinierten Modulen
Wenn Ihr benutzerdefiniertes Modul Zugriff auf persistenten Speicher im Hostdateisystem erfordert, verwenden Sie die Erstellungsoptionen des Moduls, um einen Speicherordner im Modulcontainer an einen Ordner auf dem Hostcomputer zu binden. Zum Beispiel:
{
"HostConfig": {
"Mounts": [
{
"Target": "<ModuleStoragePath>",
"Source": "<HostStoragePath>",
"Type": "bind",
"ReadOnly": false
}
]
}
}
Ersetzen Sie <HostStoragePath>
und <ModuleStoragePath>
durch den Speicherpfad für Ihren Host und Ihr Modul; beide Werte müssen ein absoluter Pfad sein. Informationen zu den Optionen finden Sie in der Docker Engine-Spezifikation für „Mount“.
Hostsystemberechtigungen
Stellen Sie sicher, dass das Benutzerprofil, das von Ihrem Modul verwendet wird, über die erforderlichen Lese-, Schreib- und Ausführungsberechtigungen für das Hostsystemverzeichnis verfügt. Standardmäßig werden Container als root
-Benutzer ausgeführt, der bereits über die erforderlichen Berechtigungen verfügt. Das Dockerfile Ihres Moduls kann jedoch die Verwendung eines Nicht-Stammbenutzers angeben – in diesem Fall müssen die Hostspeicherberechtigungen manuell konfiguriert werden.
Es gibt mehrere Möglichkeiten, Verzeichnisberechtigungen auf Linux-Systemen zu verwalten, einschließlich der Verwendung von chown
zum Ändern des Verzeichnisinhabers und dann chmod
zum Ändern der Berechtigungen. Verwenden Sie z. B. die folgenden Befehle, um den Hostspeicherzugriff auf ein Modul zuzulassen, das als Nicht-Stammbenutzer mit der ID 1000 ausgeführt wird:
sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>
Verschlüsselte Daten im Modulspeicher
Wenn Module die Workload-API des IoT Edge-Dämons aufrufen, um Daten zu verschlüsseln, wird der Verschlüsselungsschlüssel unter Verwendung der Modul-ID und der Generations-ID des Moduls abgeleitet. Eine Generations-ID wird verwendet, um Geheimnisse zu schützen, wenn ein Modul aus der Bereitstellung entfernt wird und dann später ein anderes Modul mit derselben Modul-ID auf demselben Gerät bereitgestellt wird. Sie können die Generations-ID eines Moduls mit dem Azure CLI-Befehl az iot hub module-identity show anzeigen.
Wenn Sie Dateien zwischen Modulen über Generationen hinweg austauschen möchten, dürfen sie keine Geheimnisse enthalten, da sie sonst nicht entschlüsselt werden können.
Nächste Schritte
Ein weiteres Beispiel für den Zugriff auf den Hostspeicher von einem Modul aus finden Sie unter Speichern von Daten im Edgebereich mit Azure Blob Storage in IoT Edge.