Device Streams di Hub IoT (anteprima)

I flussi dispositivo dell'hub IoT di Azure facilitano la creazione di tunnel TCP bidirezionali sicuri per un'ampia gamma di scenari di comunicazione da cloud a dispositivo. Un flusso di dispositivo viene filtrato da un endpoint di streaming dell'hub IoT che funge da proxy tra gli endpoint del servizio e del dispositivo. Questa configurazione, illustrata nel diagramma riportato di seguito, è particolarmente utile quando i dispositivi sono protetti da un firewall di rete o si trovano all'interno di una rete privata. Di conseguenza, i flussi dispositivo dell'hub IoT rispondono alla necessità dei clienti di raggiungere i dispositivi IoT in modo adatto al firewall e senza la necessità di aprire ampiamente le porte del firewall di rete in ingresso o in uscita.

Usando i flussi dispositivo dell'hub IoT, i dispositivi rimarranno protetti e sarà sufficiente aprire le connessioni TCP in uscita per l'endpoint di streaming dell'hub IoT tramite la porta 443. Dopo aver stabilito un flusso, le applicazioni di lato servizio e di lato dispositivo avranno ognuna accesso a livello di codice a un oggetto client di WebSocket per inviare e ricevere byte non elaborati tra di loro. Le garanzie di affidabilità e ordinamento fornite da questo tunnel sono paragonabili a TCP.

Vantaggi

I flussi dispositivo dell'hub IoT offrono i vantaggi seguenti:

  • Connettività sicura compatibile con il firewall: i dispositivi IoT possono essere raggiunti dagli endpoint di servizio senza aprire la porta del firewall in ingresso nel dispositivo o nei perimetri di rete (solo la connettività in uscita alle hub IoT è necessaria sulla porta 443).

  • Autenticazione: sia i lati del dispositivo che del servizio del tunnel devono eseguire l'autenticazione con hub IoT usando le credenziali corrispondenti.

  • Crittografia: per impostazione predefinita, hub IoT flussi del dispositivo usano connessioni abilitate per TLS. Ciò garantisce che il traffico sia sempre crittografato indipendentemente dal fatto che l'applicazione usi o no la crittografia.

  • Semplicità di connettività: in molti casi, l'uso di flussi di dispositivi elimina la necessità di una configurazione complessa di reti private virtuali per abilitare la connettività ai dispositivi IoT.

  • Compatibilità con lo stack TCP/IP: hub IoT flussi del dispositivo possono supportare il traffico dell'applicazione TCP/IP. Ciò significa che una vasta gamma di protocolli proprietari e di protocolli basati su standard può sfruttare questa funzionalità.

  • Facilità d'uso nelle configurazioni di rete privata: il servizio può comunicare con un dispositivo facendo riferimento all'ID dispositivo anziché all'indirizzo IP del dispositivo. Ciò è utile quando un dispositivo si trova all'interno di una rete privata e dispone di un indirizzo IP privato oppure quando l'indirizzo IP del dispositivo viene assegnato in modo dinamico e non è noto al lato servizio.

Flussi di lavoro del flusso del dispositivo

Un flusso dispositivo viene avviato quando il servizio richiede la connessione a un dispositivo fornendo il relativo ID dispositivo. Questo flusso di lavoro è adatto a un modello di comunicazione client/server, tra cui RDP e SSH in cui un utente vuole connettersi in remoto al server SSH o RDP in esecuzione nel dispositivo usando un programma client SSH o RDP.

Il processo di creazione del flusso dispositivo comporta una negoziazione tra il dispositivo, il servizio e gli endpoint principali e di streaming dell'hub IoT. Mentre l'endpoint principale dell'hub IoT gestisce la creazione di un flusso dispositivo, l'endpoint di streaming gestisce i flussi di traffico tra il servizio e il dispositivo.

Flusso di creazione del flusso dispositivo

