Partilhar 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 Marca de verificação do IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS 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 upstream e downstream 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, na implantação de contêineres de tempo de execução do IoT Edge em seus dispositivos e na configuração local dos dispositivos. 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, siga o exemplo de script do Azure IoT Edge para IoT Industrial. 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 detalhada 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.

Estrutura da hierarquia do tutorial, contendo dois dispositivos: o dispositivo de camada superior e o dispositivo de camada inferior

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 computador (Windows ou Linux) com ligação à Internet.

  • 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.

  • Um shell Bash no Azure Cloud Shell usando a CLI do Azure com a extensão do Azure IoT 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 Linux para configurar sua hierarquia. Se você não tiver dispositivos disponíveis, poderá criar máquinas virtuais do Azure para cada dispositivo em sua hierarquia usando o modelo IoT Edge Azure Resource Manager. O IoT Edge versão 1.5 está pré-instalado com este modelo do Resource Manager. Se você estiver instalando o IoT Edge em seus próprios dispositivos, consulte Instalar o Azure IoT Edge para Linux ou Atualizar o IoT Edge.

  • Para simplificar a comunicação de rede entre dispositivos, as máquinas virtuais devem estar na mesma rede virtual ou usar emparelhamento de rede virtual.

  • 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.

    Para obter mais informações, consulte como abrir portas para uma máquina virtual com o portal do Azure.

    Gorjeta

    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, acompanhe essas informações. Você pode encontrar o endereço IP e o FQDN no portal do Azure. Para o endereço IP, navegue até a 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, vá para a página de conexão de cada máquina virtual.

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.

  1. 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.

  2. 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.

  3. 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.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 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.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, 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.

  1. Copie cada arquivo de arquivo do pacote de configuração para o dispositivo correspondente. Você pode usar uma unidade USB, um serviço como o Azure Key Vault ou com uma função como Cópia segura de arquivos. Escolha um destes métodos que melhor corresponda ao seu cenário.

    Por exemplo, para enviar o pacote de configuração pai-1 para o diretório base na VM pai-1 , você pode usar um comando como o exemplo a seguir:

    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 pai-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, aplique o pacote de configuração ao dispositivo usando a permissão root:

    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

    Se você quiser ver mais de perto quais modificações estão sendo feitas no arquivo de configuração do seu 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 nos 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 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.

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 as máquinas 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.

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.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",
      }
   }
}

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:

  1. Inicie sessão 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 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ê puxou uma imagem de contêiner para o dispositivo downstream 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.