Zapewnianie modułom dostępu do magazynu lokalnego na urządzeniu

Dotyczy:IoT Edge 1.4 checkmark IoT Edge 1.4

Ważne

Azure IoT Edge1.4 jest obsługiwaną wersją. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Moduły usługi IoT Edge mogą używać magazynu na urządzeniu usługi IoT Edge hosta w celu zwiększenia niezawodności, zwłaszcza w przypadku pracy w trybie offline.

Konfigurowanie modułów systemowych do używania magazynu trwałego

Domyślnie moduły systemowe usługi IoT Edge, agent usługi IoT Edge i centrum usługi IoT Edge przechowują stan w efemerycznym systemie plików swojego wystąpienia kontenera. Ten stan zostanie utracony w przypadku ponownego przetworzenia wystąpienia kontenera, na przykład po zaktualizowaniu wersji obrazu modułu lub polecenia createOptions.

W przypadku scenariuszy produkcyjnych użyj trwałej lokalizacji przechowywania w systemie plików hosta do przechowywania stanu modułu systemu. W ten sposób zwiększa się niezawodność rozwiązania i gwarancje dostarczania komunikatów w chmurze.

Aby skonfigurować moduły systemowe do używania magazynu trwałego:

  1. W przypadku zarówno centrum usługi IoT Edge, jak i agenta usługi IoT Edge dodaj zmienną środowiskową o nazwie StorageFolder wskazującą katalog w module.

  2. W przypadku zarówno centrum usługi IoT Edge, jak i agenta usługi IoT Edge dodaj powiązania, aby połączyć katalog lokalny na maszynie hosta z katalogiem w module. Na przykład:

    Screenshot that shows how to add create options and environment variables for local storage.

    Zastąp <HostStoragePath> wartości i <ModuleStoragePath> ścieżką magazynu hosta i modułu. Obie wartości muszą być ścieżką bezwzględną i <HostStoragePath> muszą istnieć.

Magazyn lokalny można skonfigurować bezpośrednio w manifeście wdrożenia. Jeśli na przykład chcesz zamapować następujące ścieżki magazynu:

Moduł Ścieżka magazynu hosta Ścieżka magazynu modułu
edgeAgent /srv/edgeAgent /tmp/edgeAgent
edgeHub /srv/edgeHub /tmp/edgeHub

Manifest wdrożenia będzie podobny do następującego:

"systemModules": {
    "edgeAgent": {
        "env": {
            "StorageFolder": {
                "value": "/tmp/edgeAgent"
            }
        },
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-agent:1.4",
            "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.4",
            "createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeHub:/tmp/edgeHub\"],\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
        },
        "status": "running",
        "type": "docker"
    }
}

Uwaga

Jeśli używasz instalacji przystawki, upewnij się, że wybrano ścieżkę magazynu hosta, która jest dostępna dla przystawek. Na przykład $HOME/snap/azure-iot-edge/current/modules/.

Automatyczne zarządzanie uprawnieniami systemu hosta

W wersji 1.4 i nowszej nie ma potrzeby ręcznego ustawiania własności ani uprawnień dla magazynu hostów kopii zapasowej StorageFolder. Uprawnienia i własność są automatycznie zarządzane przez moduły systemowe podczas uruchamiania.

Uwaga

Automatyczne zarządzanie uprawnieniami magazynu powiązanego z hostem dotyczy tylko modułów systemowych, agenta usługi IoT Edge i centrum usługi Edge. W przypadku modułów niestandardowych wymagane jest ręczne zarządzanie uprawnieniami i własnością powiązanego magazynu hostów, jeśli niestandardowy kontener modułu nie jest uruchomiony jako root użytkownik.

Jeśli moduł niestandardowy wymaga dostępu do magazynu trwałego w systemie plików hosta, użyj opcji tworzenia modułu, aby powiązać folder magazynu w kontenerze modułu z folderem na maszynie hosta. Na przykład:

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

Zastąp <HostStoragePath> wartości i <ModuleStoragePath> ścieżką magazynu hosta i modułu. Obie wartości muszą być ścieżką bezwzględną. Aby uzyskać szczegółowe informacje na temat opcji, zapoznaj się ze specyfikacją instalacji aparatu platformy Docker.

Uprawnienia systemu hosta

Upewnij się, że profil użytkownika używany przez moduł ma wymagane uprawnienia do odczytu, zapisu i wykonywania w katalogu systemowym hosta. Domyślnie kontenery są uruchamiane jako root użytkownik, który ma już wymagane uprawnienia. Jednak plik Dockerfile modułu może określać użycie użytkownika innego niż główny, w którym przypadku należy ręcznie skonfigurować uprawnienia magazynu hosta.

Istnieje kilka sposobów zarządzania uprawnieniami katalogu w systemach Linux, w tym używanie chown do zmiany właściciela katalogu, a następnie chmod zmiany uprawnień. Aby na przykład zezwolić na dostęp magazynu hosta do modułu uruchomionego jako identyfikator użytkownika innego niż główny 1000, użyj następujących poleceń:

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

Zaszyfrowane dane w magazynie modułów

Gdy moduły wywołują interfejs API obciążenia demona usługi IoT Edge w celu szyfrowania danych, klucz szyfrowania jest uzyskiwany przy użyciu identyfikatora modułu i identyfikatora generowania modułu. Identyfikator generacji służy do ochrony wpisów tajnych, jeśli moduł zostanie usunięty z wdrożenia, a następnie inny moduł o tym samym identyfikatorze modułu zostanie później wdrożony na tym samym urządzeniu. Identyfikator generacji modułu można wyświetlić przy użyciu polecenia interfejsu wiersza polecenia platformy Azure az iot hub module-identity show.

Jeśli chcesz udostępniać pliki między modułami między pokoleniami, nie mogą zawierać żadnych wpisów tajnych lub nie będą one odszyfrowywane.

Następne kroki

Aby uzyskać dodatkowy przykład uzyskiwania dostępu do magazynu hostów z modułu, zobacz Przechowywanie danych na brzegu za pomocą usługi Azure Blob Storage w usłudze IoT Edge.