---
title: 'Tutorial: Implementar funções azure como módulos - Borda Azure IoT'
description: Neste tutorial, desenvolve-se uma função Azure como módulo IoT Edge e, em seguida, implanta-a num dispositivo de borda.
author: kgremban
manager: philmea
ms.author: kgremban
ms.date: 06/25/2019
ms.topic: tutorial
ms.service: iot-edge
services: iot-edge
ms.custom: mvc
ms.openlocfilehash: f909ca12ce080fc5d1241bcc649c041361e405a7
ms.sourcegitcommit: 7581df526837b1484de136cf6ae1560c21bf7e73
ms.translationtype: MT
ms.contentlocale: pt-PT
ms.lasthandoff: 03/31/2020
ms.locfileid: "80421165"
---
# <a name="tutorial-deploy-azure-functions-as-iot-edge-modules"></a>Tutorial: Implementar funções azure como módulos IoT Edge
Pode utilizar as Funções do Azure para implementar código que aplica a sua lógica de negócio diretamente nos seus dispositivos Azure IoT Edge. Este tutorial explica-lhe como criar e implementar uma função do Azure que filtra dados de sensores no dispositivo IoT Edge simulado. Vai utilizar o dispositivo IoT Edge simulado que criou na Implementação do Azure IoT Edge num dispositivo simulado em inícios rápidos do [Windows](quickstart.md) ou do [Linux](quickstart-linux.md). Neste tutorial, ficará a saber como:
> [!div class="checklist"]
>
> * Utilize o Visual Studio Code para criar uma função do Azure.
> * Utilizar o VS Code e o Docker para criar uma imagem do Docker e publicá-la num registo de contentor.
> * Implementar o módulo a partir do registo de contentor no seu dispositivo IoT Edge.
> * Ver dados filtrados.
<center>
![Diagrama - Arquitetura tutorial: módulo de função de estágio e de implantação](./media/tutorial-deploy-function/functions-architecture.png)
</center>
A função do Azure que criou neste tutorial filtra os dados de temperatura que são gerados pelo seu dispositivo. A função envia apenas mensagens de origem para o Hub IoT do Azure quando a temperatura é superior a um limiar especificado.
[!INCLUDE [quickstarts-free-trial-note](../../includes/quickstarts-free-trial-note.md)]
## <a name="prerequisites"></a>Pré-requisitos
Antes de iniciar este tutorial, você deveria ter passado pelo tutorial anterior para configurar o seu ambiente de desenvolvimento para o desenvolvimento de contentores Linux: [Desenvolver módulos IoT Edge para dispositivos Linux](tutorial-develop-for-linux.md). Ao completar esse tutorial, deve ter os seguintes pré-requisitos no lugar:
* Um [Hub IoT](../iot-hub/iot-hub-create-through-portal.md) no escalão gratuito ou standard no Azure.
* Um [dispositivo Linux que executa o Edge Azure IoT](quickstart-linux.md)
* Um registo de contentores, como o Registo de [Contentores Azure.](https://docs.microsoft.com/azure/container-registry/)
* [Código de estúdio visual](https://code.visualstudio.com/) configurado com as [ferramentas Azure IoT](https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-tools).
* [Docker CE](https://docs.docker.com/install/) configurado para executar contentores Linux.
Para desenvolver um módulo IoT Edge com funções Azure, instale os seguintes pré-requisitos adicionais na sua máquina de desenvolvimento:
* [Extensão C# para Visual Studio Code (com tecnologia da OmniSharp)](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp).
* [O SDK .NET Core 2.1](https://www.microsoft.com/net/download).
## <a name="create-a-function-project"></a>Criar um projeto de função
As ferramentas Azure IoT para o Código de Estúdio Visual que instalou nos pré-requisitos fornecem capacidades de gestão, bem como alguns modelos de código. Nesta secção, vai utilizar o Visual Studio Code para criar uma solução do IoT Edge que contém uma função do Azure.
### <a name="create-a-new-project"></a>Criar um novo projeto
Crie um modelo de solução de função C# que possa personalizar com o seu próprio código.
1. Abra o Visual Studio Code no computador de desenvolvimento.
2. Abra a paleta de comando vs Código selecionando a Paleta de**Comando** **de Visualização** > .
3. Na paleta de comandos, introduza e execute o comando **Azure IoT Edge: Nova solução do IoT Edge**. Siga as instruções na paleta de comandos para criar a sua solução.
   | Campo | Valor |
   | ----- | ----- |
   | Selecionar pasta | Escolha a localização no computador de desenvolvimento na qual o VS Code vai criar os ficheiros da solução. |
   | Indicar um nome para a solução | Introduza um nome descritivo para a sua solução, como **FunctionSolution,** ou aceite o padrão. |
   | Selecionar modelo de módulo | Escolha **funções Azure - C#**. |
   | Indicar um nome para o módulo | Atribua o nome **CSharpFunction** ao módulo. |
   | Indicar o repositório de imagens do Docker para o módulo | Os repositórios de imagens incluem o nome do seu registo de contentor e o nome da sua imagem de contentor. A imagem de contentor é pré-preenchida no passo anterior. Substitua **localhost:5000** pelo valor do servidor de início de sessão do registo de contentor do Azure Container Registry. Pode obter o servidor de início de sessão na página Overview (Descrição Geral) do registo de contentor no portal do Azure. A corda final \<parece\>o nome do registo .azurecr.io/CSharpFunction. |
   ![Fornecer repositório de imagens do Docker](./media/tutorial-deploy-function/repository.png)
### <a name="add-your-registry-credentials"></a>Adicionar as credenciais do registo
O ficheiro de ambiente armazena as credenciais do seu registo de contentor e partilha-as com o runtime do IoT Edge. O runtime precisa destas credenciais para solicitar as imagens privadas para o dispositivo IoT Edge.
1. No explorador do VS Code, abra o ficheiro .env.
2. Atualize os campos com os valores **nome de utilizador** e **palavra-passe** que copiou do seu Azure Container Registry.
3. Guarde este ficheiro.
### <a name="select-your-target-architecture"></a>Selecione a sua arquitetura alvo
Atualmente, o Visual Studio Code pode desenvolver módulos C para dispositivos Linux AMD64 e Linux ARM32v7. Você precisa selecionar qual arquitetura você está alvo com cada solução, porque o recipiente é construído e executado de forma diferente para cada tipo de arquitetura. O padrão é Linux AMD64.
1. Abra a paleta de comando e procure o **Azure IoT Edge: Definir**a Plataforma de Destino Padrão para Solução de Borda , ou selecione o ícone de atalho na barra lateral na parte inferior da janela.
2. Na paleta de comando, selecione a arquitetura alvo da lista de opções. Para este tutorial, estamos a usar uma máquina virtual Ubuntu como dispositivo IoT Edge, por isso manterá o **amd64**padrão .
### <a name="update-the-module-with-custom-code"></a>Atualizar o módulo com o código personalizado
Vamos adicionar um código adicional para que o módulo processe as mensagens na borda antes de reencaminhar para o IoT Hub.
1. No Código do Estúdio Visual, os **módulos abertos** > **CSharpFunction** > **CSharpFunction.cs**.
1. Substitua o conteúdo do ficheiro **CSharpFunction.cs** pelo seguinte código. Este código recebe telemetria sobre temperatura ambiente e máquina, e só reencaminha a mensagem para o Hub IoT se a temperatura da máquina estiver acima de um limiar definido.
   ```csharp
   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;}
       }
   }
   ```
1. Guarde o ficheiro.
## <a name="build-your-iot-edge-solution"></a>Criar a sua solução do IoT Edge
Na secção anterior, criou uma solução IoT Edge e modificou o **CSharpFunction** para filtrar mensagens com temperaturas da máquina reportadas abaixo do limiar aceitável. Agora, tem de criar a solução como uma imagem de contentor e enviá-la para o registo de contentor.
Nesta secção, fornece as credenciais para o seu registo de contentores pela segunda vez (a primeira estava no ficheiro **.env** da sua solução IoT Edge) assinando localmente a partir da sua máquina de desenvolvimento para que o Código do Estúdio Visual possa empurrar as imagens para o seu registo.
1. Abra o terminal integrado vs Código selecionando**o Terminal** **de Visualização** > .
2. Introduza o comando seguinte no terminal integrado e inicie sessão no seu registo de contentor. Utilize o nome do utilizador e o servidor de início de sessão que copiou do registo de contentor do Azure anteriormente.
    ```csh/sh
    docker login -u <ACR username> <ACR login server>
    ```
    Quando for solicitado a palavra-passe, cola a palavra-passe (não será visível na janela do terminal) para o registo do recipiente e prima **Enter**.
    ```csh/sh
    Password: <paste in the ACR password and press enter>
    Login Succeeded
    ```
3. No explorador de código VS, clique no ficheiro deployment.template.json e selecione **Build and Push IoT Edge solution**.
Quando diz ao Visual Studio Code para construir a sua solução, primeiro pega na informação no modelo de implementação e gera um ficheiro implementação.json numa nova pasta chamada **config**. Em seguida, executa dois comandos `docker build` `docker push`no terminal integrado: e . O comando de construção constrói o seu código e contentoriza as funções. Em seguida, o comando push empurra o código para o registo do recipiente que especificou quando inicializou a solução.
## <a name="view-your-container-image"></a>Ver a imagem de contentor
O Visual Studio Code apresenta uma mensagem de êxito quando a imagem de contentor é enviada para o seu registo de contentor. Se quiser confirmar a operação bem-sucedida, pode ver a imagem no registo.
1. No portal do Azure, procure o registo de contentor do Azure.
2. Selecione **Repositórios**.
3. Deverá ver o repositório **csharpfunction** na lista. Selecione este repositório para ver mais detalhes.
4. Na secção **Etiquetas**, deverá ver a etiqueta **0.0.1-amd64**. Esta etiqueta indica a versão e a plataforma da imagem criada. Estes valores estão definidos no ficheiro module.json na pasta CSharpFunction.
## <a name="deploy-and-run-the-solution"></a>Implementar e executar a solução
Pode utilizar o portal do Azure para implementar o seu módulo de função num dispositivo IoT Edge, como fez nos inícios rápidos. Também pode implementar e monitorizar os módulos a partir do Visual Studio Code. As seguintes secções utilizam as ferramentas Azure IoT para o Código VS que constam dos pré-requisitos. Instale a extensão agora, se ainda não o tiver feito.
1. No explorador do VS Code, expanda a secção **Dispositivos do Hub IoT do Azure**.
2. Carregue com o botão direito do rato no nome do seu dispositivo do IoT Edge e, em seguida, selecione **Criar Implementação para o dispositivo único**.
3. Procure a pasta de solução que contém a **CSharpFunction**. Abra a pasta config, selecione o ficheiro **deployment.json** e, em seguida, escolha **Select Edge Deployment Manifest**.
4. Atualize a secção **Dispositivos do Hub IoT do Azure**. Deve ver o novo **CSharpFunction** a funcionar juntamente com o módulo **SimuladoSensor de Temperatura** e o **$edgeAgent** e **$edgeHub**. Pode levar alguns momentos para os novos módulos aparecerem. O seu dispositivo IoT Edge tem de recuperar as suas novas informações de implementação do IoT Hub, iniciar os novos contentores e, em seguida, reportar o estado de volta ao IoT Hub.
   ![Ver os módulos implementados no VS Code](./media/tutorial-deploy-function/view-modules.png)
## <a name="view-the-generated-data"></a>Ver os dados gerados
Pode ver todas as mensagens que chegam ao seu hub IoT executando **o Hub Azure IoT: Comece a monitorizar** o ponto final de evento incorporado na paleta de comando.
Também pode filtrar para ver todas as mensagens que chegam ao seu hub IoT a partir de um dispositivo específico. Clique no dispositivo na secção **dispositivos Hub Azure IoT** e selecione **Start Monitoring Built-in Event Endpoint**.
Para parar de monitorizar as mensagens, execute o comando **Azure IoT Hub: Pare** de monitorizar o ponto final de evento incorporado na paleta de comando.
## <a name="clean-up-resources"></a>Limpar recursos
Se planeia avançar para o próximo artigo recomendado, pode manter os recursos e as configurações que criou e reutilizá-los. Também pode continuar a utilizar o mesmo dispositivo IoT Edge como um dispositivo de teste.
Caso contrário, pode eliminar as configurações locais e os recursos do Azure que criou neste artigo para evitar custos.
[!INCLUDE [iot-edge-clean-up-cloud-resources](../../includes/iot-edge-clean-up-cloud-resources.md)]
## <a name="next-steps"></a>Passos seguintes
Neste tutorial, criou um módulo da função do Azure com código para filtrar os dados não processados que são gerados pelo seu dispositivo IoT Edge. Quando estiver pronto para construir os seus próprios módulos, poderá aprender mais sobre como [desenvolver com o Azure IoT Edge para código de estúdio visual.](how-to-vs-code-develop-module.md)
Continue para os próximos tutoriais para saber mais sobre outras formas em que o Azure IoT Edge o pode ajudar a transformar os dados em informações empresariais na periferia.
> [!div class="nextstepaction"]
> [Localizar médias com um período flutuante no Azure Stream Analytics](tutorial-deploy-stream-analytics.md)