Freigeben über


IoT Hub-Gerätestreams (Vorschau)

Azure IoT Hub-Gerätestreams vereinfachen das Erstellen sicherer bidirektionaler TCP-Tunnel für eine Vielzahl von Szenarien mit Kommunikation zwischen Cloud und Gerät. Ein IoT Hub-Streaming-Endpunkt vermittelt Gerätestreams, die als Proxy zwischen Ihrem Gerät und Dienstendpunkten fungieren. Dieses Setup, dargestellt im folgenden Diagramm, ist besonders nützlich, wenn Sich Geräte hinter einer Netzwerkfirewall befinden oder sich in einem privaten Netzwerk befinden. So erfüllen IoT Hub-Gerätestreams die Kundenanforderung, IoT-Geräte firewallfreundlich zu erreichen, ohne Eingangs- und Ausgangsports der Netzwerkfirewall weit zu öffnen.

Diagramm, das eine Übersicht über IoT Hub-Gerätestreams zeigt.

Geräte, die IoT Hub-Gerätedatenströme verwenden, können sicher bleiben und müssen nur ausgehende TCP-Verbindungen mit dem Streamingendpunkt Ihres IoT-Hubs über Port 443 öffnen. Nachdem ein Stream eingerichtet wurde, besitzen die dienstseitigen und geräteseitigen Anwendungen jeweils programmgesteuerten Zugriff auf ein WebSocket-Clientobjekt, um sich gegenseitig Rohbytes zu senden bzw. diese zu empfangen. Die durch diesen Tunnel bereitgestellte Zuverlässigkeit und garantierte Reihenfolge ist gleichwertig mit TCP.

Vorteile

IoT Hub-Gerätestreams bieten folgende Vorteile:

  • Firewallfreundliche, sichere Konnektivität: IoT-Geräte können von Dienstendpunkten aus erreicht werden, ohne auf dem Gerät oder im Netzwerkumkreis einen Eingangsfirewallport zu öffnen (nur Ausgangskonnektivität zu IoT Hub über Port 443 ist erforderlich).

  • Authentifizierung: Sowohl die Geräte- als auch die Dienstseite des Tunnels müssen sich bei IoT Hub mit den entsprechenden Anmeldeinformationen authentifizieren.

  • Verschlüsselung: Standardmäßig verwenden IoT Hub-Gerätestreams TLS-aktivierte Verbindungen. Dadurch wird sichergestellt, dass der Datenverkehr immer verschlüsselt ist, unabhängig davon, ob die Anwendung Verschlüsselung verwendet.

  • Einfache Konnektivität: Durch die Verwendung von Gerätestreams ist zum Herstellen von Konnektivität mit IoT-Geräten in vielen Fällen kein komplexes Setup virtueller privater Netzwerke mehr erforderlich.

  • Kompatibilität mit TCP/IP-Stapel: IoT Hub-Gerätestreams können TCP/IP-Anwendungsdatenverkehr verarbeiten. Dieser Ansatz bedeutet, dass ein breites Spektrum an proprietären und standardsbasierten Protokollen dieses Feature nutzen kann.

  • Einfache Verwendung in privaten Netzwerksetups: Der Dienst kann mit einem Dienst kommunizieren, indem auf seine Geräte-ID verwiesen wird, anstatt auf die IP-Adresse des Geräts. Dies ist hilfreich in Situationen, in denen sich ein Gerät in einem privaten Netzwerk befindet und über eine private IP-Adresse verfügt oder die IP-Adresse dynamisch zugewiesen wird und der Dienstseite unbekannt ist.

Gerätestreamworkflows

Ein Gerätestream wird initiiert, wenn der Dienst eine Verbindung mit einem Gerät durch Bereitstellung der Geräte-ID anfordert. Dieser Workflow passt besonders gut zum Client/Server-Kommunikationsmodell, einschließlich SSH und RDP, in dem ein Benutzer über ein SSH- oder RDP-Clientprogramm eine Remoteverbindung mit dem SSH- oder RDP-Server herstellen möchte, der auf dem Gerät ausgeführt wird.

Der Erstellungsvorgang für Gerätestreams umfasst eine Aushandlung zwischen dem Gerät, dem Dienst, dem IoT Hub-Hauptendpunkt und den Streamingendpunkten. Während der IoT Hub-Hauptendpunkt die Erstellung eines Gerätestreams orchestriert, verarbeitet der Streamingendpunkt den Datenverkehr zwischen dem Dienst und dem Gerät.

Ablauf zur Gerätestreamerstellung

Die programmgesteuerte Erstellung eines Gerätestreams mit dem SDK umfasst die folgenden Schritte, die auch in der Abbildung dargestellt werden:

Diagramm, das die Schritte des Handshake-Prozesses für einen IoT Hub-Gerätestream zeigt.

  1. Die Geräteanwendung registriert einen Rückruf, um im Voraus benachrichtigt zu werden, wenn ein neuer Gerätestream zum Gerät initiiert wird. Dieser Schritt findet in der Regel statt, wenn das Gerät gestartet wird und eine Verbindung mit der IoT Hub-Instanz herstellt.

  2. Das dienstseitige Programm initiiert bei Bedarf einen Gerätestream durch Bereitstellen der Geräte-ID (nicht der IP-Adresse).

  3. IoT Hub benachrichtigt das dienstseitige Programm durch Aufrufen des in Schritt 1 registrierten Rückrufs. Das Gerät kann die Anforderung der Streaminitiierung annehmen oder ablehnen. Diese Logik kann speziell auf Ihr Anwendungsszenario zugeschnitten sein. Wenn das Gerät die Streamanforderung ablehnt, informiert IoT Hub den Dienst entsprechend. Andernfalls werden die folgenden Schritte ausgeführt.

  4. Das Gerät erstellt über Port 443 eine sichere ausgehende TCP-Verbindung mit dem Streamingendpunkt und führt ein Upgrade der Verbindung auf WebSocket durch. Die URL des Streamingendpunkts und die zum Authentifizieren verwendeten Anmeldeinformationen werden dem Gerät von IoT Hub im Rahmen der Anforderung bereitgestellt, die in Schritt 3 gesendet wurde.

  5. Der Dienst wird über das Ergebnis der Annahme des Streams durch das Gerät benachrichtigt und erstellt dann einen eigenen WebSocket-Client für den Streamingendpunkt. Auf ähnliche Weise empfängt er die Streamingendpunkt-URL und die Authentifizierungsinformationen von IoT Hub.

Im zuvor beschriebenen Handshake-Prozess:

  • Der Handshake-Prozess muss innerhalb von 60 Sekunden abgeschlossen werden (Schritt 2 bis 5), andernfalls schlägt der Handshake mit einem Timeout fehl, und der Dienst wird entsprechend benachrichtigt.

  • Nachdem der zuvor beschriebene Datenstromerstellungsablauf abgeschlossen wurde, fungiert der Streamingendpunkt als Proxy und überträgt den Datenverkehr zwischen dem Dienst und dem Gerät über ihre jeweiligen WebSockets.

  • Gerät und Dienst benötigen ausgehende Konnektivität über Port 443 mit dem wichtigsten IoT Hub-Endpunkt und dem Streamingendpunkt. Die URL dieser Endpunkte ist auf der Registerkarte Übersicht im IoT Hub-Portal verfügbar.

  • Die Zuverlässigkeit und garantierte Reihenfolge eines eingerichteten Streams ist gleichwertig mit TCP.

  • Alle Verbindungen mit IoT Hub und seinem Streaming-Endpunkt verwenden TLS und sind verschlüsselt.

Beendigungsablauf

Ein eingerichteter Stream wird beendet, wenn eine der TCP-Verbindungen mit dem Gateway (durch den Dienst oder das Gerät) getrennt wird. Dies kann durch Schließen des WebSocket im Geräte- oder Dienstprogramm geplant stattfinden oder unbeabsichtigt aufgrund eines Timeouts bei der Netzwerkkonnektivität oder eines Prozessfehlers. Bei Beendigung einer der Verbindungen (Gerät oder Dienst) mit dem Streamingendpunkt wird auch die andere TCP-Verbindung (zwangsweise) beendet, und Dienst und Gerät sind dafür zuständig, den Stream bei Bedarf neu zu erstellen.

Konnektivitätsanforderungen

Sowohl die Geräte- als auch die Dienstseite eines Gerätestreams muss dazu in der Lage sein, TLS-fähige Verbindungen mit IoT Hub und dem zugehörigen Streamingendpunkt herzustellen. Hierfür ist eine ausgehende Verbindung über Port 443 mit diesen Endpunkten erforderlich. Der dem Streamingendpunkt zugeordnete Hostname befindet sich im Übersichtsbereich Ihres IoT-Hubs im Azure-Portal, wie im folgenden Screenshot gezeigt.

Screenshot des Arbeitsbereichs für einen IoT-Hub im Azure-Portal, in dem der Hostname für Gerätestreamingendpunkte hervorgehoben wird.

Alternativ dazu können die Endpunktinformationen über die Azure CLI unter dem Abschnitt mit dem Hubeigenschaften abgerufen werden, insbesondere über die Schlüssel property.hostname und property.deviceStreams.

az iot hub devicestream show --name <YourIoTHubName>

Die Ausgabe ist ein JSON-Objekt aller Endpunkte, mit denen das Gerät und der Dienst Ihres Hubs eine Verbindung herstellen können muss, um einen Gerätestream einzurichten.

{
  "streamingEndpoints": [
    "https://<YourIoTHubName>.<region-stamp>.streams.azure-devices.net"
  ]
}

Hinweis