La creazione a livello di codice di un flusso dispositivo tramite SDK include i passaggi seguenti, illustrati anche nella figura riportata di seguito:

  1. L'applicazione del dispositivo registra anticipatamente un callback di cui ricevere notifica quando viene avviato un nuovo flusso dispositivo nel dispositivo. In genere questo passaggio si verifica quando il dispositivo viene avviato e si connette all'hub IoT.

  2. Il programma del lato servizio avvia un flusso dispositivo quando necessario fornendo l'ID dispositivo (non l'indirizzo IP).

  3. L'hub IoT informa il programma del lato dispositivo richiamando il callback registrato nel passaggio 1. Il dispositivo può accettare o rifiutare la richiesta di avvio flusso. Questa logica può essere specifica per lo scenario dell'applicazione. Se la richiesta di streaming viene rifiutata dal dispositivo, l'hub IoT informa il servizio di conseguenza; in caso contrario, attenersi alla procedura seguente.

  4. Il dispositivo crea una connessione TCP in uscita sicura per l'endpoint di streaming tramite la porta 443 e consente di aggiornare la connessione a un WebSocket. L'URL dell'endpoint di streaming, così come le credenziali da usare per l'autenticazione, vengono entrambe fornite dall'hub IoT al dispositivo come parte della richiesta inviata nel passaggio 3.

  5. Il servizio riceve una notifica dell'accettazione del flusso da parte del dispositivo e procede alla creazione di un proprio client WebSocket per l'endpoint di streaming. In modo analogo riceve le informazioni sull'URL dell'endpoint di streaming e sull'autenticazione dall'hub IoT.

Nel processo di handshake precedente:

  • Il processo di handshake deve essere completato entro 60 secondi (passaggi da 2 a 5); in caso contrario l'handshake avrà esito negativo con un timeout e il servizio verrà informato di conseguenza.

  • Dopo il completamento del flusso di creazione di flusso precedente, l'endpoint di streaming funge da proxy e trasferisce il traffico tra il servizio e il dispositivo tramite i rispettivi WebSocket.

  • Il dispositivo e il servizio necessitano entrambi di connettività in uscita per l'endpoint principale dell'hub IoT, così come per l'endpoint di streaming tramite la porta 443. L'URL di questi endpoint è disponibile nella scheda Panoramica del portale dell'hub IoT.

  • Le garanzie di affidabilità e ordinamento di un flusso stabilito sono paragonabili a TCP.

  • Tutte le connessioni all'hub IoT e agli endpoint di streaming usano TLS e sono crittografate.

Flusso di terminazione

Un flusso stabilito termina quando una delle connessioni TCP al gateway viene disconnessa (dal servizio o dal dispositivo). Ciò può avvenire volontariamente chiudendo il WebSocket nei programmi del servizio o del dispositivo oppure involontariamente in caso di errore di processo o di timeout della connettività di rete. Al termine della connessione del dispositivo o del servizio all'endpoint di streaming, anche l'altra connessione TCP verrà terminata (in modo forzato) e il servizio e il dispositivo saranno responsabili di ricreare il flusso, se necessario.

Requisiti di connettività

Sia il lato dispositivo che il lato servizio di un flusso dispositivo devono essere in grado di stabilire connessioni abilitate per TLS con l'hub IoT e il relativo endpoint di streaming. Ciò richiede la connettività in uscita sulla porta 443 con questi endpoint. Il nome host associato a questi endpoint si può trovare nella scheda Panoramica dell'hub IoT, come illustrato nella figura seguente:

In alternativa, le informazioni sugli endpoint possono essere recuperate usando l'interfaccia della riga di comando di Azure nella sezione delle proprietà dell'hub, in particolare property.hostname e property.deviceStreams chiavi.

az iot hub devicestream show --name <YourIoTHubName>

L'output è un oggetto JSON di tutti gli endpoint a cui il servizio e il dispositivo dell'hub potrebbero dover connettersi per stabilire un flusso di dispositivo.

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

Nota

