Compartilhar via


Fluxos de dispositivos do Hub IoT (versão prévia)

Os fluxos de dispositivos do Hub IoT do Azure facilitam a criação de túneis seguros de TCP bidirecionais para vários cenários de comunicação da nuvem para dispositivo. Um ponto de extremidade de streaming do Hub IoT intermedia os fluxos dos dispositivos, atuando como um proxy entre seu dispositivo e os pontos de extremidade de serviço. Essa configuração, ilustrada no diagrama a seguir, é especialmente útil quando os dispositivos estão atrás de um firewall de rede ou residem dentro de uma rede privada. Como tal, os fluxos de dispositivo do Hub IoT ajudam atender à necessidade dos clientes de acessar dispositivos de IoT de forma amigável para o firewall e sem a necessidade de abrir completamente as portas de firewall de rede de entrada ou saída.

Diagrama que mostra uma visão geral dos fluxos de dispositivos do Hub IoT.

Dispositivos que usam os streams de dispositivo do Hub IoT podem permanecer seguros e só precisam abrir conexões TCP de saída para o ponto de extremidade de streaming do seu IoT Hub na porta 443. Quando um fluxo é estabelecido, os aplicativos do lado do serviço e do lado do dispositivo têm acesso via programação a um objeto de cliente do WebSocket para enviar e receber os bytes brutos entre si. As garantias de confiabilidade e ordenação fornecidas por esse túnel são similares àquelas oferecidas por TCP.

Benefícios

Os fluxos de dispositivos do Hub IoT oferecem os seguintes benefícios:

  • Conectividade segura amigável para o firewall: os dispositivos de IoT podem ser acessados a partir dos pontos de extremidade de serviço sem a abertura da porta de firewall de entrada no perímetro de rede ou dispositivo (somente a conectividade de saída para o Hub IoT é necessária na porta 443).

  • Autenticação: os lados do dispositivo e do serviço do túnel precisam se autenticar com o Hub IoT usando suas credenciais correspondentes.

  • Criptografia: por padrão, os fluxos de dispositivos do Hub IoT usam conexões de TLS. Esse fator garante que o tráfego seja sempre criptografado, independentemente se o aplicativo usa a criptografia ou não.

  • Simplicidade de conectividade: em muitos casos, o uso de fluxos de dispositivos elimina a necessidade de uma configuração complexa de redes virtuais privadas para habilitar a conectividade a dispositivos de IoT.

  • Compatibilidade com a pilha TCP/IP: os fluxos de dispositivos do Hub IoT podem acomodar o tráfego de aplicativo de TCP/IP. Essa abordagem significa que uma ampla gama de protocolos proprietários e baseados em padrões pode usar esse recurso.

  • Facilidade de uso em configurações de rede privada: o serviço pode se comunicar com um dispositivo, fazendo referência à identificação do dispositivo, em vez do endereço IP do dispositivo. Esse fato é útil em situações em que um dispositivo está localizado dentro de uma rede privada e tem um endereço IP privado, ou seu endereço IP é atribuído dinamicamente e é desconhecido para o lado do serviço.

Fluxos de trabalho do fluxo de dispositivo

Um fluxo de dispositivo é iniciado quando o serviço solicita uma conexão a um dispositivo, fornecendo sua identificação do dispositivo. Esse fluxo de trabalho se encaixa especialmente no modelo de comunicação cliente/servidor, incluindo SSH e RDP, em que um usuário pretende se conectar remotamente ao servidor SSH ou RDP em execução no dispositivo usando um programa de cliente SSH ou RDP.

O processo de criação de fluxo de dispositivo envolve uma negociação entre o dispositivo, o serviço e os pontos de extremidade de streaming e principais do hub IoT. Enquanto os pontos de extremidade principais do Hub IoT orquestram a criação de um fluxo de dispositivo, o ponto de extremidade de streaming manipula o tráfego que flui entre o serviço e o dispositivo.

Fluxo de criação do fluxo de dispositivo

A criação programática de um fluxo de dispositivo usando o SDK envolve as etapas a seguir, que também são descritas na figura:

