Fluxos de dispositivos do Hub IoT (visualização)
Os fluxos de dispositivo do Hub IoT do Azure facilitam a criação de túneis TCP bidirecionais seguros para vários cenários de comunicação entre nuvem e dispositivo. 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. Essa configuração, descrita no diagrama, é 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 têm 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. Esse fator 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. 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 ao ID do dispositivo, em vez do endereço IP do dispositivo. Este 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 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 representadas na figura:
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.
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).
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 de fluxo. Essa lógica pode ser específica para o cenário do aplicativo. Se o dispositivo rejeitar a solicitação de fluxo, o Hub IoT informará o serviço de acordo; caso contrário, serão realizadas as seguintes etapas.
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 e as credenciais a serem usadas para autenticar são fornecidas ao dispositivo pelo Hub IoT como parte da solicitação enviada na etapa 3.
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 e 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). Essa ação pode ocorrer voluntariamente, fechando o WebSocket no dispositivo ou nos programas de serviço, ou involuntariamente se um 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 é (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. Essa situação 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:
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 dispositivos.
{
"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. Essa abordagem pode ser útil na solução de problemas de cenários.
Siga estas etapas 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:
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.
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.
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 aparecem na
AzureDiagnostics
tabela e têmCategory=DeviceStreams
. Pode levar vários minutos após uma operação para que os logs apareçam na tabela.Como mostrado aqui, 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.