Azure IoT Edge-modules toegang geven tot de lokale opslag van een apparaat
Van toepassing op: IoT Edge 1.5
Belangrijk
IoT Edge 1.5 LTS is de ondersteunde release. IoT Edge 1.4 LTS is het einde van de levensduur vanaf 12 november 2024. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.
IoT Edge-modules kunnen opslag op het IoT Edge-hostapparaat zelf gebruiken voor een betere betrouwbaarheid, met name wanneer u offline werkt.
Systeemmodules configureren voor het gebruik van permanente opslag
Standaard slaan IoT Edge-systeemmodules, IoT Edge-agent en IoT Edge-hub de status op in het tijdelijke bestandssysteem van hun containerinstantie. Deze status gaat verloren wanneer de containerinstantie wordt gerecycled, bijvoorbeeld wanneer de versie van de module-installatiekopieën of createOptions wordt bijgewerkt.
Voor productiescenario's gebruikt u een permanente opslaglocatie op het hostbestandssysteem om de systeemmodulestatus op te slaan. Hierdoor verbetert u de robuustheid van de oplossing en garanties voor cloudberichtenbezorging.
Systeemmodules instellen voor het gebruik van permanente opslag:
Voor zowel de IoT Edge-hub als de IoT Edge-agent voegt u een omgevingsvariabele met de naam StorageFolder toe die verwijst naar een map in de module.
Voor zowel de IoT Edge-hub als de IoT Edge-agent voegt u bindingen toe om een lokale map op de hostcomputer te verbinden met een map in de module. Voorbeeld:
Vervang
<HostStoragePath>
en door uw host- en<ModuleStoragePath>
moduleopslagpad. Beide waarden moeten een absoluut pad zijn en<HostStoragePath>
moeten bestaan.
U kunt de lokale opslag rechtstreeks in het implementatiemanifest configureren. Als u bijvoorbeeld de volgende opslagpaden wilt toewijzen:
Module | Hostopslagpad | Moduleopslagpad |
---|---|---|
edgeAgent | /srv/edgeAgent | /tmp/edgeAgent |
edgeHub | /srv/edgeHub | /tmp/edgeHub |
Uw implementatiemanifest ziet er ongeveer als volgt uit:
"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"
}
}
Notitie
Als u een module-installatie gebruikt, moet u ervoor zorgen dat u een hostopslagpad kiest dat toegankelijk is voor de modules. Bijvoorbeeld: $HOME/snap/azure-iot-edge/current/modules/
.
Automatisch beheer van hostsysteemmachtigingen
Op versie 1.4 en hoger is het niet nodig om het eigendom of de machtigingen voor hostopslag StorageFolder
handmatig in te stellen. Machtigingen en eigendom worden automatisch beheerd door de systeemmodules tijdens het opstarten.
Notitie
Automatisch machtigingsbeheer van hostgebonden opslag is alleen van toepassing op systeemmodules, IoT Edge-agent en Edge-hub. Voor aangepaste modules is handmatig beheer van machtigingen en eigendom van afhankelijke hostopslag vereist als de aangepaste modulecontainer niet als root
gebruiker wordt uitgevoerd.
Moduleopslag koppelen aan apparaatopslag voor aangepaste modules
Als voor uw aangepaste module toegang tot permanente opslag op het hostbestandssysteem is vereist, gebruikt u de opties voor het maken van de module om een opslagmap in de modulecontainer te binden aan een map op de hostcomputer. Voorbeeld:
{
"HostConfig": {
"Mounts": [
{
"Target": "<ModuleStoragePath>",
"Source": "<HostStoragePath>",
"Type": "bind",
"ReadOnly": false
}
]
}
}
Vervang <HostStoragePath>
en door uw host- en <ModuleStoragePath>
moduleopslagpad. Beide waarden moeten een absoluut pad zijn. Raadpleeg de koppelingsspecificatie van docker-engine voor optiedetails.
Hostsysteemmachtigingen
Zorg ervoor dat het gebruikersprofiel dat uw module gebruikt, over de vereiste lees-, schrijf- en uitvoermachtigingen beschikt voor de hostsysteemmap. Containers worden standaard uitgevoerd als root
gebruiker die al over de vereiste machtigingen beschikt. Maar het Dockerfile van uw module kan het gebruik van een niet-hoofdgebruiker opgeven. In dat geval moeten hostopslagmachtigingen handmatig worden geconfigureerd.
Er zijn verschillende manieren om mapmachtigingen op Linux-systemen te beheren, waaronder het gebruik chown
om de mapeigenaar te wijzigen en vervolgens chmod
de machtigingen te wijzigen. Als u bijvoorbeeld hostopslagtoegang wilt toestaan tot een module die wordt uitgevoerd als niet-hoofdgebruikers-id 1000, gebruikt u de volgende opdrachten:
sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>
Versleutelde gegevens in moduleopslag
Wanneer modules de workload-API van de IoT Edge-daemon aanroepen om gegevens te versleutelen, wordt de versleutelingssleutel afgeleid met behulp van de module-id en de generatie-id van de module. Een generatie-id wordt gebruikt om geheimen te beveiligen als een module wordt verwijderd uit de implementatie en vervolgens een andere module met dezelfde module-id later op hetzelfde apparaat wordt geïmplementeerd. U kunt de generatie-id van een module weergeven met behulp van de Azure CLI-opdracht az iot hub module-identity show.
Als u bestanden tussen generaties wilt delen tussen modules, mogen ze geen geheimen bevatten of worden ze niet ontsleuteld.
Volgende stappen
Zie Gegevens opslaan aan de rand met Azure Blob Storage in IoT Edge voor een extra voorbeeld van toegang tot hostopslag vanuit een module.