Fluxos de dispositivos do Hub IoT (visualização)

Os fluxos de dispositivos do Hub IoT do Azure facilitam a criação de túneis TCP bidirecionais seguros para uma variedade de cenários de comunicação entre a nuvem. Um fluxo de dispositivo é mediado por um ponto de extremidade de streaming do Hub IoT que atua como um proxy entre seu dispositivo e os pontos de extremidade de serviço. Esta configuração, descrita no diagrama abaixo, é 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 dispositivos do Hub IoT ajudam a atender à necessidade dos clientes de alcançar dispositivos IoT de uma maneira amigável ao firewall e sem a necessidade de abrir amplamente as portas de firewall de rede de entrada ou saída.

Usando fluxos de dispositivos do Hub IoT, os dispositivos permanecem seguros e só precisarão abrir conexões TCP de saída para o ponto de extremidade de streaming do hub IoT pela porta 443. Depois que um fluxo é estabelecido, os aplicativos do lado do serviço e do lado do dispositivo terão acesso programático a um objeto de cliente WebSocket para enviar e receber bytes brutos uns para os outros. A fiabilidade e as garantias de encomenda fornecidas por este túnel estão ao mesmo nível do TCP.

Benefícios

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

  • Conectividade segura compatível com firewall: os dispositivos IoT podem ser acessados a partir de pontos de extremidade de serviço sem a abertura da porta de firewall de entrada no dispositivo ou perímetros de rede (apenas a conectividade de saída para o Hub IoT é necessária pela 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 habilitadas para TLS. Isso garante que o tráfego seja sempre criptografado, independentemente de o aplicativo usar criptografia ou não.

  • Simplicidade de conectividade: Em muitos casos, o uso de fluxos de dispositivos elimina a necessidade de configuração complexa de Redes Privadas Virtuais para permitir a conectividade com dispositivos IoT.

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

  • Facilidade de uso em configurações de rede privada: o serviço pode se comunicar com um dispositivo fazendo referência ao ID do dispositivo, em vez do endereço IP do dispositivo. Isso é ú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 de fluxo de dispositivos

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

O processo de criação do fluxo de dispositivos envolve uma negociação entre o dispositivo, o serviço, o principal do hub IoT e os pontos de extremidade de streaming. Enquanto o ponto de extremidade principal do hub IoT orquestra a criação de um fluxo de dispositivo, o ponto de extremidade de streaming lida com o tráfego que flui entre o serviço e o dispositivo.

Fluxo de criação de fluxo de dispositivos

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

  1. O aplicativo de dispositivo registra um retorno de chamada com antecedência para ser notificado quando um novo fluxo de dispositivo é iniciado para o dispositivo. Essa etapa normalmente 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 o ID 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 início de fluxo. Essa lógica pode ser específica para o cenário do aplicativo. Se a solicitação de fluxo for rejeitada pelo dispositivo, o Hub IoT informará o serviço de acordo; caso contrário, seguem-se os passos abaixo.

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

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

No processo de aperto de mão acima:

  • O processo de handshake deve ser concluído dentro de 60 segundos (etapas 2 a 5), caso contrário, o handshake falharia com um tempo limite e o serviço será notificado de acordo.

  • Após a conclusão do fluxo de criação de fluxo acima, o ponto de extremidade de streaming atuará como um proxy e transferirá o tráfego entre o serviço e o dispositivo através de seus respetivos WebSockets.

  • O dispositivo e o serviço precisam de conectividade de saída para o ponto de extremidade principal do Hub IoT, bem como para o 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.

  • A confiabilidade e as garantias de ordenação de um fluxo estabelecido estão no mesmo nível do TCP.

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

Fluxo de terminação

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

Requisitos de conectividade

Tanto o dispositivo quanto o lado de serviço de um fluxo de dispositivo devem ser capazes de estabelecer conexões habilitadas para TLS com o Hub IoT e seu ponto de extremidade de streaming. Isso requer conectividade de saída pela porta 443 para esses pontos de extremidade. O nome do host associado a esses pontos de extremidade pode ser encontrado na guia Visão geral do Hub IoT, conforme mostrado na figura abaixo:

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 property.hostname e property.deviceStreams chaves.

az iot hub devicestream show --name <YourIoTHubName>

A saída é um objeto JSON de todos os pontos de extremidade aos quais o dispositivo e o serviço do hub podem precisar se conectar para estabelecer um fluxo de dispositivo.

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

Nota

Certifique-se de ter instalado a CLI do Azure versão 2.0.57 ou mais recente. Você pode baixar a versão mais recente na página Instalar a CLI do Azure.

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

Conforme mencionado no início deste artigo, seu dispositivo cria uma conexão de saída com o ponto de extremidade de streaming do Hub IoT durante o processo de iniciação de fluxos de dispositivo. Seus 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 por meio de uma conexão WebSocket criptografada usando TLS).

O nome do host do ponto de extremidade de streaming do dispositivo pode ser encontrado no portal do Hub IoT do Azure na guia Visão geral.

Como alternativa, você pode encontrar essas informações usando a CLI do Azure:

az iot hub devicestream show --name <YourIoTHubName>

Nota

Certifique-se de ter instalado a CLI do Azure versão 2.0.57 ou mais recente. Você pode baixar a versão mais recente na página Instalar a CLI do Azure.

Solucionar problemas por meio de logs de recursos do Device Streams

Você pode configurar o Azure Monitor para coletar os logs de recursos para fluxos de dispositivos emitidos pelo seu Hub IoT. Isso pode ser muito útil na solução de problemas de cenários.

Siga as etapas abaixo para criar uma configuração de diagnóstico para enviar logs de fluxos de dispositivo para seu Hub IoT para os Logs do Azure Monitor:

  1. No portal do Azure, navegue até 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 sua configuração de diagnóstico e selecione DeviceStreams na lista de logs . Em seguida, selecione Enviar para o Log Analytics. Você será orientado a escolher um espaço de trabalho existente do Log Analytics ou criar um novo.

    Enable device streams logs

  3. Depois de criar uma configuração de diagnóstico para enviar os logs de fluxos do dispositivo para um espaço de trabalho do Log Analytics, você pode acessar os logs selecionando Logs em Monitoramento no painel esquerdo do hub IoT no portal do Azure. Os logs de fluxos de dispositivos aparecerão na AzureDiagnostics tabela e terão Category=DeviceStreams. Lembre-se de que pode levar vários minutos após uma operação para que os logs apareçam na tabela.

    Como mostrado abaixo, a identidade do dispositivo alvo e o resultado da operação também estão disponíveis nos logs.

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

Disponibilidade regional

Durante a visualização pública, os fluxos de dispositivos do Hub IoT estão disponíveis nas regiões Central dos EUA, Leste dos EUA EUAP, Norte da Europa e Sudeste Asiático. 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 visualização pública, os clientes podem escolher entre os seguintes idiomas do SDK:

  • O dispositivo de suporte do SDK C e C# flui no lado do dispositivo.

  • O NodeJS e o C# SDK suportam fluxos de dispositivos no lado do serviço.

Próximos passos

Use os links abaixo para saber mais sobre fluxos de dispositivos.