Diagrama que mostra as etapas do processo de handshake para um stream de dispositivo do Hub IoT.

  1. O aplicativo do dispositivo registra um retorno de chamada com antecedência para ser notificado sobre quando um novo fluxo de dispositivo é iniciado no dispositivo. Esta etapa geralmente ocorre quando o dispositivo é inicializado e se conecta ao Hub IoT.

  2. O programa do lado do serviço inicia um fluxo de dispositivo quando necessário, fornecendo a identificação do dispositivo (não o endereço IP).

  3. O Hub IoT notifica o programa do lado do dispositivo, invocando o retorno de chamada registrado na etapa 1. O dispositivo pode aceitar ou rejeitar a solicitação de iniciação do fluxo. Essa lógica pode ser específica para o cenário do seu aplicativo. Se o dispositivo rejeitar a solicitação de fluxo, o Hub IoT informará o serviço adequadamente; caso contrário, as etapas a seguir ocorrerão.

  4. O dispositivo cria uma conexão TCP segura de saída para o ponto de extremidade de streaming pela porta 443 e atualiza a conexão para um WebSocket. A URL do ponto de extremidade e as credenciais a serem usadas para autenticar são fornecidas para o dispositivo pelo Hub IoT como parte da solicitação enviada na etapa 3.

  5. O serviço é notificado do resultado do dispositivo que aceita o fluxo e cria seu próprio cliente WebSocket para o ponto de extremidade de streaming. Da mesma forma, ele recebe as informações de autenticação e a URL do ponto de extremidade de streaming do Hub IoT.

No processo de handshake descrito anteriormente:

  • O processo de aperto de mãos deve ser concluído dentro de 60 segundos (etapas 2 a 5); caso contrário, o aperto de mãos falhará por tempo limite e o serviço será notificado adequadamente.

  • Após a conclusão do fluxo de criação do stream descrito anteriormente, o ponto de extremidade de streaming atua como proxy e transfere o tráfego entre o serviço e o dispositivo por meio de seus respectivos WebSockets.

  • O dispositivo e o serviço precisam de conectividade de saída para os pontos de extremidade principais do Hub IoT, assim como do ponto de extremidade de streaming pela porta 443. A URL desses pontos de extremidade está disponível na guia Visão geral no portal do Hub IoT.

  • As garantias de confiabilidade e ordenação de um fluxo estabelecido são similares àquelas oferecidas por TCP.

  • Todas as conexões com o Hub IoT e seu ponto de extremidade de streaming usam TLS e são criptografadas.

Fluxo de término

Um fluxo estabelecido termina quando qualquer uma das conexões TCP ao gateway é desconectada (pelo serviço ou pelo dispositivo). Essa ação pode ocorrer voluntariamente fechando o WebSocket em programas do dispositivo ou do serviço ou, involuntariamente, se ocorrer uma falha de tempo de conexão ultrapassado ou do processo. Após o término da conexão do dispositivo ou do serviço ao ponto de extremidade de streaming, a outra conexão TCP também será encerrada (de forma forçada) e o serviço e o dispositivo serão responsáveis por recriar o fluxo, se necessário.

Requisitos de conectividade

Os lados do serviço e do dispositivo de um fluxo de dispositivo devem ser capazes de estabelecer conexões de TLS habilitado ao Hub IoT e ao seu ponto de extremidade de streaming. Essa situação requer conectividade de saída pela porta 443 para esses pontos de extremidade. O nome do host associado ao endpoint de streaming pode ser encontrado no painel de visão geral do seu hub IoT no portal do Azure, como mostrado na captura de tela a seguir.

Captura de tela do painel de trabalho de um hub IoT no portal do Azure, destacando o nome do host para endpoints de streaming de dispositivos.

Como alternativa, as informações de pontos de extremidade podem ser recuperadas usando a CLI do Azure na seção de propriedades do hub, especificamente, as chaves property.hostname e property.deviceStreams.

az iot hub devicestream show --name <YourIoTHubName>

A saída é um objeto JSON com todos os pontos de extremidade que seu dispositivo e serviço do hub possam precisar para se conectarem a fim de estabelecer um fluxo de dispositivo.

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

