Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
IoT Edge 1.5
Importante
IoT Edge 1.5 LTS é a versão suportada. O IoT Edge 1.4 LTS atingiu o fim de vida útil a 12 de novembro de 2024. Se estiveres a usar uma versão anterior, vê Update IoT Edge.
Use o Azure Functions para implementar código que execute a lógica do seu negócio diretamente nos seus dispositivos Azure IoT Edge. Este tutorial mostra-lhe como criar e implementar uma Função Azure que filtra dados de sensores num dispositivo IoT Edge simulado. Use o dispositivo IoT Edge simulado que criou nos quickstarts. Neste tutorial, irá aprender a:
- Use o Visual Studio Code para criar uma Função Azure
- Use o Visual Studio Code e o Docker para criar uma imagem Docker e publicá-la num registo de contentores
- Implemente o módulo do registo de contentores para o seu dispositivo IoT Edge
- Ver dados filtrados
A função Azure que crias neste tutorial filtra os dados de temperatura gerados pelo teu dispositivo. A função só envia mensagens a montante para o Azure IoT Hub quando a temperatura está acima de um limiar especificado.
Se não tiver uma conta Azure, crie uma conta free antes de começar.
Pré-requisitos
Antes de começar este tutorial, siga o tutorial para configurar o seu ambiente de desenvolvimento para o desenvolvimento de contentores Linux: Desenvolva módulos Azure IoT Edge usando Visual Studio Code. Quando terminar, você terá os seguintes pré-requisitos em vigor:
- Uma versão gratuita ou de nível padrão IoT Hub em Azure.
- Um dispositivo AMD64 a executar o Azure IoT Edge com contentores Linux. Use o quickstart para configurar um dispositivo Linux ou Windows dispositivo.
- Um registo de contentores, como Azure Container Registry.
- Visual Studio Code configurado com as extensões Azure IoT Edge e Azure IoT Hub. As ferramentas Azure IoT Edge para a extensão Visual Studio Code estão em modo manutenção.
- Baixe e instale um sistema de gerenciamento de contêineres compatível com Docker em sua máquina de desenvolvimento. Configure-o para executar contêineres Linux.
Para desenvolver um módulo IoT Edge com Azure Functions, instale estes pré-requisitos adicionais na sua máquina de desenvolvimento:
Criar um projeto de função
O Azure IoT Edge para Visual Studio Code dá-lhe capacidades de gestão e modelos de código. Nesta secção, utiliza o Visual Studio Code para criar uma solução IoT Edge com uma função Azure.
Criar um novo projeto
Siga estas etapas para criar um modelo de solução de função C# personalizável.
Abre o Visual Studio Code na tua máquina de desenvolvimento.
Abra a paleta de comandos Visual Studio Code selecionando View > Command Palette.
Na paleta de comandos, adicione e execute o comando Azure IoT Edge: New IoT Edge solution. Siga estes prompts na paleta de comandos para criar sua solução:
- Selecione uma pasta: escolha a localização na sua máquina de desenvolvimento para o Visual Studio Code para criar os ficheiros de solução.
- Fornece um nome da solução: adiciona um nome descritivo para a tua solução, como FunctionSolution, ou aceita o padrão.
- Selecione um modelo de módulo: escolha Azure Functions - C#.
- Fornece um nome de módulo: nomeia o teu módulo CSharpFunction.
- Forneça um repositório de imagens Docker para o módulo: um repositório de imagens inclui o nome do seu registo de contentores e o nome da sua imagem de contentor. O portal preenche automaticamente a imagem do seu contentor a partir do passo anterior. Substitua localhost:5000 pelo valor Login server do seu registo de contentores de Azure. Pode aceder ao servidor Login na página Overview do seu registo de contentores no portal Azure. A string final parece
<registry name>.azurecr.io/csharpfunction.
Adicionar as credenciais do registo
O ficheiro de ambiente na sua solução armazena as credenciais do seu registo de contentores e partilha-as com o runtime do IoT Edge. O runtime precisa destas credenciais para transportar as suas imagens privadas para o seu dispositivo IoT Edge.
A extensão IoT Edge no Visual Studio Code tenta extrair as credenciais do registo de contentores do Azure e preenchê-las no ficheiro de ambiente. Verifique se as suas credenciais já estão no ficheiro. Se não, adicione-os agora:
- No explorador Visual Studio Code, abra o ficheiro .env.
- Atualize os campos com os valores nome de utilizador e password valores que copiou do seu registo de contentores Azure. Para os encontrar novamente, vá ao seu registo de contentores no Azure e veja na página Definições > Chaves de Acesso.
- Guarde este ficheiro.
Nota
Este tutorial utiliza credenciais de login de administrador para o Azure Container Registry, que são convenientes para cenários de desenvolvimento e teste. Para produção, use uma opção de autenticação de privilégios mínimos, como entidades de serviço. Para obter mais informações, consulte Gerenciar o acesso ao registro de contêiner.
Definir arquitetura de destino como AMD64
Os módulos Azure Functions no IoT Edge são suportados apenas em containers baseados em Linux AMD64. A arquitetura de destino padrão para Visual Studio Code é Linux AMD64, mas pode defini-la explicitamente para Linux AMD64 aqui.
- Abra a paleta de comandos e procure por Azure IoT Edge: Definir a Plataforma de Destino Padrão para a Solução Edge.
- Na paleta de comandos, selecione a arquitetura de destino AMD64 na lista de opções.
Atualizar o módulo com o código personalizado
Adicione código para que o seu módulo CSharpFunction processe mensagens na borda antes de as encaminhar para IoT Hub.
No explorador do Visual Studio Code, abre modules > CSharpFunction > CSharpFunction.cs.
Substitua o conteúdo do arquivo CSharpFunction.cs pelo código a seguir. Este código recebe telemetria sobre a temperatura ambiente e da máquina, e encaminha a mensagem para o IoT Hub apenas se a temperatura da máquina estiver acima de um limiar definido.
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; namespace Functions.Samples { public static class CSharpFunction { [FunctionName("CSharpFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. class MessageBody { public Machine machine {get; set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} } }Guarde o ficheiro.
Construa e desenvolva a sua solução IoT Edge
Na secção anterior, criaste uma solução IoT Edge e alteraste o CSharpFunction para filtrar mensagens com temperaturas de máquina reportadas abaixo do limiar aceitável. Agora, crie a solução como uma imagem de contentor e envie-a para o seu registo de contentores.
Abra o terminal integrado do Visual Studio Code. Selecione Ver > Terminal.
Faça login no Docker no terminal. Use o nome de utilizador, palavra-passe e servidor de autenticação do seu registo de contentores do Azure. Obtenha estes valores da secção Chaves de acesso do seu registo no portal Azure.
docker login -u <ACR username> -p <ACR password> <ACR login server>Poderá receber um aviso de segurança a recomendar a utilização do
--password-stdin. Embora essa prática recomendada seja recomendada para cenários de produção, ela está fora do escopo deste tutorial. Para obter mais informações, consulte a referência docker login.No explorador de Visual Studio Code, clique com o botão direito no ficheiro deployment.template.json e depois selecione Build e Push IoT Edge Solution.
O comando build e push inicia três operações. Primeiro, ele cria uma nova pasta na solução chamada config que tem o manifesto de implantação completo, que é criado a partir do modelo de implantação e outros arquivos de solução. Em segundo lugar, ele é executado
docker buildpara criar a imagem do contêiner com base no Dockerfile apropriado para sua arquitetura de destino. Em seguida, executa-sedocker pushpara enviar o repositório de imagens para o registo de contentores.Esse processo pode levar vários minutos na primeira vez, mas é mais rápido na próxima vez que você executar os comandos.
Visualizar a imagem do contentor
O Visual Studio Code mostra uma mensagem de sucesso quando você envia a imagem do seu container para o registro de contêiner. Para confirmar a operação, visualize a imagem no registro.
- No portal do Azure, aceda ao seu registo de contentores do Azure.
- Selecione Repositórios de Serviços.
- Você vê o repositório csharpfunction na lista. Selecione este repositório para ver mais detalhes.
- Na seção Tags , você verá a tag 0.0.1-amd64 . Esta tag mostra a versão e a plataforma da imagem que você criou. O ficheiromodule.json na pasta CSharpFunction define estes valores.
Implementar e executar a solução
Use o portal do Azure para implementar o seu módulo de Função num dispositivo IoT Edge, como no tutorial de início rápido. Também pode implementar e monitorizar módulos a partir do Visual Studio Code. As secções seguintes utilizam as extensões Azure IoT Edge e IoT Hub para Visual Studio Code listadas nos pré-requisitos. Instale as extensões agora, se ainda não o fez.
No explorador de Visual Studio Code, na secção Azure IoT Hub, expanda Dispositivos para ver a lista de dispositivos IoT.
Clique com o botão direito no nome do seu dispositivo IoT Edge e depois selecione Criar Implementação para Dispositivo Único.
Vá para a pasta de solução que tem o CSharpFunction. Abra a pasta config, selecione o arquivo dedeployment.amd64.json e escolha Select Edge Deployment Manifest.
No dispositivo, expanda Módulos para ver uma lista de módulos implantados e em execução. Selecione o botão Atualizar. Você pode ver o novo CSharpFunction em execução junto com o módulo SimulatedTemperatureSensor , $edgeAgent e $edgeHub.
Pode levar alguns momentos para que os novos módulos apareçam. O dispositivo IoT Edge recupera a sua nova informação de implementação do IoT Hub, inicia os novos contentores e depois reporta o estado ao IoT Hub.
Ver os dados gerados
Veja todas as mensagens que chegam ao seu hub IoT a partir dos seus dispositivos executando Azure IoT Hub: Start Monitoring Built-in Event Endpoint na paleta de comandos. Para parar de monitorizar mensagens, execute Azure IoT Hub: Stop Monitoring Built-in Event Endpoint na paleta de comandos.
Para filtrar a visualização e ver mensagens de um dispositivo específico, clique com o botão direito no dispositivo na secção Dispositivos do Azure IoT Hub do explorador do Visual Studio Code e selecione Start Monitoring Built-in Event Endpoint.
Limpar recursos
Se você planeja continuar para o próximo artigo recomendado, mantenha os recursos e configurações criados e reutilize-os. Também pode continuar a usar o mesmo dispositivo IoT Edge como dispositivo de teste.
Caso contrário, elimine a configuração local e os recursos do Azure que criou neste artigo para evitar cobranças.
Eliminar recursos do Azure
Não podes desfazer a eliminação de recursos e grupos de recursos do Azure. Certifique-se de que não elimina acidentalmente o grupo de recursos ou recursos errados. Se criaste o IoT Hub dentro de um grupo de recursos existente que tem recursos que queres manter, elimina apenas o próprio recurso do IoT Hub, não o grupo de recursos.
Para eliminar os recursos:
- Inicie sessão no portal Azure e depois selecione Resource groups.
- Selecione o nome do grupo de recursos que contém os seus recursos de teste IoT Edge.
- Reveja a lista de recursos que o seu grupo de recursos contém. Se quiser excluir todos eles, selecione Excluir grupo de recursos. Se quiseres eliminar apenas alguns, seleciona cada recurso para os eliminar individualmente.
Próximos passos
Neste tutorial, criou um módulo Azure Function com código para filtrar dados brutos gerados pelo seu dispositivo IoT Edge.
Continue para os próximos tutoriais para aprender outras formas como o Azure IoT Edge pode ajudar a transformar dados em insights de negócio na edge.