Entwickeln eigener IoT Edge-Module
Gilt für: IoT Edge 1.5 IoT Edge 1.4
Wichtig
IoT Edge 1.5 LTS und IoT Edge 1.4 LTS sind unterstützte Releases. Das Ende der Lebensdauer von IoT Edge 1.4 LTS wird am 12. November 2024 erreicht. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.
Azure IoT Edge-Module können mit anderen Azure-Diensten eine Verbindung herstellen und zu Ihrer größeren Clouddatenpipeline beitragen. In diesem Artikel wird beschrieben, wie Sie Module für die Kommunikation mit der IoT Edge-Runtime und IoT Hub und damit mit dem Rest der Azure-Cloud entwickeln können.
IoT Edge-Laufzeitumgebung
Die IoT Edge-Laufzeit bietet die Infrastruktur, um die Funktionalität mehrerer IoT Edge-Module zu integrieren und auf IoT Edge-Geräten bereitstellen. Jedes beliebige Programm kann als IoT Edge-Modul verpackt werden. Wenn Sie die Kommunikations- und Verwaltungsfunktionalitäten von IoT Edge umfassend nutzen möchten, kann ein in einem Modul ausgeführtes Programm über das Azure IoT-Geräte-SDK eine Verbindung mit dem lokalen IoT Edge-Hub herstellen.
Verpacken des Programms als IoT Edge-Modul
Zum Bereitstellen des Programms auf einem IoT Edge-Gerät muss es zunächst in einen Container integriert und mit einem Docker-kompatiblen Modul ausgeführt werden. IoT Edge verwendet Moby, das Open Source-Projekt hinter Docker, als Docker-kompatibles Modul. Die gleichen Parameter, die Sie für Docker verwenden, können auch an Ihre IoT Edge-Module übermittelt werden. Weitere Informationen finden Sie unter Konfigurieren von Erstellungsoptionen für Container für IoT Edge-Module.
Verwenden des IoT Edge-Hubs
Der IoT Edge-Hub bietet zwei Hauptfunktionalitäten: einen Proxy für IoT Hub und lokale Kommunikation.
Herstellen einer Verbindung von einem Modul mit dem IoT Edge Hub
Das Herstellen einer Verbindung mit dem lokalen IoT Edge-Hub von einem Modul umfasst die gleichen Verbindungsschritte wie bei allen anderen Clients. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit dem IoT Edge-Hub.
Wenn Sie IoT Edge-Routing über AMQP nutzen möchten, können Sie dafür den ModuleClient aus dem Azure IoT SDK verwenden. Erstellen Sie eine ModuleClient-Instanz, um Ihr Modul mit dem IoT Edge-Hub zu verbinden, der auf dem Gerät ausgeführt wird. Dies erfolgt auf ähnliche Weise wie DeviceClient-Instanzen eine Verbindung zwischen IoT-Geräten und IoT Hub herstellen. Weitere Informationen zur ModuleClient-Klasse und ihre Kommunikationsmethoden finden Sie in der API-Referenz für Ihre bevorzugte SDK-Sprache: C#, C, Python, Java, oder Node.js.
IoT Hub-Primitive
IoT Hub sieht eine Modulinstanz ähnlich wie ein Gerät. Folgendes kann eine Modulinstanz:
- D2C-Nachrichten senden.
- Direkte Methoden empfangen, die speziell an ihre Identität gerichtet sind.
- Einen Modulzwilling haben, der vom Gerätezwilling und den anderen Modulzwillingen des Geräts getrennt und isoliert ist.
Derzeit können Module keine Cloud-zu-Gerät-Nachrichten empfangen oder Dateien hochladen.
Wenn Sie ein Modul schreiben, können Sie eine Verbindung mit dem IoT Edge-Hub herstellen und IoT Hub-Primitive wie bei der Verwendung von IoT Hub mit einer Geräteanwendung verwenden. Der einzige Unterschied zwischen IoT Edge-Modulen und IoT-Geräteanwendungen besteht darin, dass Sie bei Modulen auf die Modulidentität (statt auf die Geräteidentität) verweisen müssen.
D2C-Nachrichten
Ein IoT Edge-Modul kann Nachrichten über den IoT Edge-Hub, der als lokaler Broker fungiert und Nachrichten an die Cloud weitergibt, an die Cloud senden. Um eine komplexe Verarbeitung von Gerät-zu-Cloud-Nachrichten zu ermöglichen, kann ein IoT Edge-Modul Nachrichten abfangen und verarbeiten, die von anderen Modulen oder Geräten an den lokalen IoT Edge-Hub gesendet werden. Das IoT Edge-Modul sendet dann neue Nachrichten mit verarbeiteten Daten. So können Ketten von IoT Edge-Modulen gebildet werden, um lokale Verarbeitungspipelines zu erstellen.
So senden Sie Telemetrienachrichten über Gerät-zu-Cloud mithilfe von Routen:
- Verwenden Sie die Modulclientklasse des Azure IoT SDK. Jedes Modul verfügt über Eingabe- und Ausgabeendpunkte.
- Verwenden Sie eine Methode zum Senden von Nachrichten aus Ihrer Modulclientklasse, um Nachrichten an den Ausgabeendpunkt Ihres Moduls zu senden.
- Richten Sie eine Route im EdgeHub-Modul Ihres Geräts ein, um diesen Ausgabeendpunkt an IoT Hub zu senden.
So verarbeiten Sie Nachrichten mithilfe von Routen:
- Richten Sie eine Route zum Senden von Nachrichten von einem anderen Endpunkt (Modul oder Gerät) an den Eingabeendpunkt Ihres Moduls ein.
- Überwachen Sie Nachrichten auf dem Eingabeendpunkt Ihres Moduls. Jedes Mal, wenn eine neue Nachricht zurückgesendet wird, wird eine Rückruffunktion durch das Azure IoT SDK ausgelöst.
- Verarbeiten Sie Ihre Nachricht mit dieser Rückruffunktion, und senden Sie (optional) neue Nachrichten in die Warteschlange des Modulendpunkts.
Hinweis
Weitere Informationen zum Deklarieren einer Route finden Sie unter Bereitstellen von Modulen und Einrichten von Routen in IoT Edge.
Zwillinge
Zwillinge sind eine der Primitiven, die von IoT Hub bereitgestellt werden. Diese sind JSON-Dokumente, in denen Statusinformationen gespeichert werden, z. B. Metadaten, Konfigurationen und Bedingungen. Jedes Modul oder Gerät verfügt über einen eigenen Zwilling.
Um einen Modulzwilling mit dem Azure IoT SDK abzurufen, rufen Sie die
ModuleClient.getTwin
-Methode auf.Um einen Modulzwillingspatch mit dem Azure IoT SDK zu empfangen, implementieren Sie eine Rückruffunktion, und registrieren Sie sie mit der
ModuleClient.moduleTwinCallback
-Methode aus dem Azure IoT SDK, damit Ihre Rückruffunktion bei jedem Eingang eines Zwillingspatches ausgelöst wird.
Empfangen von direkten Methoden
Wenn Sie eine direkte Methode mit dem Azure IoT SDK empfangen möchten, implementieren Sie eine Rückruffunktion, und registrieren Sie sie mit der ModuleClient.methodCallback
-Methode aus dem Azure IoT SDK, damit Ihre Rückruffunktion bei jedem Eingang einer direkten Methode ausgelöst wird.
Unterstützung für Sprache und Architektur
IoT Edge unterstützt mehrere Betriebssysteme, Gerätearchitekturen und Entwicklungssprachen, sodass Sie das Szenario erstellen können, das Ihren Anforderungen entspricht. Erfahren Sie in diesem Abschnitt, welche Optionen Ihnen zum Entwickeln von benutzerdefinierten IOT Edge-Modulen zur Verfügung stehen. Weitere Informationen zur Toolunterstützung und Anforderungen für die einzelnen Sprachen finden Sie unter Vorbereiten Ihrer Entwicklungs- und Testumgebung für IOT Edge.
Linux
Bei allen Sprachen in der folgenden Tabelle unterstützt IoT Edge die Entwicklung für AMD64- und die meisten ARM64-Linux-Container. Es gibt auch Unterstützung für Debian 11 ARM32-Container.
Programmiersprache | Entwicklungstools |
---|---|
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 |
Hinweis
Für die plattformübergreifende Kompilierung, z. B. das Kompilieren eines ARM32-IoT-Edge-Moduls auf einem AMD64-Entwicklungscomputer, müssen Sie den Entwicklungscomputer so konfigurieren, dass Code auf der Zielgerätearchitektur kompiliert wird, die dem IoT-Edge-Modul entspricht. Weitere Informationen zu Zielgerätearchitekturen finden Sie unter Entwickeln von Azure IoT Edge-Modulen mit Visual Studio Code.
Windows
Windows-Container werden nicht mehr unterstützt. Für die Ausführung von IoT Edge auf Windows-Geräten wird die Verwendung von IoT Edge für Linux unter Windows empfohlen.
Modulsicherheit
Sie sollten Ihre Module mit Blick auf die Sicherheit entwickeln. Weitere Informationen zum Schützen Ihrer Module finden Sie unter Docker-Sicherheit.
Um die Modulsicherheit zu verbessern, hat IoT Edge einige Containerfunktionen standardmäßig deaktiviert. Sie können die Standardwerte überschreiben, um Ihren Modulen bei Bedarf privilegierte Funktionen zur Verfügung zu stellen.
Zulassen von gesteigerten Docker-Berechtigungen
In der Datei „config“ auf einem IoT Edge-Gerät gibt es einen Parameter mit dem Namen allow_elevated_docker_permissions
. Wenn es auf true gesetzt ist, lässt dieses Flag das Flag --privileged
und alle zusätzlichen Funktionen zu, die Sie im Feld CapAdd
der Docker HostConfig in denOptionen zum Erstellen von Containern definieren.
Hinweis
Derzeit ist dieses Flag standardmäßig true, wodurch Bereitstellungen privilegierte Berechtigungen für Module erteilen können. Es wird empfohlen, dieses Flag auf FALSE zu setzen, um die Gerätesicherheit zu verbessern.
Aktivieren von CAP_CHOWN und CAP_SETUID
Die Docker-Funktionen Docker-CAP_CHOWN und CAP_SETUID sind standardmäßig deaktiviert. Diese Funktionen können verwendet werden, um auf gesicherten Dateien auf dem Hostgerät zu schreiben und potenziell Stammzugriff zu erhalten.
Wenn Sie diese Funktionen benötigen, können Sie sie mithilfe von CapADD in den Optionen zum Erstellen von Containern manuell erneut aktivieren.
Nächste Schritte
Vorbereiten Ihrer Entwicklungs- und Testumgebung für IoT Edge
Entwickeln von Azure IoT Edge-Modulen mithilfe von Visual Studio Code
Debuggen von Azure IoT Edge-Modulen mithilfe von Visual Studio Code