Compartilhar via


Tutorial: criar uma hierarquia de dispositivos IoT Edge

Aplica-se a:Marca de verificação do IoT Edge 1.5 IoT Edge 1.5

Importante

O IoT Edge 1.5 LTS é a versão com suporte. O IoT Edge 1.4 LTS chegou ao fim de sua vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o 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 do IoT Edge, implantar contêineres de runtime do IoT Edge em seus dispositivos e configurar seus dispositivos localmente. Neste tutorial, você realizará as seguintes tarefas:

  • Criar e definir as relações em uma hierarquia de dispositivos IoT Edge.
  • Configurar o runtime do IoT Edge nos dispositivos da sua hierarquia.
  • Instalar certificados consistentes na hierarquia de dispositivos.
  • Adicionar cargas de trabalho aos dispositivos da hierarquia.
  • Use o módulo de Proxy de API do IoT Edge para rotear o tráfego HTTP com segurança em uma porta única de dispositivos de camada inferior.

Dica

Este tutorial inclui uma combinação de etapas manuais e automatizadas para fornecer uma demonstração dos recursos aninhados de IoT Edge.

Caso queira obter uma visão totalmente automatizada da configuração de uma hierarquia de dispositivos do IoT Edge, você poderá seguir a amostra com script do Azure IoT Edge para o IoT Industrial. Esse cenário com script implantará 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:

  • Camada superior: dispositivos IoT Edge nessa camada podem se conectar diretamente à nuvem.

  • Camadas inferiores: os dispositivos do IoT Edge que estão em camada abaixo da camada superior não podem se conectar diretamente à nuvem. Eles precisam passar por um ou mais dispositivos IoT Edge intermediários 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 da IoT Edge, você precisa fazer o seguinte:

  • Um computador (Windows ou Linux) com conectividade com a Internet.

  • Uma conta do Azure com uma assinatura válida. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

  • Um Hub IoT gratuito ou da camada Standard no Azure.

  • Um shell Bash no Azure Cloud Shell usando a CLI do Azure com a extensão Internet das Coisas do Azure instalada. Este tutorial usa o Azure Cloud Shell. Execute o comando az version para conferir as versões atuais de módulos e extensões da CLI do Azure.

  • Dois dispositivos Linux para configurar sua hierarquia. Caso não tenha dispositivos disponíveis, será possível criar máquinas virtuais do Azure para cada dispositivo na hierarquia usando o modelo do Resource Manager do Azure IoT Edge. A versão 1.5 do IoT Edge é pré-instalada com esse modelo do Resource Manager. Se você estiver instalando o IoT Edge em seus dispositivos, confira Instalar o Azure IoT Edge para Linux ou Atualizar o 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, confira Como abrir as portas de 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ê encontra 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.

Configurar sua hierarquia de dispositivos da IoT Edge

Os dispositivos do IoT Edge compõem as camadas da hierarquia. Este tutorial criará uma hierarquia de dois dispositivos da IoT Edge: um dispositivo de nível superior e um dispositivo de nível inferior. Você pode criar mais dispositivos downstream conforme necessário.

Para criar e configurar sua hierarquia de dispositivos da IoT Edge, use o comando az iot edge devices create da CLI do Azure. Essa ferramenta 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 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, analise os modelos de exemplos de configuração.

  1. 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 a amostra do arquivo deploymentTopLayer.json no seu computador local.

    O manifesto de implantação do dispositivo de nível superior define o módulo de Proxy da API da IoT Edge e declara a rota a partir do dispositivo de nível inferior para o Hub IoT.

  2. Baixe a amostra do arquivo deploymentLowerLayer.json no seu 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 de 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 extrair 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 $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.

  3. No Azure Cloud Shell, use o comando az iot edge devices create da CLI do Azure para criar dispositivos no Hub IoT e pacotes de configuração para cada dispositivo na 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 Hub IoT.
    <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 da IoT Edge no Hub IoT. 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 runtime 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 runtime do IoT Edge, 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.

  1. Copie cada arquivo morto do pacote de configuração para seu dispositivo correspondente. Você pode usar uma unidade USB, um serviço como o Azure Key Vault ou uma função como uma Cópia de arquivo segura. 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:~
    
  2. 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.tgz
    
  3. Defina a permissão de execução para o script de instalação.

    chmod +x install.sh
    
  4. Em cada dispositivo, execute o script de instalação com permissão raiz para aplicar o pacote de configuração:

    sudo ./install.sh
    

    A instalação dos pacotes de configuração atualiza os arquivos config.toml em seu dispositivo e reinicia todos os serviços do IoT Edge automaticamente

    Para ver mais detalhes sobre as alterações no arquivo de configuração do dispositivo, consulte Conectar dispositivos do Azure IoT Edge juntos 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 Hub IoT. 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 fazer o download de suas imagens.

Além dos módulos de runtime IoT Edge Agent e Hub IoT Edge, o dispositivo de camada superior também obtém o módulo do Registro do Docker e o módulo Proxy de API do IoT Edge .

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 módulo do Registro do Docker escuta na porta 5000.

O módulo Proxy de API do IoT Edge roteia solicitações HTTP para outros módulos, permitindo que dispositivos de camada inferior baixem imagens de contêiner ou enviem blobs ao 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 do Proxy de API do IoT Edge e como configurá-lo, confira o Guia de instruções do módulo.

Para saber como criar uma implantação como essa no portal do Azure ou no Azure Cloud Shell, consulte a seção de 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 portal do Azure. Vá para a seção Dispositivos do Hub IoT 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 o 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 iotedge check comando para verificar a configuração e solucionar erros.

Execute iotedge check em uma hierarquia aninhada, mesmo que os computadores downstream não tenham acesso direto à Internet.

Quando você executa iotedge check da camada inferior, o programa efetua pull da imagem do pai pela porta 443.

O azureiotedge-diagnostics valor vem do registro de contêiner vinculado ao módulo do Registro. Este tutorial o define por padrão como https://mcr.microsoft.com:

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

Exclua as configurações locais e os recursos do Azure criados neste artigo para evitar custos.

Para excluir os recursos:

  1. Entre no portal do Azure e selecione Grupos de recursos.

  2. Selecione o nome do grupo de recursos que contém os recursos de teste do IoT Edge.

  3. 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 deles 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 níveis hierárquicos de dispositivos da IoT Edge, confira o artigo a seguir.