Przyznawanie modułom usługi Azure IoT Edge dostępu do magazynu lokalnego urządzenia
Dotyczy: IoT Edge 1.5 IoT Edge 1.4
Ważne
Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 12 listopada 2024 r. 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:
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.
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:
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.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"
}
}
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.
Łączenie magazynu modułów z magazynem urządzeń dla modułów niestandardowych
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.