Opracowywanie własnych modułów usługi IoT Edge

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

Połączenie do centrum usługi IoT Edge z modułu

Połączenie do lokalnego 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 Połączenie do 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:

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źniaczki

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

Omówienie i używanie zestawów SDK usługi Azure IoT Hub