Tutorial: Criar uma hierarquia de dispositivos IoT Edge usando o IoT Edge para Linux no Windows
Aplica-se a: IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.
Você pode implantar nós do Azure IoT Edge em redes organizadas em camadas hierárquicas. Cada camada em uma hierarquia é um dispositivo de gateway que lida com mensagens e solicitações de dispositivos na camada abaixo dela. Essa configuração também é conhecida como borda aninhada.
Você pode estruturar uma hierarquia de dispositivos para que apenas a camada superior tenha conectividade com a nuvem e as camadas inferiores só possam se comunicar com as camadas norte e sul adjacentes. Esta camada de rede é a base da maioria das redes industriais, que seguem o padrão ISA-95.
Este tutorial orienta você na criação de uma hierarquia de dispositivos IoT Edge usando o IoT Edge para Linux no Windows, implantando contêineres de tempo de execução do IoT Edge em seus dispositivos e configurando seus dispositivos localmente. Execute as seguintes tarefas:
- Crie e defina as relações em uma hierarquia de dispositivos IoT Edge.
- Configure o tempo de execução do IoT Edge nos dispositivos em sua hierarquia.
- Instale certificados consistentes em toda a hierarquia de dispositivos.
- Adicione cargas de trabalho aos dispositivos na sua hierarquia.
- Use o módulo IoT Edge API Proxy para rotear com segurança o tráfego HTTP em uma única porta a partir de seus dispositivos de camada inferior.
Gorjeta
Este tutorial inclui uma mistura de etapas manuais e automatizadas para fornecer uma demonstração dos recursos aninhados do IoT Edge.
Se você quiser uma visão totalmente automatizada da configuração de uma hierarquia de dispositivos IoT Edge, oriente seu próprio script com base no exemplo de script do Azure IoT Edge for Industrial IoT. Este cenário com script implanta máquinas virtuais do Azure como dispositivos pré-configurados para simular um ambiente de fábrica.
Se você quiser uma visão aprofundada das etapas manuais para criar e gerenciar uma hierarquia de dispositivos IoT Edge, consulte o guia de instruções sobre hierarquias de gateway de dispositivo IoT Edge.
Neste tutorial, as seguintes camadas de rede são definidas:
Camada superior: os dispositivos IoT Edge nesta camada podem se conectar diretamente à nuvem.
Camadas inferiores: os dispositivos IoT Edge em camadas abaixo da camada superior não podem se conectar diretamente à nuvem. Eles precisam passar por um ou mais dispositivos intermediários do IoT Edge para enviar e receber dados.
Este tutorial usa uma hierarquia de dois dispositivos para simplificar. O dispositivo de camada superior representa um dispositivo na camada superior da hierarquia que pode se conectar diretamente à nuvem. Este dispositivo é referido como o dispositivo pai. O dispositivo de camada inferior representa um dispositivo na camada inferior da hierarquia que não pode se conectar diretamente à nuvem. Você pode adicionar mais dispositivos para representar seu ambiente de produção, conforme necessário. Os dispositivos nas camadas inferiores são referidos como dispositivos filho.
Nota
Um dispositivo filho pode ser um dispositivo downstream ou um dispositivo gateway em uma topologia aninhada.
Pré-requisitos
Para criar uma hierarquia de dispositivos IoT Edge, você precisa:
- Um shell Bash no Azure Cloud Shell usando a CLI do Azure v2.3.1 com a extensão do Azure IoT v0.10.6 ou superior instalada. Este tutorial usa o Azure Cloud Shell. Para ver suas versões atuais dos módulos e extensões da CLI do Azure, execute az version.
- Dois dispositivos Windows que executam o Azure IoT Edge para Linux no Windows. Ambos os dispositivos devem ser implantados usando um comutador virtual externo.
Gorjeta
É possível usar um comutador virtual interno ou padrão se um encaminhamento de porta estiver configurado no sistema operacional host Windows. No entanto, para a simplicidade deste tutorial, ambos os dispositivos devem usar um comutador virtual externo e estar conectados à mesma rede externa.
Para obter mais informações sobre netowrking, consulte Azure IoT Edge para rede Linux no Windows e Configuração de rede para Azure IoT Edge para Linux no Windows.
Se você precisar configurar os dispositivos EFLOW em uma DMZ, consulte Como configurar o Azure IoT Edge para Linux na configuração do Windows Industrial IoT & DMZ.
- Uma conta do Azure com uma assinatura válida. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Um Hub IoT de camada padrão ou gratuito no Azure.
- Certifique-se de que as seguintes portas estão abertas de entrada para todos os dispositivos, exceto o dispositivo de camada mais baixa: 443, 5671, 8883:
- 443: Usado entre hubs de borda pai e filho para chamadas de API REST e para extrair imagens de contêiner do docker.
- 5671, 8883: Usado para AMQP e MQTT.
Gorjeta
Para obter mais informações sobre o firewall da máquina virtual EFLOW, consulte IoT Edge para segurança do Linux no Windows.
Crie sua hierarquia de dispositivos do IoT Edge
Os dispositivos IoT Edge compõem as camadas da sua hierarquia. Este tutorial cria uma hierarquia de dois dispositivos IoT Edge: o dispositivo de camada superior e o dispositivo de camada inferior. Você pode criar mais dispositivos downstream conforme necessário.
Para criar e configurar sua hierarquia de dispositivos IoT Edge, use o comando az iot edge devices create Azure CLI. O comando simplifica a configuração da hierarquia automatizando e condensando várias etapas:
- Cria dispositivos no seu Hub IoT
- Define as relações pai-filho para autorizar a comunicação entre dispositivos
- Aplica o manifesto de implantação a cada dispositivo
- Gera uma cadeia de certificados para cada dispositivo para estabelecer uma comunicação segura entre eles
- Gera arquivos de configuração para cada dispositivo
Criar configuração do dispositivo
Você cria um grupo de dispositivos de borda aninhados com um dispositivo pai com um dispositivo filho. Neste tutorial, usamos manifestos de implantação de exemplo básicos. Para outros exemplos de cenário, revise os modelos de exemplo de configuração.
Antes de usar o comando az iot edge devices create , você precisa definir o manifesto de implantação para os dispositivos de camada superior e inferior. Transfira o ficheiro de exemplo deploymentTopLayer.json para a sua máquina local.
O manifesto de implantação do dispositivo de camada superior define o módulo de Proxy da API do IoT Edge e declara a rota do dispositivo de camada inferior para o Hub IoT.
Transfira o ficheiro de exemplo deploymentLowerLayer.json para a sua máquina local.
O manifesto de implantação do dispositivo de camada inferior inclui o módulo de sensor de temperatura simulado e declara a rota para o dispositivo de camada superior. Você pode ver na seção systemModules que os módulos de tempo de execução estão definidos para extrair de $upstream:443, em vez de mcr.microsoft.com. O dispositivo de camada inferior envia solicitações de imagem do Docker para o módulo IoT Edge API Proxy na porta 443, pois não pode extrair diretamente as imagens da nuvem. O outro módulo implantado no dispositivo de camada inferior, o módulo Sensor de Temperatura Simulado, também faz sua solicitação de imagem para
$upstream:443
.Para obter mais informações sobre como criar um manifesto de implantação de camada inferior, consulte Conectar dispositivos do Azure IoT Edge para criar uma hierarquia.
No Azure Cloud Shell, use o comando az iot edge devices create Azure CLI para criar dispositivos no Hub IoT e pacotes de configuração para cada dispositivo em sua hierarquia. Substitua os seguintes espaços reservados pelos valores apropriados:
Marcador de Posição Description <nome do hub> O nome do seu Hub IoT. <config-bundle-output-path> O caminho da pasta onde você deseja salvar os pacotes de configuração. <nome-pai-dispositivo> O nome do ID do dispositivo pai da camada superior. <manifesto pai-implantação> O arquivo de manifesto de implantação do dispositivo pai. <pai-fqdn-ou-ip> FQDN (nome de domínio totalmente qualificado) ou endereço IP do dispositivo pai. <nome-filho-dispositivo> O nome da ID do dispositivo filho da camada inferior. <filho-implantação-manifesto> O arquivo de manifesto de implantação do dispositivo filho. <filho-fqdn-ou-ip> FQDN (nome de domínio totalmente qualificado) ou endereço IP do dispositivo filho. az iot edge devices create \ --hub-name <hub-name> \ --output-path <config-bundle-output-path> \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \ --device id=<parent-device-name> \ deployment=<parent-deployment-manifest> \ hostname=<parent-fqdn-or-ip> \ --device id=child-1 \ parent=parent-1 \ deployment=<child-deployment-manifest> \ hostname=<child-fqdn-or-ip>
Por exemplo, o comando a seguir cria uma hierarquia de dois dispositivos IoT Edge no Hub IoT. Um dispositivo de camada superior chamado pai-1 e um dispositivo de camada inferior chamado filho-1*. O comando salva os pacotes de configuração para cada dispositivo no diretório de saída . O comando também gera certificados de teste autoassinados e os inclui no pacote de configuração. Os pacotes de configuração são instalados em cada dispositivo usando um script de instalação.
az iot edge devices create \ --hub-name my-iot-hub \ --output-path ./output \ --default-edge-agent "mcr.microsoft.com/azureiotedge-agent:1.4" \ --device id=parent-1 \ deployment=./deploymentTopLayer.json \ hostname=10.0.0.4 \ --device id=child-1 \ parent=parent-1 \ deployment=./deploymentLowerLayer.json \ hostname=10.1.0.4
Depois de executar o comando, você pode encontrar os pacotes de configuração do dispositivo no diretório de saída. Por exemplo:
PS C:\nested-edge\output> dir
Directory: C:\nested-edge\output
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 4/10/2023 4:12 PM 7192 child-1.tgz
-a--- 4/10/2023 4:12 PM 6851 parent-1.tgz
Você pode usar seus próprios certificados e chaves passados como argumentos para o comando ou criar uma hierarquia de dispositivo mais complexa. Para obter mais informações sobre como criar dispositivos aninhados usando o comando az, consulte az iot edge devices create. Se você não estiver familiarizado com a forma como os certificados são usados em um cenário de gateway, consulte a seção de certificados do guia de instruções.
Neste tutorial, você usa argumentos embutidos para criar os dispositivos e pacotes de configuração. Você também pode usar um arquivo de configuração no formato YAML ou JSON. Para obter um arquivo de configuração de exemplo, consulte o exemplo sample_devices_config.yaml.
Configurar o runtime do IoT Edge
Além do provisionamento de seus dispositivos, as etapas de configuração estabelecem uma comunicação confiável entre os dispositivos em sua hierarquia usando os certificados criados anteriormente. As etapas também começam a estabelecer a estrutura de rede da sua hierarquia. O dispositivo de camada superior mantém conectividade com a Internet, permitindo que ele extraia imagens para seu tempo de execução da nuvem, enquanto os dispositivos de camada inferior passam pelo dispositivo de camada superior para acessar essas imagens.
Para configurar o tempo de execução do IoT Edge, você precisa aplicar os pacotes de configuração aos seus dispositivos. As configurações diferem entre o dispositivo de camada superior e um dispositivo de camada inferior, portanto, esteja atento ao arquivo de configuração do dispositivo que você está aplicando a cada dispositivo.
Cada dispositivo precisa de seu pacote de configuração correspondente. Você pode usar uma unidade USB ou uma cópia segura do arquivo para mover os pacotes de configuração para cada dispositivo. Você precisa copiar o pacote de configuração para o sistema operacional host Windows de cada dispositivo EFLOW e, em seguida, copiá-lo para a VM EFLOW.
Aviso
Certifique-se de enviar o pacote de configuração correto para cada dispositivo.
Configuração de dispositivo de camada superior
Conecte-se ao seu dispositivo host Windows de nível superior e copie o arquivo pai-1.tzg para o dispositivo.
Inicie uma sessão do PowerShell elevada usando Executar como administrador.
Copie parent-1.tzg para a VM EFLOW.
Copy-EflowVmFile -fromFile parent-1.tzg -toFile ~/ -pushFile
Conecte-se à sua máquina virtual EFLOW
Connect-EflowVm
Extraia o arquivo do pacote de configuração. Por exemplo, use o comando tar para extrair o arquivo pai-1 :
tar -xzf ./parent-1.tgz
Defina a permissão de execução para o script de instalação.
chmod +x install.sh
Execute o script install.sh .
sudo sh ./install.sh
Aplique as permissões de certificado corretas e reinicie o tempo de execução do IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Verifique se todos os serviços do IoT Edge estão sendo executados corretamente.
sudo iotedge system status
Finalmente, adicione as regras de firewall apropriadas para habilitar a conectividade entre o dispositivo de camada inferior e o dispositivo de camada superior.
sudo iptables -A INPUT -p tcp --dport 5671 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 8883 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT sudo iptables-save | sudo tee /etc/systemd/scripts/ip4save
Execute as verificações de configuração e conectividade em seus dispositivos.
sudo iotedge check
No seu dispositivo de camada superior, espere ver uma saída com várias avaliações de aprovação. Poderá ver alguns avisos sobre políticas de registos e, dependendo da sua rede, políticas de DNS.
Se você quiser ver mais de perto quais modificações estão sendo feitas no arquivo de configuração do seu dispositivo, consulte a seção Configurar o IoT Edge em dispositivos do guia de instruções.
Configuração de dispositivo de camada inferior
Conecte-se ao seu dispositivo host Windows de nível inferior e copie o arquivo child-1.tzg para o dispositivo.
Inicie uma sessão do PowerShell elevada usando Executar como administrador.
Copie child-1.tzg para a VM EFLOW.
Copy-EflowVmFile -fromFile child-1.tzg -toFile ~/ -pushFile
Conecte-se à sua máquina virtual EFLOW
Connect-EflowVm
Extraia o arquivo do pacote de configuração. Por exemplo, use o comando tar para extrair o arquivo child-1 :
tar -xzf ./child-1.tgz
Defina a permissão de execução para o script de instalação.
chmod +x install.sh
Execute o script install.sh .
sudo sh ./install.sh
Aplique as permissões de certificado corretas e reinicie o tempo de execução do IoT Edge.
sudo chmod -R 755 /etc/aziot/certificates/ sudo iotedge system restart
Verifique se todos os serviços do IoT Edge estão sendo executados corretamente.
sudo iotedge system status
Execute as verificações de configuração e conectividade em seus dispositivos. Para o dispositivo de camada inferior, a imagem de diagnóstico precisa ser passada manualmente no comando:
sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:443/azureiotedge-diagnostics:1.2
Se você concluiu as etapas anteriores corretamente, poderá verificar se seus dispositivos estão configurados corretamente. Quando estiver satisfeito que suas configurações estão corretas em cada dispositivo, você estará pronto para continuar.
Implantação do módulo de dispositivo
A implantação do módulo para seus dispositivos foi aplicada quando os dispositivos foram criados no Hub IoT. O comando az iot edge devices create aplicou os arquivos JSON de implantação para os dispositivos de camada superior e inferior. Após a conclusão dessas implantações, o dispositivo de camada inferior usa o módulo IoT Edge API Proxy para extrair as imagens necessárias.
Além dos módulos de tempo de execução IoT Edge Agent e IoT Edge Hub, o dispositivo de camada superior recebe o módulo de registro Docker e o módulo IoT Edge API Proxy.
O módulo de registro do Docker aponta para um Registro de Contêiner do Azure existente. Nesse caso, REGISTRY_PROXY_REMOTEURL
aponta para o Microsoft Container Registry. Por padrão, o registro do Docker escuta na porta 5000.
O módulo IoT Edge API Proxy roteia solicitações HTTP para outros módulos, permitindo que dispositivos de camada inferior extraiam imagens de contêiner ou enviem blobs para o armazenamento. Neste tutorial, ele se comunica na porta 443 e está configurado para enviar a rota de solicitações pull de imagem de contêiner do Docker para o módulo de registro do Docker na porta 5000. Além disso, qualquer solicitação de carregamento de armazenamento de blob é encaminhada para o módulo AzureBlobStorageonIoTEdge na porta 11002. Para obter mais informações sobre o módulo IoT Edge API Proxy e como configurá-lo, consulte o guia de instruções do módulo.
Se você quiser ver como criar uma implantação como essa por meio do portal do Azure ou do Azure Cloud Shell, consulte a seção de dispositivo de camada superior do guia de instruções.
Você pode visualizar o status de seus módulos usando o comando:
az iot hub module-twin show --device-id <edge-device-id> --module-id '$edgeAgent' --hub-name <iot-hub-name> --query "properties.reported.[systemModules, modules]"
Este comando gera todas as propriedades relatadas do edgeAgent. Aqui estão alguns úteis para monitorar o status do dispositivo: status do tempo de execução, hora de início do tempo de execução, hora da última saída do tempo de execução, contagem de reinicialização do tempo de execução.
Você também pode ver o status de seus módulos no portal do Azure. Navegue até a seção Dispositivos do seu Hub IoT para ver seus dispositivos e módulos.
Ver os dados gerados
O módulo Sensor de Temperatura Simulado que você enviou gera dados de ambiente de amostra. Ele envia mensagens que incluem temperatura e umidade ambiente, temperatura e pressão da máquina e um carimbo de data/hora.
Você também pode exibir essas mensagens por meio do Azure Cloud Shell:
az iot hub monitor-events -n <iot-hub-name> -d <lower-layer-device-name>
Por exemplo:
az iot hub monitor-events -n my-iot-hub -d child-1
{
"event": {
"origin": "child-1",
"module": "simulatedTemperatureSensor",
"interface": "",
"component": "",
"payload": "{\"machine\":{\"temperature\":104.29281270901808,\"pressure\":10.48905461241978},\"ambient\":{\"temperature\":21.086561171611102,\"humidity\":24},\"timeCreated\":\"2023-04-17T21:50:30.1082487Z\"}"
}
}
Resolução de Problemas
Execute o iotedge check
comando para verificar a configuração e solucionar erros.
Você pode executar iotedge check
em uma hierarquia aninhada, mesmo que os dispositivos downstream não tenham acesso direto à Internet.
Quando você executa iotedge check
a partir da camada inferior, o programa tenta puxar a imagem do pai através da porta 443.
sudo iotedge check --diagnostics-image-name $upstream:443/azureiotedge-diagnostics:1.2
O azureiotedge-diagnostics
valor é extraído do registro de contêiner vinculado ao módulo do Registro. Este tutorial tem definido por padrão para https://mcr.microsoft.com:
Nome | Valor |
---|---|
REGISTRY_PROXY_REMOTEURL |
https://mcr.microsoft.com |
Se estiver a utilizar um registo de contentor privado, certifique-se de que todas as imagens (IoTEdgeAPIProxy, edgeAgent, edgeHub, Sensor de Temperatura Simulado e diagnóstico) estão presentes no registo de contentor.
Se um dispositivo downstream tiver uma arquitetura de processador diferente do dispositivo pai, você precisará da imagem de arquitetura apropriada. Você pode usar um registro conectado ou especificar a imagem correta para os módulos edgeAgent e edgeHub no arquivo config.toml do dispositivo downstream. Por exemplo, se o dispositivo pai estiver sendo executado em uma arquitetura ARM32v7 e o dispositivo downstream estiver sendo executado em uma arquitetura AMD64, você precisará especificar a versão correspondente e a marca de imagem da arquitetura no arquivo config.toml do dispositivo downstream.
[agent.config]
image = "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:443/azureiotedge-agent:1.4.10-linux-amd64"
},
},
"edgeHub": {
"settings": {
"image": "$upstream:443/azureiotedge-hub:1.4.10-linux-amd64",
}
}
}
Clean up resources (Limpar recursos)
Você pode excluir as configurações locais e os recursos do Azure criados neste artigo para evitar cobranças.
Para eliminar os recursos:
Inicie sessão no Portal do Azure e selecione Grupos de recursos.
Selecione o nome do grupo de recursos que contém os recursos de teste do IoT Edge.
Reveja a lista de recursos que o seu grupo de recursos contém. Se quiser eliminá-los todos, pode selecionar Eliminar grupo de recursos. Se você quiser excluir apenas alguns deles, você pode selecionar cada recurso para excluí-los individualmente.
Próximos passos
Neste tutorial, você configurou dois dispositivos IoT Edge como gateways e definiu um como o dispositivo pai do outro. Em seguida, você demonstrou puxar uma imagem de contêiner para o dispositivo filho por meio de um gateway usando o módulo IoT Edge API Proxy. Consulte o guia de instruções sobre o uso do módulo proxy se quiser saber mais.
Para saber mais sobre como usar gateways para criar camadas hierárquicas de dispositivos IoT Edge, consulte o artigo a seguir.