Observação

Instale a CLI do Azure versão 2.73.0 ou mais recente. Você pode baixar a versão mais recente na página Instalar CLI do Azure.

Permitir conectividade de saída para os pontos de extremidade de streaming do dispositivo

Como mencionado no início deste artigo, seu dispositivo cria uma conexão de saída para o ponto de extremidade de streaming do Hub IoT durante o processo de inicialização dos streams do dispositivo. Os firewalls no dispositivo ou em sua rede devem permitir a conectividade de saída para o gateway de streaming pela porta 443 (observe que a comunicação ocorre em uma conexão WebSocket que é criptografada usando TLS).

O nome do host associado ao endpoint de streaming pode ser encontrado no painel de visão geral do seu hub IoT no portal do Azure, como mostrado na captura de tela a seguir.

Captura de tela do painel de trabalho de um hub IoT no portal do Azure, destacando o nome do host para endpoints de streaming de dispositivos.

Como alternativa, você pode encontrar essas informações usando a CLI do Azure, conforme mostrado no exemplo a seguir:

az iot hub devicestream show --name <YourIoTHubName>

Observação

Instale a CLI do Azure versão 2.73.0 ou mais recente. Você pode baixar a versão mais recente na página Instalar CLI do Azure.

Solucionar problemas por meio de logs de recursos de fluxos de dispositivos

Você pode configurar o Azure Monitor para coletar os logs de recursos dos streams de dispositivos emitidos pelo seu Hub IoT. Essa abordagem pode ser útil em cenários de solução de problemas.

Siga estas etapas para criar uma configuração de diagnóstico para enviar logs de recursos do Device Streams do hub IoT para os Logs do Azure Monitor.

  1. No portal do Azure, navegue até o seu hub IoT. No painel esquerdo, em Monitoramento, selecione Configurações de diagnóstico. Em seguida, selecione Adicionar configuração de diagnóstico.

  2. Forneça um nome para a configuração de diagnóstico e selecione Fluxos de Dispositivo (Versão Prévia) na lista de logs. Em seguida, selecione Enviar para o workspace do Log Analytics. Você é orientado a escolher um workspace existente do Log Analytics ou criar um novo.

    Captura de tela que mostra o painel Configurações de Diagnóstico no portal do Azure, destacando as configurações dos logs de recursos de Fluxos de Dispositivo.

  3. Depois de criar uma configuração de diagnóstico para enviar os logs de recursos do Device Streams para um workspace do Log Analytics, você poderá acessar os logs selecionando Logs em Monitoramento no painel esquerdo do hub IoT no portal do Azure. Os logs de recursos do Device Streams aparecem na tabela AzureDiagnostics e contêm Category=DeviceStreams. Pode levar vários minutos após uma operação para que os logs apareçam na tabela.

    Conforme mostrado aqui, a identidade do dispositivo de destino e o resultado da operação também estão disponíveis nos logs.

    Captura de tela que mostra os logs do AzureDiagnostic para um hub IoT, realçando a identidade, a operação e os resultados de uma entrada de log de recursos do Device Streams.

Para saber mais sobre como usar o Azure Monitor com o Hub IoT, consulte Monitorar o Hub IoT do Azure. Para obter informações sobre todos os logs de recursos, métricas e tabelas disponíveis para o Hub IoT, consulte a referência de dados de monitoramento do Hub IoT do Azure.

Disponibilidade regional

Durante a versão prévia pública, os fluxos de dispositivos do Hub IoT estão disponíveis nas regiões EUA Central, Leste dos EUA EUAP, Norte da Europa e Sudeste da Ásia. Certifique-se de criar seu hub em uma dessas regiões.

Disponibilidade do SDK

Dois lados de cada fluxo (no lado do dispositivo e do serviço) usam o SDK do Hub IoT para estabelecer o túnel. Durante a versão prévia pública, os clientes podem escolher entre as seguintes linguagens do SDK:

  • Os SDKs C e C# dão suporte a fluxos de dispositivo no lado do dispositivo.

  • Os SDKs Node.js e C# dão suporte a fluxos de dispositivo no lado do serviço.

Próximas etapas