Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
se aplica a: IoT Edge 1.5
Importante
IoT Edge 1.5 LTS es la versión compatible. IoT Edge 1.4 LTS finaliza su ciclo de vida el 12 de noviembre de 2024. Si está en una versión anterior, consulte Actualización de IoT Edge.
Use Azure Functions para implementar código que ejecute la lógica de negocios directamente en los dispositivos de Azure IoT Edge. En este tutorial se muestra cómo crear e implementar una función de Azure que filtra los datos del sensor en un dispositivo IoT Edge simulado. Use el dispositivo IoT Edge simulado que creó en los inicios rápidos. En este tutorial, aprenderá a:
- Usar Visual Studio Code para crear una instancia de Azure Functions
- Uso de Visual Studio Code y Docker para crear una imagen de Docker y publicarla en un registro de contenedor
- Implementación del módulo desde el registro de contenedor en el dispositivo IoT Edge
- Visualización de datos filtrados
La función de Azure que crea en este tutorial filtra los datos de temperatura generados por el dispositivo. La función solo envía mensajes ascendentes a Azure IoT Hub cuando la temperatura está por encima de un umbral especificado.
Si no tiene una cuenta de Azure, cree una cuenta gratuita antes de comenzar.
Requisitos previos
Antes de comenzar este tutorial, siga el tutorial para configurar el entorno de desarrollo para el desarrollo de contenedores de Linux: Desarrollo de módulos de Azure IoT Edge mediante Visual Studio Code. Cuando termines, tendrás los siguientes prerrequisitos:
- Una instancia de IoT Hub gratuita o de nivel estándar en Azure
- Un dispositivo AMD64 que ejecute Azure IoT Edge con contenedores de Linux. Use el inicio rápido para configurar un dispositivo Linux o un dispositivo Windows.
- Un registro de contenedor, como Azure Container Registry
- Visual Studio Code se configura con las extensiones de Azure IoT Edge y Azure IoT Hub . Las herramientas de Azure IoT Edge para la extensión de Visual Studio Code están en modo de mantenimiento.
- Descargue e instale un sistema de administración de contenedores compatible con Docker en la máquina de desarrollo. Establézcalo para ejecutar contenedores de Linux.
Para desarrollar un módulo de IoT Edge con Azure Functions, instale estos requisitos previos adicionales en la máquina de desarrollo:
Creación de un proyecto de aplicación de una función
Azure IoT Edge para Visual Studio Code proporciona funcionalidades de administración y plantillas de código. En esta sección, usará Visual Studio Code para crear una solución de IoT Edge con una función de Azure.
Creación de un nuevo proyecto
Siga estos pasos para crear una plantilla de solución de función de C# personalizable.
Abra Visual Studio Code en el equipo de desarrollo.
Para abrir la paleta de comandos de Visual Studio Code, seleccione Ver>paleta de comandos.
En la paleta de comandos, agregue y ejecute el comando Azure IoT Edge: Nueva solución de IoT Edge. Para crear la solución, siga estas indicaciones de la paleta de comandos:
- Seleccione una carpeta: elija la ubicación en la máquina de desarrollo en la que Visual Studio Code creará los archivos de la solución.
- Proporcione un nombre de solución: agregue un nombre descriptivo para la solución, como FunctionSolution, o acepte el valor predeterminado.|
- Seleccione una plantilla de módulo: elija Azure Functions - C#.
- Proporcione un nombre de módulo | Asigne al módulo el nombre CSharpFunction.
- Proporcione un repositorio de imágenes de Docker para el módulo. Un repositorio de imágenes incluye el nombre del registro de contenedor y el nombre de la imagen de contenedor. La imagen de contenedor se rellena previamente a partir del último paso. Reemplace localhost:5000 por el valor del servidor de autenticación de su registro de contenedor de Azure. Puede recuperar el servidor de inicio de sesión en la página Información general del registro de contenedor en Azure Portal. La cadena final se parece a <nombre del Registro>.azurecr.io/csharpfunction.
Adición de las credenciales del Registro
El archivo de entorno de la solución almacena las credenciales del registro de contenedor y las comparte con el entorno de ejecución de IoT Edge. El entorno de ejecución necesita estas credenciales para extraer las imágenes privadas e insertarlas en el dispositivo IoT Edge.
La extensión de IoT Edge en Visual Studio Code intenta extraer de Azure las credenciales del registro del contenedor y rellenar con ellas el archivo de entorno. Compruebe si las credenciales ya están en el archivo. Si no lo están, agréguelas ahora:
- En el explorador de Visual Studio Code, abra el archivo
.env
. - Actualice los campos con los valores de nombre de usuario y contraseña que copió de su registro de contenedor de Azure. Para encontrarlos de nuevo, vaya al registro de contenedor en Azure y busque en la página Configuración>Claves de acceso .
- Guarde este archivo.
Nota
En este tutorial se usan credenciales de inicio de sesión de administrador de Azure Container Registry, que son prácticas para escenarios de desarrollo y pruebas. Para producción, use una opción de autenticación con privilegios mínimos, como entidades de servicio. Para más información, consulte Administración del acceso al registro de contenedor.
Establecimiento de la arquitectura de destino en AMD64
Los módulos de Azure Functions en IoT Edge solo se admiten en contenedores basados en Linux AMD64. La arquitectura de destino predeterminada para Visual Studio Code es Linux AMD64, pero la establece explícitamente en Linux AMD64 aquí.
Abra la paleta de comandos y busque Azure IoT Edge: Establecer la plataforma de destino predeterminada para la solución perimetral.
En la paleta de comandos, seleccione la arquitectura de destino AMD64 en la lista de opciones.
Actualización del módulo con código personalizado
Agregue código para que el módulo CSharpFunction procese mensajes en el perímetro antes de reenviarlos a IoT Hub.
En el explorador de Visual Studio Code, abra los módulos>CSharpFunction>CSharpFunction.cs.
Reemplace el contenido del archivo CSharpFunction.cs por el código siguiente. Este código recibe telemetría sobre la temperatura ambiente y la máquina y reenvía el mensaje a IoT Hub solo si la temperatura de la máquina está por encima de un umbral 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 el archivo.
Compilación e inserción de una solución IoT Edge
En la sección anterior, creó una solución de IoT Edge y cambió CSharpFunction para filtrar los mensajes con temperaturas notificadas de la máquina por debajo del umbral aceptable. Ahora compile la solución como una imagen de contenedor e insértela en el registro de contenedor.
Abra el terminal integrado de Visual Studio Code. Seleccione Ver>terminal.
Inicie sesión en Docker en el terminal. Use el nombre de usuario, la contraseña y el servidor de inicio de sesión del registro de contenedor de Azure. Obtenga estos valores en la sección Claves de acceso del registro en Azure Portal.
docker login -u <ACR username> -p <ACR password> <ACR login server>
Puede recibir una advertencia de seguridad que recomienda el uso de
--password-stdin
. Aunque ese procedimiento se recomienda para escenarios de producción, está fuera del ámbito de este tutorial. Para más información, consulte la referencia de inicio de sesión de Docker .En el explorador de Visual Studio Code, haga clic con el botón derecho en el archivo deployment.template.json y seleccione Compilar e insertar solución ioT Edge.
El comando de compilación e inserción inicia tres operaciones. En primer lugar, crea una nueva carpeta en la solución denominada config que tiene el manifiesto de implementación completo, que se compila a partir de la plantilla de implementación y otros archivos de solución. En segundo lugar, se ejecuta
docker build
para compilar la imagen de contenedor en función del Dockerfile adecuado para la arquitectura de destino. A continuación, ejecutadocker push
para insertar el repositorio de imágenes en el registro de contenedor.Este proceso puede tardar varios minutos la primera vez, pero es más rápido la próxima vez que ejecute los comandos.
Visualización de una imagen de contenedor
Visual Studio Code muestra un mensaje de confirmación cuando la imagen de contenedor se inserta en el registro de contenedor. Para confirmar la operación, vea la imagen en el Registro.
- En el portal de Azure, vaya al registro de contenedores de Azure.
- Seleccione Repositorios de servicios>.
- Verá el repositorio csharpfunction en la lista. Seleccione este repositorio para ver más detalles.
- En la sección Etiquetas , verá la etiqueta 0.0.1-amd64 . Esta etiqueta muestra la versión y la plataforma de la imagen que ha compilado. Estos valores se establecen en el archivo module.json de la carpeta CSharpFunction .
Implementación y ejecución de la solución
Use Azure Portal para implementar el módulo de Functions en un dispositivo IoT Edge como en el inicio rápido. También puede implementar y supervisar módulos desde Visual Studio Code. En las secciones siguientes se usan las extensiones de Azure IoT Edge e IoT Hub para Visual Studio Code enumeradas en los requisitos previos. Instale las extensiones ahora si aún no lo ha hecho.
En el explorador de Visual Studio Code, en la sección Azure IoT Hub , expanda Dispositivos para ver la lista de dispositivos IoT.
Haga clic con el botón derecho en el nombre del dispositivo IoT Edge y seleccione Crear implementación para un único dispositivo.
Vaya a la carpeta de la solución que tiene CSharpFunction. Abra la carpeta config, seleccione el archivo deployment.amd64.json y luego elija Seleccionar manifiesto de implementación perimetral.
En el dispositivo, expanda Módulos para ver una lista de módulos implementados y en ejecución. Seleccione el botón actualizar. Puede ver la nueva CSharpFunction en ejecución junto con el módulo SimulatedTemperatureSensor , $edgeAgent y $edgeHub.
Los nuevos módulos pueden tardar unos instantes en aparecer. El dispositivo IoT Edge recupera su nueva información de implementación de IoT Hub, inicia los nuevos contenedores y, a continuación, notifica el estado a IoT Hub.
Visualización de los datos generados
Consulte todos los mensajes que llegan a su centro de IoT desde sus dispositivos ejecutando Azure IoT Hub: Iniciar la supervisión del punto de conexión de eventos integrado en la paleta de comandos. Para detener el monitoreo de mensajes, ejecute Azure IoT Hub: Detener el monitoreo del punto de conexión de eventos integrado en la paleta de comandos.
Para filtrar la vista y ver los mensajes desde un dispositivo específico, haga clic con el botón derecho en el dispositivo en la secciónDispositivos de > del explorador de Visual Studio Code y seleccione Iniciar supervisión del punto de conexión de eventos integrado.
Limpieza de recursos
Si tiene previsto continuar con el siguiente artículo recomendado, mantenga los recursos y las configuraciones que creó y reutilícelas. También puede seguir usando el mismo dispositivo de IoT Edge como dispositivo de prueba.
De lo contrario, elimine las configuraciones locales y los recursos de Azure que creó en este artículo para evitar cargos.
Eliminación de recursos de Azure
La eliminación de los recursos de Azure y de los grupos de recursos es un proceso irreversible. Asegúrese de no eliminar por accidente el grupo de recursos o los recursos equivocados. Si creó ioT Hub dentro de un grupo de recursos existente que tiene recursos que desea conservar, elimine solo el propio recurso de IoT Hub, no el grupo de recursos.
Para eliminar los recursos:
Inicie sesión en Azure Portal y seleccione Grupos de recursos.
Seleccione el nombre del grupo de recursos que contiene los recursos de prueba de IoT Edge.
Revise la lista de recursos que contiene el grupo de recursos. Si desea eliminar todos ellos, puede seleccionar Eliminar grupo de recursos. Si desea eliminar solo algunos de ellos, puede seleccionar cada recurso para eliminarlos individualmente.
Pasos siguientes
En este tutorial, ha creado un módulo de Azure Functions que contiene código para filtrar los datos sin procesar que genera un dispositivo IoT Edge.
Puede continuar con los siguientes tutoriales para aprender otras formas en las que Azure IoT Edge puede ayudarle a convertir los datos en información empresarial en el perímetro.