Verificare che sia installata l'interfaccia della riga di comando di Azure versione 2.0.57 o successiva. È possibile scaricare la versione più recente dalla pagina Installa interfaccia della riga di comando di Azure.

Consentire la connettività in uscita agli endpoint di streaming dei dispositivi

Come accennato all'inizio di questo articolo, il dispositivo crea una connessione in uscita a hub IoT endpoint di streaming durante il processo di avvio dei flussi del dispositivo. I firewall nel dispositivo o nella relativa rete devono consentire la connettività in uscita al gateway di streaming tramite la porta 443 (la comunicazione avviene su una connessione WebSocket crittografata con TLS).

Il nome host dell'endpoint di streaming del dispositivo è disponibile nel portale di hub IoT di Azure nella scheda Panoramica.

In alternativa, è possibile trovare queste informazioni tramite l'interfaccia della riga di comando di Azure:

az iot hub devicestream show --name <YourIoTHubName>

Nota

Verificare che sia installata l'interfaccia della riga di comando di Azure versione 2.0.57 o successiva. È possibile scaricare la versione più recente dalla pagina Installa interfaccia della riga di comando di Azure.

Risolvere i problemi tramite i log delle risorse di Flussi dispositivo

È possibile configurare Monitoraggio di Azure per raccogliere i log delle risorse per i flussi dei dispositivi generati dal hub IoT. Ciò può essere molto utile in scenari di risoluzione dei problemi.

Seguire questa procedura per creare un'impostazione di diagnostica per inviare i log dei flussi dei dispositivi per il hub IoT ai log di Monitoraggio di Azure:

  1. In portale di Azure passare all'hub IoT. Nel riquadro sinistro, in Monitoraggio, selezionare Impostazioni di diagnostica. Quindi selezionare Aggiungi impostazione di diagnostica.

  2. Specificare un nome per l'impostazione di diagnostica e selezionare Dispositivo Flussi dall'elenco dei log. Selezionare quindi Invia a Log Analytics. Si verrà guidati a scegliere un'area di lavoro Log Analytics esistente o crearne una nuova.

    Enable device streams logs

  3. Dopo aver creato un'impostazione di diagnostica per inviare i log dei flussi dei dispositivi a un'area di lavoro Log Analytics, è possibile accedere ai log selezionando Log in Monitoraggio nel riquadro sinistro dell'hub IoT in portale di Azure. I log dei flussi del dispositivo verranno visualizzati nella AzureDiagnostics tabella e avranno Category=DeviceStreams. Tenere presente che potrebbero essere necessari alcuni minuti dopo un'operazione per la visualizzazione dei log nella tabella.

    Come illustrato di seguito, l'identità del dispositivo di destinazione e il risultato dell'operazione sono disponibili anche nei log.

Per altre informazioni sull'uso di Monitoraggio di Azure con hub IoT, vedere Monitorare hub IoT. Per informazioni su tutti i log delle risorse, le metriche e le tabelle disponibili per hub IoT, vedere Monitoraggio hub IoT di Azure informazioni di riferimento sui dati.

Disponibilità a livello di area

Durante l'anteprima pubblica, hub IoT flussi dei dispositivi sono disponibili nelle aree Stati Uniti centrali, Stati Uniti orientali EUAP, Europa settentrionale e Asia sud-orientale. Assicurarsi quindi che l'hub venga creato in una di queste aree.

Disponibilità dell'SDK

I due lati di ogni flusso (lato servizio e lato dispositivo) usano l'SDK dell'hub IoT per stabilire il tunnel. Durante l'anteprima pubblica, i clienti possono scegliere i linguaggi SDK seguenti:

  • i linguaggi SDK C e C# supportano i flussi dispositivo sul lato dispositivo.

  • L'SDK C# e Node.js supportano i flussi dispositivo sul lato servizio.

Passaggi successivi

Usare i collegamenti seguenti per altre informazioni sui flussi dei dispositivi.