Opracowywanie własnych modułów usługi IoT Edge
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 Azure IoT Edge mogą łączyć się z innymi usługami platformy Azure i współtworzyć większy potok danych w chmurze. W tym artykule opisano sposób tworzenia modułów do komunikowania się ze środowiskiem uruchomieniowym usługi IoT Edge i usługą IoT Hub, a tym samym resztą chmury platformy Azure.
Środowisko uruchomieniowe usługi IoT Edge
Środowisko uruchomieniowe usługi IoT Edge zapewnia infrastrukturę do integracji funkcji wielu modułów IoT Edge i wdrożenia ich na urządzeniach usługi IoT Edge. Dowolny program można spakować jako moduł usługi IoT Edge. Aby w pełni wykorzystać funkcje komunikacji i zarządzania usługi IoT Edge, program uruchomiony w module może używać zestawu SDK urządzeń usługi Azure IoT do łączenia się z lokalnym centrum usługi IoT Edge.
Pakowanie programu jako modułu usługi IoT Edge
Aby wdrożyć program na urządzeniu usługi IoT Edge, należy go najpierw konteneryzować i uruchomić za pomocą aparatu zgodnego z platformą Docker. Usługa IoT Edge używa rozwiązania Moby, projektu open source stojącego za platformą Docker jako aparatu zgodnego z platformą Docker. Te same parametry, które są używane do korzystania z platformy Docker, można przekazać do modułów usługi IoT Edge. Aby uzyskać więcej informacji, zobacz How to configure container create options for IoT Edge modules (Jak skonfigurować opcje tworzenia kontenera dla modułów usługi IoT Edge).
Korzystanie z centrum usługi IoT Edge
Centrum usługi IoT Edge udostępnia dwie główne funkcje: serwer proxy do usługi IoT Hub i komunikację lokalną.
Nawiązywanie połączenia z centrum usługi IoT Edge z poziomu modułu
Nawiązywanie połączenia z lokalnym centrum usługi IoT Edge z modułu obejmuje te same kroki połączenia co w przypadku wszystkich klientów. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z centrum usługi IoT Edge.
Aby użyć routingu usługi IoT Edge za pośrednictwem protokołu AMQP, możesz użyć elementu ModuleClient z zestawu Azure IoT SDK. Utwórz wystąpienie ModuleClient w celu połączenia modułu z centrum usługi IoT Edge uruchomionego na urządzeniu, podobnie jak w przypadku łączenia urządzeń IoT z usługą IoT Hub przez wystąpienia DeviceClient. Aby uzyskać więcej informacji na temat klasy ModuleClient i jej metod komunikacji, zobacz dokumentację interfejsu API dla preferowanego języka zestawu SDK: C#, C, Python, Java lub Node.js.
Typy pierwotne usługi IoT Hub
Usługa IoT Hub widzi wystąpienie modułu jako podobne do urządzenia. Wystąpienie modułu może:
- Wysyłanie komunikatów z urządzenia do chmury
- Odbieranie metod bezpośrednich przeznaczonych specjalnie dla jego tożsamości
- Mają reprezentację bliźniaczą modułu, która jest odrębna i odizolowana od bliźniaczej reprezentacji urządzenia oraz innych bliźniaczych reprezentacji modułów tego urządzenia
Obecnie moduły nie mogą odbierać komunikatów z chmury do urządzenia ani używać funkcji przekazywania plików.
Podczas pisania modułu można nawiązać połączenie z centrum usługi IoT Edge i używać elementów pierwotnych usługi IoT Hub, tak jak w przypadku korzystania z usługi IoT Hub z aplikacją urządzenia. Jedyną różnicą między modułami usługi IoT Edge i aplikacjami urządzeń IoT jest to, że w przypadku modułów należy odwołać się do tożsamości modułu zamiast tożsamości urządzenia.
Komunikaty z urządzenia do chmury
Moduł usługi IoT Edge może wysyłać komunikaty do chmury za pośrednictwem centrum usługi IoT Edge, które działa jako lokalny broker i propaguje komunikaty do chmury. Aby umożliwić złożone przetwarzanie komunikatów z urządzenia do chmury, moduł usługi IoT Edge może przechwytywać i przetwarzać komunikaty wysyłane przez inne moduły lub urządzenia do lokalnego centrum usługi IoT Edge. Następnie moduł usługi IoT Edge wyśle nowe komunikaty z przetworzonymi danymi. Łańcuchy modułów usługi IoT Edge można więc tworzyć w celu tworzenia potoków przetwarzania lokalnego.
Aby wysyłać komunikaty telemetryczne z urządzenia do chmury przy użyciu tras:
- Użyj klasy Client modułu zestawu AZURE IoT SDK. Każdy moduł ma punkty końcowe wejściowe i wyjściowe .
- Użyj metody wysyłania komunikatów z klasy klienta modułu, aby wysyłać komunikaty w wyjściowym punkcie końcowym modułu.
- Skonfiguruj trasę w module edgeHub urządzenia, aby wysłać ten wyjściowy punkt końcowy do usługi IoT Hub.
Aby przetworzyć komunikaty przy użyciu tras:
- Skonfiguruj trasę do wysyłania komunikatów pochodzących z innego punktu końcowego (modułu lub urządzenia) do wejściowego punktu końcowego modułu.
- Nasłuchiwanie komunikatów w wejściowym punkcie końcowym modułu. Za każdym razem, gdy pojawia się nowy komunikat, funkcja wywołania zwrotnego jest wyzwalana przez zestaw SDK usługi Azure IoT.
- Przetwórz komunikat za pomocą tej funkcji wywołania zwrotnego i (opcjonalnie) wyślij nowe komunikaty w kolejce punktu końcowego modułu.
Uwaga
Aby dowiedzieć się więcej na temat deklarowania trasy, zobacz Dowiedz się, jak wdrażać moduły i ustanawiać trasy w usłudze IoT Edge
Bliźnięta
Bliźniacze reprezentacje są jednym z elementów pierwotnych udostępnianych przez usługę IoT Hub. Istnieją dokumenty JSON, które przechowują informacje o stanie, w tym metadane, konfiguracje i warunki. Każdy moduł lub urządzenie ma własną reprezentację bliźniacze.
Aby uzyskać bliźniacze reprezentacje modułu za pomocą zestawu SDK usługi Azure IoT, wywołaj metodę
ModuleClient.getTwin
.Aby otrzymać poprawkę bliźniaczej reprezentacji modułu za pomocą zestawu SDK usługi Azure IoT, zaimplementuj funkcję wywołania zwrotnego i zarejestruj ją
ModuleClient.moduleTwinCallback
przy użyciu metody z zestawu SDK usługi Azure IoT, aby funkcja wywołania zwrotnego była wyzwalana za każdym razem, gdy pojawia się poprawka bliźniaczej reprezentacji.
Odbieranie metod bezpośrednich
Aby otrzymać metodę bezpośrednią z zestawem SDK usługi Azure IoT, zaimplementuj funkcję wywołania zwrotnego i zarejestruj ją ModuleClient.methodCallback
przy użyciu metody z zestawu SDK usługi Azure IoT, aby funkcja wywołania zwrotnego była wyzwalana za każdym razem, gdy metoda bezpośrednia zostanie wyzwolona.
Obsługa języka i architektury
Usługa IoT Edge obsługuje wiele systemów operacyjnych, architektur urządzeń i języków programowania, dzięki czemu można utworzyć scenariusz, który odpowiada Twoim potrzebom. W tej sekcji opisano opcje tworzenia niestandardowych modułów usługi IoT Edge. Aby dowiedzieć się więcej na temat obsługi narzędzi i wymagań dla każdego języka, zobacz Przygotowywanie środowiska projektowego i testowego dla usługi IoT Edge.
Linux
W przypadku wszystkich języków w poniższej tabeli usługa IoT Edge obsługuje programowanie dla kontenerów AMD64 i większości kontenerów arm64 linux. Istnieje również obsługa kontenerów Debian 11 ARM32.
Języka programowania | Narzędzia programistyczne |
---|---|
C | Visual Studio Code Visual Studio 2019/2022 |
C# | Visual Studio Code Visual Studio 2019/2022 |
Java | Visual Studio Code |
Node.js | Visual Studio Code |
Python | Visual Studio Code |
Uwaga
W przypadku kompilacji międzyplatformowej, takiej jak kompilowanie modułu usługi ARM32 IoT Edge na maszynie dewelopera AMD64, należy skonfigurować maszynę deweloperską do kompilowania kodu w architekturze urządzenia docelowego zgodnego z modułem usługi IoT Edge. Aby uzyskać więcej informacji na temat architektur urządzeń docelowych, zobacz Tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code.
Windows
Nie obsługujemy już kontenerów systemu Windows. Usługa IoT Edge dla systemu Linux w systemie Windows jest zalecanym sposobem uruchamiania usługi IoT Edge na urządzeniach z systemem Windows.
Zabezpieczenia modułu
Należy opracować moduły z uwzględnieniem zabezpieczeń. Aby dowiedzieć się więcej na temat zabezpieczania modułów, zobacz Zabezpieczenia platformy Docker.
Aby zwiększyć bezpieczeństwo modułu, usługa IoT Edge domyślnie wyłącza niektóre funkcje kontenera. W razie potrzeby można zastąpić wartości domyślne, aby zapewnić uprzywilejowane możliwości modułom.
Zezwalaj na uprawnienia platformy Docker z podwyższonym poziomem uprawnień
W pliku konfiguracji na urządzeniu usługi IoT Edge istnieje parametr o nazwie allow_elevated_docker_permissions
. Po ustawieniu wartości true ta flaga umożliwia flagę --privileged
i wszelkie dodatkowe możliwości zdefiniowane w CapAdd
polu Docker HostConfig w opcjach tworzenia kontenera.
Uwaga
Obecnie ta flaga jest domyślnie prawdziwa, co umożliwia wdrożeniem udzielanie uprzywilejowanych uprawnień modułom. Zalecamy ustawienie tej flagi na false w celu zwiększenia bezpieczeństwa urządzeń.
Włączanie CAP_CHOWN i CAP_SETUID
Możliwości platformy Docker CAP_CHOWN i CAP_SETUID są domyślnie wyłączone. Te możliwości mogą służyć do zapisywania w celu zabezpieczenia plików na urządzeniu hosta i potencjalnie uzyskania dostępu głównego.
Jeśli potrzebujesz tych możliwości, możesz ręcznie ponownie włączyć je przy użyciu funkcji CapADD w opcjach tworzenia kontenera.
Następne kroki
Przygotowywanie środowiska projektowego i testowego dla usługi IoT Edge
Tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code
Debugowanie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code