Entwickeln eigener IoT Edge-Module

Gilt für:IoT Edge 1.4 checkmark IoT Edge 1.4

Wichtig

IoT Edge Version 1.4 wird unterstützt. 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 Standard Funktionen: 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 den zugehörigen 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. Eine Modulinstanz kann:

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 mit Modulen auf die Modulidentität anstelle der 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 die komplexe Verarbeitung von Geräte-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äte-zu-Cloud-Nachrichten 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 Ihrer Modulendpunktwarteschlange.

Hinweis

Weitere Informationen zum Deklarieren einer Route finden Sie unter Informationen zum 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.

  • Rufen Sie die ModuleClient.getTwin Methode auf, um einen Modul-Twin mit dem Azure IoT SDK abzurufen.

  • Um einen Modul-Twin-Patch mit dem Azure IoT SDK zu erhalten, implementieren Sie eine Rückruffunktion, und registrieren Sie sie mit der ModuleClient.moduleTwinCallback Methode aus dem Azure IoT SDK, damit Ihre Rückruffunktion jedes Mal ausgelöst wird, wenn ein Twin-Patch eingeht.

Empfangen von direkten Methoden

Um eine direkte Methode mit dem Azure IoT SDK zu empfangen, implementieren Sie eine Rückruffunktion, und registrieren Sie sie mit der ModuleClient.methodCallback Methode aus dem Azure IoT SDK, damit Ihre Rückruffunktion jedes Mal ausgelöst wird, wenn eine direkte Methode eintritt.

Unterstützung für Sprache und Architektur

IoT Edge unterstützt mehrere Betriebssysteme, Gerätearchitekturen und Entwicklungssprachen, damit 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

Für alle 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 dieses Kennzeichen auf "true" festgelegt ist, können Sie das --privileged Kennzeichen und alle zusätzlichen Funktionen, die Sie im CapAdd Feld der Docker HostConfig im Container definieren, Optionen erstellen.

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

Grundlegendes zu Azure IoT Hub-SDKs und deren Verwendung