Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
IoT Edge 1.5
Importante
IoT Edge 1.5 LTS é a versão suportada. IoT Edge 1.4 LTS atingiu o fim da vida útil em 12 de novembro de 2024. Se você estiver usando uma versão anterior, consulte Update IoT Edge.
Implante nós do Azure IoT Edge em redes organizadas em camadas hierárquicas. Cada camada em uma hierarquia é um dispositivo de gateway que processa as mensagens e as solicitações de dispositivos na camada abaixo dele. Essa configuração também é conhecida como borda aninhada.
Estruturar uma hierarquia de dispositivos para que apenas a camada superior tenha conectividade com a nuvem, e as camadas inferiores possam se comunicar apenas com camadas upstream e downstream adjacentes. Essa disposição em camadas da rede é a base da maioria das redes industriais, que seguem o padrão ISA-95.
Este tutorial mostra como criar uma hierarquia de dispositivos IoT Edge, implantar IoT Edge contêineres de runtime em seus dispositivos e configurar seus dispositivos localmente. Neste tutorial, você realizará as seguintes tarefas:
- Crie e defina as relações em uma hierarquia de dispositivos IoT Edge.
- Configure o IoT Edge runtime nos dispositivos em sua hierarquia.
- Instalar certificados consistentes na hierarquia de dispositivos.
- Adicionar cargas de trabalho aos dispositivos da hierarquia.
- Use o módulo proxy de API IoT Edge para rotear com segurança o tráfego HTTP por uma única porta de seus dispositivos de camada inferior.
Dica
Este tutorial inclui uma mistura de etapas manuais e automatizadas para fornecer uma demonstração de recursos aninhados IoT Edge.
Se você quiser uma análise totalmente automatizada sobre como configurar uma hierarquia de dispositivos IoT Edge, siga o script Azure IoT Edge para o exemplo de IoT Industrial. Esse cenário roteirizado implanta máquinas virtuais do Azure como dispositivos pré-configurados para simular um ambiente de fábrica.
Se você quiser uma análise detalhada das etapas manuais para criar e gerenciar uma hierarquia de dispositivos do IoT Edge, confira o guia de instruções sobre as hierarquias de gateway do dispositivo do IoT Edge.
Neste tutorial, as seguintes camadas de rede são definidas:
Top layer: IoT Edge dispositivos nessa camada podem se conectar diretamente à nuvem.
Camadas inferiores: Dispositivos IoT Edge em camadas inferiores à camada superior não podem se conectar diretamente à nuvem. Eles precisam passar por um ou mais dispositivos intermediários IoT Edge para enviar e receber dados.
Este tutorial usa uma hierarquia de dois dispositivos para simplificar. O dispositivo de nível superior representa um dispositivo no nível superior da hierarquia que pode se conectar diretamente à nuvem. Esse dispositivo é chamado de dispositivo pai. O dispositivo de nível inferior representa um dispositivo no nível inferior da hierarquia que não pode se conectar diretamente à nuvem. Adicione mais dispositivos para representar seu ambiente de produção, conforme necessário. Dispositivos em camadas inferiores são chamados de dispositivos subordinados.
Estrutura da hierarquia do tutorial contendo dois dispositivos: o dispositivo de camada superior e o dispositivo de camada inferior
Observação
Um dispositivo filho pode ser um dispositivo de downstream ou um dispositivo de gateway em uma topologia aninhada.
Pré-requisitos
Para criar uma hierarquia de dispositivos IoT Edge, você precisa:
Um computador (Windows ou Linux) com conectividade com a Internet.
Uma conta Azure com uma assinatura válida. Se você não tiver uma assinatura Azure, crie uma conta free antes de começar.
Uma camada gratuita ou padrão IoT Hub em Azure.
Um shell bash em Azure Cloud Shell usando Azure CLI com a extensão Azure IoT instalada. Este tutorial usa o Azure Cloud Shell. Para ver as versões atuais dos módulos e extensões do Azure CLI, execute az version.
Dois dispositivos Linux para configurar sua hierarquia. Se você não tiver dispositivos disponíveis, poderá criar Azure máquinas virtuais para cada dispositivo em sua hierarquia usando o modelo IoT Edge Azure Resource Manager. IoT Edge versão 1.5 é pré-instalado com esse modelo de Resource Manager. Se você estiver instalando IoT Edge em seus próprios dispositivos, consulte Instalar Azure IoT Edge para Linux ou Update IoT Edge.
Para simplificar a comunicação de rede entre os dispositivos, as máquinas virtuais devem estar na mesma rede virtual ou usar o emparelhamento de rede virtual.
Verifique se as seguintes portas estão abertas para entrada em todos os dispositivos, exceto o dispositivo de camada mais baixa: 443, 5671 e 8883:
- 443: usado entre hubs de borda pai e filho para chamadas à API REST e pull das imagens de contêiner do Docker.
- 5671, 8883: Usado para AMQP e MQTT.
Para obter mais informações, consulte como abrir portas para uma máquina virtual com o portal do Azure.
Dica
Você usa o identificador SSH e o FQDN ou o endereço IP de cada máquina virtual para configuração em etapas posteriores, portanto, mantenha essas informações sempre à mão. Você pode encontrar o endereço IP e o FQDN no portal do Azure. Para o endereço IP, navegue até a sua lista de máquinas virtuais e anote o campo endereço IP público. Para o FQDN, vá para a página de visão geral de cada máquina virtual e procure o campo nome DNS. Para o identificador SSH, acesse a página conectar de cada máquina virtual.
Criar sua hierarquia de dispositivos IoT Edge
Dispositivos IoT Edge compõem as camadas da hierarquia. Este tutorial cria uma hierarquia de dois dispositivos IoT Edge: o dispositivo de camada top e o dispositivo de camada lower. 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. Essa ferramenta simplifica a configuração da hierarquia automatizando e condensando várias etapas:
- Cria dispositivos em seu IoT Hub
- Define as relações pai-filho para autorizar a comunicação entre os dispositivos
- Aplica o manifesto de implantação a cada dispositivo
- Gera uma cadeia de certificados para cada dispositivo de modo a estabelecer uma comunicação segura entre eles
- Gera arquivos de configuração para cada dispositivo
Criar uma configuração de dispositivo
Você cria um grupo de dispositivos de borda aninhados que contém um dispositivo pai com um dispositivo filho. Neste tutorial, usamos amostras de manifestos de implantação básicos. Para outros exemplos de cenário, examine os modelos de exemplo de configuração.
Antes de usar o comando az iot edge devices create , defina o manifesto de implantação para a camada superior e os dispositivos de camada inferior. Baixe o arquivo de exemplo deploymentTopLayer.json no computador local.
O manifesto de implantação do dispositivo de camada superior define o módulo Proxy de API do IoT Edge e declara a rota do dispositivo de camada inferior para o IoT Hub.
Baixe o arquivo de exemplo deploymentLowerLayer.json no computador local.
O manifesto de implantação do dispositivo de nível inferior inclui o módulo de sensor de temperatura simulado e declara a rota para o dispositivo de nível superior. Na seção systemModules , os módulos de runtime são definidos para efetuar pull de $upstream:443 em vez de mcr.microsoft.com. O dispositivo da camada inferior
envia solicitações de imagem do Docker para o módulo Proxy de API do IoT Edge na porta 443, porque ele não pode puxar diretamente as imagens da nuvem. O outro módulo implantado no dispositivo de camada inferior, o módulo do Sensor de temperatura simulado, também faz sua solicitação de imagem para . Para obter mais informações sobre como criar um manifesto de implantação de camada inferior, consulte Conectar dispositivos Azure IoT Edge para criar uma hierarquia.
No Azure Cloud Shell, use o comando Azure CLI az iot edge devices create para criar dispositivos no IoT Hub e pacotes de configuração para cada dispositivo em sua hierarquia. Substitua o texto do espaço reservado em colchetes angulares por seus próprios valores:
Espaço reservado Descrição nome do hub O nome do seu IoT Hub. config-bundle-output-path O caminho da pasta na qual você deseja salvar os pacotes de configuração. nome-do-dispositivo-mãe O nome da ID do dispositivo pai de nível superior. manifesto de implantação principal O arquivo de manifesto da implantação do dispositivo pai. parent-fqdn-or-ip Nome de domínio totalmente qualificado (FQDN) ou endereço IP do dispositivo pai. nome-dispositivo-filho O nome da ID do dispositivo filho de nível inferior. child-deployment-manifest O arquivo de manifesto de implantação do dispositivo filho. child-fqdn-or-ip Nome de domínio totalmente qualificado (FQDN) 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.5" \ --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 em IoT Hub. Um dispositivo de nível superior chamado parent-1 e um dispositivo de nível inferior chamado child-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.5" \ --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, localize 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
Use seus próprios certificados e chaves passados como argumentos para o comando ou crie uma hierarquia de dispositivos mais complexa. Para obter mais informações sobre como criar dispositivos aninhados usando o comando az , confira az iot edge devices create. Se não estiver familiarizado com o modo como os certificados são usados em um cenário de gateway, confira a seção “certificado” 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 nos formatos YAML ou JSON. Para obter uma amostra de arquivo de configuração, confira o exemplo sample_devices_config.yaml.
Configurar o tempo de execução do IoT Edge
Além do provisionamento dos dispositivos, as etapas de configuração estabelecem uma comunicação confiável entre os dispositivos da hierarquia usando os certificados criados anteriormente. As etapas também começam a estabelecer uma estrutura de rede da hierarquia. O dispositivo de nível superior manterá a conectividade com a internet, permitindo que efetue um pull de imagens da nuvem para o respectivo runtime, enquanto os dispositivos de nível inferior serão roteados através do dispositivo de nível superior para acessar essas imagens.
Para configurar o IoT Edge runtime, aplique os pacotes de configuração aos seus dispositivos. As configurações são diferentes para o dispositivo de camada superior e um dispositivo de camada inferior, portanto, certifique-se de usar o arquivo de configuração correto para cada dispositivo.
Copie cada arquivo morto do pacote de configuração para seu dispositivo correspondente. Você pode usar uma unidade USB, um serviço como Azure Key Vault ou com uma função como Secure file copy. Escolha entre esses métodos aquele que melhor corresponde ao seu cenário.
Por exemplo, para enviar o pacote de configuração parent-1 para o diretório base na VM parent-1, você pode usar um comando como o seguinte exemplo:
scp ./output/parent-1.tgz admin@parent-1-vm.westus.cloudapp.azure.com:~Em cada dispositivo, extraia o arquivo do pacote de configuração. Por exemplo, use o comando tar para extrair o arquivo morto parent-1:
tar -xzf ./parent-1.tgzDefina a permissão de execução para o script de instalação.
chmod +x install.shEm cada dispositivo, execute o script de instalação com permissão raiz para aplicar o pacote de configuração:
sudo ./install.sh
Para ver mais detalhes sobre as alterações no arquivo de configuração do dispositivo, consulte Conectar dispositivos Azure IoT Edge para criar uma hierarquia.
Para verificar se os dispositivos estão configurados corretamente, execute as verificações de configuração e conectividade em seus dispositivos.
sudo iotedge check
admin@child-1-vm:~$ sudo iotedge check
Configuration checks (aziot-identity-service)
---------------------------------------------
√ keyd configuration is well-formed - OK
√ certd configuration is well-formed - OK
√ tpmd configuration is well-formed - OK
√ identityd configuration is well-formed - OK
√ daemon configurations up-to-date with config.toml - OK
√ identityd config toml file specifies a valid hostname - OK
√ host time is close to reference time - OK
√ preloaded certificates are valid - OK
√ keyd is running - OK
√ certd is running - OK
√ identityd is running - OK
√ read all preloaded certificates from the Certificates Service - OK
√ read all preloaded key pairs from the Keys Service - OK
√ check all EST server URLs utilize HTTPS - OK
√ ensure all preloaded certificates match preloaded private keys with the same ID - OK
Connectivity checks (aziot-identity-service)
--------------------------------------------
√ host can connect to and perform TLS handshake with iothub AMQP port - OK
√ host can connect to and perform TLS handshake with iothub HTTPS / WebSockets port - OK
√ host can connect to and perform TLS handshake with iothub MQTT port - OK
Configuration checks
--------------------
√ aziot-edged configuration is well-formed - OK
√ configuration up-to-date with config.toml - OK
√ container engine is installed and functional - OK
√ configuration has correct parent_hostname - OK
√ configuration has correct URIs for daemon mgmt endpoint - OK
√ container time is close to host time - OK
‼ DNS server - Warning
Container engine is not configured with DNS server setting, which may impact connectivity to IoT Hub.
Please see https://aka.ms/iotedge-prod-checklist-dns for best practices.
You can ignore this warning if you are setting DNS server per module in the Edge deployment.
‼ production readiness: logs policy - Warning
Container engine is not configured to rotate module logs which may cause it run out of disk space.
Please see https://aka.ms/iotedge-prod-checklist-logs for best practices.
You can ignore this warning if you are setting log policy per module in the Edge deployment.
‼ production readiness: Edge Agent's storage directory is persisted on the host filesystem - Warning
The edgeAgent module is not configured to persist its /tmp/edgeAgent directory on the host filesystem.
Data might be lost if the module is deleted or updated.
Please see https://aka.ms/iotedge-storage-host for best practices.
‼ production readiness: Edge Hub's storage directory is persisted on the host filesystem - Warning
The edgeHub module is not configured to persist its /tmp/edgeHub directory on the host filesystem.
Data might be lost if the module is deleted or updated.
Please see https://aka.ms/iotedge-storage-host for best practices.
√ Agent image is valid and can be pulled from upstream - OK
√ proxy settings are consistent in aziot-edged, aziot-identityd, moby daemon and config.toml - OK
Connectivity checks
-------------------
√ container on the default network can connect to upstream AMQP port - OK
√ container on the default network can connect to upstream HTTPS / WebSockets port - OK
√ container on the IoT Edge module network can connect to upstream AMQP port - OK
√ container on the IoT Edge module network can connect to upstream HTTPS / WebSockets port - OK
30 check(s) succeeded.
4 check(s) raised warnings. Re-run with --verbose for more details.
2 check(s) were skipped due to errors from other checks. Re-run with --verbose for more details.
No dispositivo de camada superior, você vê a saída com várias verificações de passagem. Você pode ver alguns avisos sobre políticas de log e, dependendo de sua rede, políticas DNS.
Implantação do módulo do dispositivo
A implantação do módulo para seus dispositivos é aplicada quando você cria os dispositivos no IoT Hub. O comando az iot edge devices create aplica os arquivos JSON de implantação para os dispositivos de camada superior e inferior. Após a conclusão da implantação, o dispositivo de camada inferior usa o módulo proxy de API do IoT Edge para baixar suas imagens.
Além dos módulos de runtime IoT Edge Agent e IoT Edge Hub, o top layer device também obtém o módulo Docker Registry e o módulo IoT Edge Proxy de API.
O módulo Docker registry aponta para um Azure Container Registry existente. Nesse caso, aponta para o Microsoft Container Registry. Por padrão, o módulo do Registro do Docker escuta na porta 5000.
O módulo IoT Edge Proxy de API roteia solicitações HTTP para outros módulos, para que dispositivos de camada inferior possam fazer download de imagens de contêiner ou enviar blobs para o armazenamento. Neste tutorial, ele se comunica na porta 443 e está configurado para enviar solicitações de pull de imagem de contêiner do Docker para o módulo de registro do Docker na porta 5000. As solicitações de upload do armazenamento de blobs vão para o módulo AzureBlobStorageonIoTEdge na porta 11002. Para obter mais informações sobre o módulo API Proxy do IoT Edge e como configurá-lo, consulte o guia de instruções do módulo.
Para aprender a criar uma implantação como esta no Portal do Azure ou no Azure Cloud Shell, consulte a seção do dispositivo de camada superior do guia de instruções.
Exiba o status dos módulos com este 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 mostra todas as propriedades relatadas por edgeAgent. As propriedades úteis para monitorar o status do dispositivo incluem: status do runtime, hora de início do tempo de execução, hora de última saída do runtime e contagem de reinicialização do runtime.
Você também pode ver o status dos módulos no Azure portal. Vá para a seção Devices do IoT Hub para ver seus dispositivos e módulos.
Exibir os dados gerados
O módulo Sensor de Temperatura Simulado gera dados de ambiente de exemplo. Ele envia mensagens que incluem temperatura ambiente e umidade, temperatura do computador e pressão e um carimbo de data/hora.
Você também pode exibir essas mensagens usando 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\"}"
}
}
Solução de problemas
Execute o comando para verificar a configuração e solucionar erros.
Execute em uma hierarquia aninhada, mesmo que os computadores downstream não tenham acesso direto à Internet.
Quando você executa da camada inferior, o programa efetua pull da imagem do pai pela porta 443.
O valor vem do registro de contêiner vinculado ao módulo do Registro. Este tutorial o define por padrão como :
| Nome | Valor |
|---|---|
REGISTRY_PROXY_REMOTEURL |
https://mcr.microsoft.com |
Se você estiver usando um registro de contêiner privado, verifique se todas as imagens (IoTEdgeAPIProxy, edgeAgent, edgeHub, sensor de temperatura simulado e diagnóstico) estão presentes no registro de contêiner.
Se um dispositivo downstream usar uma arquitetura de processador diferente do dispositivo pai, use a imagem de arquitetura apropriada. Use um registro conectado ou especifique a imagem correta para os módulos edgeAgent e edgeHub no arquivo config.toml do dispositivo downstream. Por exemplo, se o dispositivo pai for executado no ARM32v7 e o dispositivo descendente for executado no AMD64, especifique a marca de imagem correspondente à versão e arquitetura no arquivo config.toml do dispositivo descendente.
[agent.config]
image = "$upstream:443/azureiotedge-agent:1.5.0-linux-amd64"
"systemModules": {
"edgeAgent": {
"settings": {
"image": "$upstream:443/azureiotedge-agent:1.5.0-linux-amd64"
},
},
"edgeHub": {
"settings": {
"image": "$upstream:443/azureiotedge-hub:1.5.0-linux-amd64",
}
}
}
Limpar os recursos
Você pode excluir as configurações locais e os recursos Azure que você criou neste artigo para evitar encargos.
Para excluir os recursos:
Entre no portal Azure e selecione Resource groups.
Selecione o nome do grupo de recursos que contém seus recursos de teste IoT Edge.
Reveja a lista de recursos contidos no grupo de recursos. Se você deseja excluir todos eles, selecione Excluir grupo de recursos. Se quiser excluir apenas alguns, clique em cada recurso para excluí-los individualmente.
Próximas etapas
Neste tutorial, você configurou dois dispositivos IoT Edge como gateways e definiu um como o dispositivo pai do outro. Em seguida, você efetuou pull de uma imagem de contêiner para o dispositivo downstream por meio de um gateway usando o módulo do proxy da API do IoT Edge. Confira o Guia de instruções sobre o uso do módulo do proxy se você quiser saber mais.
Para saber mais sobre como usar gateways para criar camadas hierárquicas de dispositivos IoT Edge, consulte o artigo a seguir.