Modules toegang geven tot de lokale opslag van een apparaat

Van toepassing op:IoT Edge 1.5-vinkje IoT Edge 1.5 Vinkje voor IoT Edge 1.4 IoT Edge 1.4

Belangrijk

IoT Edge 1.5 LTS en IoT Edge 1.4 LTS worden ondersteund releases. IoT Edge 1.4 LTS eindigt op 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:

  1. 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.

  2. 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:

    Schermopname van het toevoegen van opties en omgevingsvariabelen voor lokale opslag.

    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 StorageFolderhandmatig 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.

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.