Stellen Sie sicher, dass Sie Azure CLI, Version 2.73.0 oder höher, installieren. Sie können die neueste Version über die Seite Azure CLI installieren herunterladen.

Erlauben ausgehender Konnektivität zu den Gerätestreamingendpunkten

Wie zu Beginn dieses Artikels erwähnt, erstellt Ihr Gerät während des Initiierungsprozesses eine ausgehende Verbindung mit dem IoT Hub-Streaming-Endpunkt. Die Firewalls auf dem Gerät oder im Netzwerk müssen ausgehende Konnektivität mit dem Streaminggateway über Port 443 zulassen. (Beachten Sie, dass die Kommunikation hierbei über eine WebSocket-Verbindung erfolgt, die per TLS verschlüsselt ist.)

Der dem Streamingendpunkt zugeordnete Hostname befindet sich im Übersichtsbereich Ihres IoT-Hubs im Azure-Portal, wie im folgenden Screenshot gezeigt.

Screenshot des Arbeitsbereichs für einen IoT-Hub im Azure-Portal, in dem der Hostname für Gerätestreamingendpunkte hervorgehoben wird.

Alternativ können Sie diese Informationen mithilfe der Azure CLI finden, wie im folgenden Beispiel gezeigt:

az iot hub devicestream show --name <YourIoTHubName>

Hinweis

Stellen Sie sicher, dass Sie Azure CLI, Version 2.73.0 oder höher, installieren. Sie können die neueste Version über die Seite Azure CLI installieren herunterladen.

Problembehandlung über Ressourcenprotokolle für Gerätestreams

Sie können Azure Monitor so einrichten, dass die Ressourcenprotokolle für Gerätedatenströme erfasst werden, die von Ihrem IoT-Hub ausgegeben werden. Dieser Ansatz kann in Problembehandlungsszenarien hilfreich sein.

Führen Sie die folgenden Schritte aus, um eine Diagnoseeinstellung zum Senden von Device Streams-Ressourcenprotokollen für Ihren IoT-Hub an Azure Monitor-Protokolle zu erstellen:

  1. Navigieren Sie im Azure-Portal zu Ihrem IoT-Hub. Wählen Sie im linken Bereich unter Überwachung die Option Diagnoseeinstellungen aus. Wählen Sie dann Diagnoseeinstellung hinzufügen aus.

  2. Geben Sie einen Namen für Ihre Diagnoseeinstellung an, und wählen Sie "Gerätedatenströme (Vorschau)" aus der Liste der Protokolle aus. Wählen Sie dann "An Log Analytics-Arbeitsbereich senden" aus. Sie werden geführt, um einen vorhandenen Log Analytics-Arbeitsbereich auszuwählen oder einen neuen zu erstellen.

    Screenshot des Bereichs

  3. Nachdem Sie eine Diagnoseeinstellung erstellt haben, um Ihre Device Streams-Ressourcenprotokolle an einen Log Analytics-Arbeitsbereich zu senden, können Sie auf die Protokolle zugreifen, indem Sie Protokolle unter Überwachung auf der linken Seite Ihres IoT-Hubs im Azure-Portal auswählen. Gerätestream-Ressourcenprotokolle werden in der Tabelle AzureDiagnostics mit Category=DeviceStreams aufgeführt. Es kann einige Minuten dauern, bis die Protokolle in der Tabelle angezeigt werden.

    Wie hier dargestellt, werden auch die Identität des Zielgeräts und das Ergebnis des Vorgangs in den Protokollen angegeben.

    Screenshot der AzureDiagnostic-Protokolle für einen IoT-Hub, der die Identität, den Vorgang und die Ergebnisse für einen Ressourcenprotokolleintrag für Gerätestreams hervorhebt.

Weitere Informationen zur Verwendung von Azure Monitor mit IoT Hub finden Sie unter "Überwachen von Azure IoT Hub". Informationen zu allen Ressourcenprotokollen, Metriken und Tabellen, die für IoT Hub verfügbar sind, finden Sie in der Azure IoT Hub-Überwachungsdatenreferenz.

Regionale Verfügbarkeit

Während der Public Preview sind IoT Hub-Gerätestreams in den Regionen „USA, Mitte“, „USA, Mitte (EUAP)“, „Europa, Norden“ und „Asien, Südosten“ verfügbar. Achten Sie darauf, dass Sie Ihren Hub in einer dieser Regionen erstellen.

SDK-Verfügbarkeit

Zwei Seiten jedes Streams (auf der Geräte- und der Dienstseite) verwenden das IoT Hub SDK zum Einrichten des Tunnels. Während der öffentlichen Vorschau können Kunden aus den folgenden SDK-Sprachen auswählen:

  • Die C- und C#-SDKs unterstützen Gerätedatenströme auf der Geräteseite.

  • Die Node.js- und C#-SDKs unterstützen Gerätestreams auf der Dienstseite.

Nächste Schritte