Creación de aplicaciones sin servidor con funciones de Azure y soluciones .NET

Publicado: 2023-09-21

Creación de aplicaciones sin servidor con funciones de Azure y soluciones .NET

La informática sin servidor es un modelo de ejecución en la nube que permite a los desarrolladores crear y ejecutar aplicaciones y servicios sin pensar en los servidores. Sin servidor, las aplicaciones no dependen de mantener los servidores en funcionamiento: el proveedor de la nube gestiona dinámicamente la asignación y el aprovisionamiento de servidores. Esto permite a los desarrolladores centrarse en codificar la lógica empresarial en lugar de la gestión del servidor.

Microsoft Azure Functions es un servicio informático sin servidor para crear y alojar puntos finales web y trabajos de procesamiento en segundo plano sin tener que aprovisionar ni administrar servidores. Con Azure Functions, puede ejecutar código bajo demanda en respuesta a eventos sin tener que aprovisionar ni administrar explícitamente la infraestructura. En esta publicación de blog, exploraremos cómo crear aplicaciones sin servidor con Azure Functions utilizando soluciones .NET, incluido el aprovechamiento de los servicios de desarrollo ASP.NET .

¿Qué son las funciones de Azure?

Azure Functions le permite ejecutar código en la nube sin implementar ni administrar infraestructura. Con Functions, escribes solo el código que necesitas para el problema en cuestión sin preocuparte por administrar servidores. Azure administra toda la infraestructura y los servidores por usted.

Algunos aspectos y beneficios clave de Azure Functions:

  • Basado en eventos: las funciones se activan mediante eventos de muchos servicios de Azure y de terceros. Estos incluyen solicitudes HTTP, temporizadores, colas, API sin servidor y más. Puede ejecutar código en respuesta a estos eventos.
  • Se escala automáticamente: Azure administra y escala las funciones automáticamente según la tasa de solicitudes entrantes y la carga de procesamiento. No es necesario aprovisionar ni escalar servidores manualmente.
  • Pago por ejecución: solo paga por los recursos informáticos necesarios para ejecutar su código. No hay cargos inactivos cuando sus funciones no se están ejecutando.
  • Múltiples lenguajes: Functions admite C#, JavaScript, Python, PowerShell, Java y más. Puedes desarrollar funciones en tu idioma preferido.
  • Experiencia sin servidor: con Functions, usted se concentra en escribir código y deja que Azure se encargue de todo el aprovisionamiento, la configuración y la administración del servidor. Obtienes una verdadera experiencia sin servidor.

Desarrollar funciones .NET localmente

Para desarrollar funciones .NET localmente, necesita Azure Functions Core Tools, que es una interfaz de línea de comandos para desarrollar, probar e implementar Azure Functions tanto localmente como en Azure.

Para configurar el entorno de desarrollo:

  1. Instale la última versión de .NET Core SDK
  2. Instale las herramientas principales de Azure Functions mediante la instalación de la herramienta dotnet -g Microsoft.Azure.WebJobs.Script.WebHost
  3. Cree un directorio para el proyecto de la aplicación de funciones y ejecute func init
  4. Esto creará un proyecto de funciones de muestra con una plantilla de funciones.

Ahora puede agregar código de función, probarlo localmente y publicarlo en Azure mediante la CLI de func. Agregue un archivo run.csx para una función de C# activada por HTTP:

Fuente {csharp}

Copiar

#r “Newtonsoft.Json”

utilizando Microsoft.AspNetCore.Mvc;

utilizando Microsoft.Extensions.Primitives;

usando Newtonsoft.Json;

utilizando System.Net;

usando System.Threading.Tasks;

Tarea asíncrona estática pública <IActionResult> Ejecutar (solicitud HttpRequest, registro ILogger)

{

log.LogInformation(“La función de activación HTTP de C# procesó una solicitud.”);

nombre de cadena = req.Query[“nombre”];

string requestBody = espera nuevo StreamReader(req.Body).ReadToEndAsync();

datos dinámicos = JsonConvert.DeserializeObject(requestBody);

nombre = nombre ?? datos?.nombre;

nombre de retorno! = nulo

? (ActionResult)nuevo OkObjectResult($”Hola, {nombre}”)

: new BadRequestObjectResult(“Pase un nombre en la cadena de consulta o en el cuerpo de la solicitud”);

}

Pruébelo localmente ejecutando func host start que inicia la puerta de enlace de funciones en su localhost. Ahora puede activarlo usando Postman o el navegador con http://localhost:7071/api/HttpExample?name=John.

Elegir desencadenadores y enlaces de Azure Functions

Azure Functions admite muchos orígenes y destinos de eventos diferentes denominados desencadenadores y enlaces. Elegir los activadores y enlaces correctos es importante según su caso de uso.

Algunos desencadenantes comunes en Funciones son:

  • Activador HTTP: para crear API REST y puntos finales web. El código se activa mediante solicitudes HTTP.
  • Activador de temporizador: para trabajos programados que se ejecutan según un cronograma, por ejemplo, cada 5 minutos.
  • Activador de cola: para procesar mensajes de colas de almacenamiento.
  • Blob Trigger: para reaccionar ante blobs nuevos o actualizados en Azure Blob Storage.

Los enlaces permiten que las funciones interactúen con servicios y almacenes de datos externos. Los enlaces comunes incluyen:

  • Cola de almacenamiento: para enviar mensajes a colas de almacenamiento.
  • Blob Storage: para leer y escribir en Azure Blob Storage.
  • Cosmos DB: para consultar y modificar documentos en el servicio de base de datos Azure Cosmos DB.
  • Service Bus: para manejar mensajes de colas y temas de Azure Service Bus.

Elegir el activador y los enlaces correctos ayuda a crear soluciones de un extremo a otro mediante la integración de diferentes funciones con datos y servicios.

Uso de funciones duraderas

Las funciones duraderas permiten escribir funciones con estado que permiten que secuencias de operaciones se lleven a cabo de manera confiable incluso en caso de fallas o reinicios. Le permite estructurar flujos de trabajo de larga duración como máquinas de estado.

Por ejemplo, puede crear un flujo de trabajo utilizando Durable Functions que consta de:

  • Función de orquestador: actúa como una máquina de estados que coordina la ejecución de las funciones de actividad en el orden adecuado.
  • Funciones de actividad: pequeñas unidades de trabajo independientes que pueden ser invocadas por funciones del orquestador.

Los beneficios de utilizar funciones duraderas incluyen:

  • Reintentos confiables: Durable Functions reintenta automáticamente las funciones de actividad si fallan.
  • Llamadas asincrónicas: la función del orquestador puede ejecutar funciones de actividad de forma asincrónica y esperar a que finalicen.
  • Puntos de control: el estado se controla continuamente para que los flujos de trabajo se puedan restaurar incluso después de que la aplicación se reinicie o falle.

Veamos un flujo de trabajo simple que organiza dos actividades:

Fuente {csharp}

Copiar

[Nombre de función ("Orquestador")]

Tarea asíncrona estática pública RunOrchestrator (

[OrchestrationTrigger] contexto IDurableOrchestrationContext)

{

var salida1 = espera contexto.CallActivityAsync<cadena>(“DotNetActivity”, “Hola”);

var salida2 = espera contexto.CallActivityAsync<cadena>(“DotNetActivity”, salida1);

// devolver resultado

devolver salida2;

}

[Nombre de función ("Actividad DotNet")]

Tarea estática pública <cadena> Ejecutar (

entrada de cadena [ActivityTrigger],

Registro de ILogger)

{

log.LogInformation($”Función DotNetActivity procesada: {entrada}”);

return Task.FromResult(input.ToUpper());

}

Las funciones duraderas permiten dividir procesos complejos en flujos de trabajo confiables.

Mejores prácticas para el desarrollo de Azure Functions

Algunas prácticas recomendadas a seguir para el desarrollo de Azure Functions:

  • Utilice la inyección de dependencia: servicios de inyección de dependencia en funciones para una mejor capacidad de prueba.
  • Evite procesos de ejecución prolongada: las funciones están destinadas a ejecutar código en pequeñas unidades de procesamiento. Mantenga breve la ejecución del código.
  • Utilice tipos de datos inmutables: las funciones no tienen estado, así que evite tipos mutables/efectos secundarios que puedan causar problemas.
  • Manejo de errores centralizado: agregue una lógica de manejo de errores común en lugar de manejar los errores individualmente en todas partes.
  • Registro estructurado: el registro estandarizado ayuda con la depuración, el monitoreo y los registros de auditoría.
  • Limitación y reintentos: Maneje los errores de limitación implementando reintentos con retrasos exponenciales.
  • Control de versiones: versión estricta de activadores, enlaces y entradas/salidas para evitar cambios importantes.
  • Monitoreo e instrumentación: utilice herramientas como Application Insights para registrar, monitorear el rendimiento y analizar el uso.
  • Utilice enlaces de contexto: aproveche los enlaces de contexto para acceder a elementos como la configuración de la aplicación sin dependencias adicionales.

Seguir estas prácticas recomendadas ayuda a crear aplicaciones sin servidor sólidas, confiables y escalables con Azure Functions.

Implementación de funciones en Azure

Una vez que las funciones estén listas, puede implementarlas en Azure a través de la CLI de Azure, PowerShell, Visual Studio o directamente desde la CLI de herramientas principales de Azure Functions:

Copiar

func azure functionapp publicar <nombre-aplicación-función>

Esto publicará la carpeta del proyecto de funciones en una aplicación de funciones de Azure. Algunos beneficios clave de implementar funciones en Azure incluyen:

  • Escalado automático: las funciones se escalan según el volumen de solicitudes entrantes o los activadores de tiempo.
  • Alta disponibilidad: varias instancias en los centros de datos proporcionan alta disponibilidad.
  • Monitoreo y registro: utilice herramientas como Application Insights para monitorear el rendimiento, los errores, etc.
  • Plataforma sin servidor: no hay servidores que aprovisionar/administrar. Solo te concentras en el código.
  • Implementación continua: utilice canalizaciones de CI/CD para la implementación automatizada de cambios de código.

Azure maneja toda la infraestructura, evita costos inactivos y proporciona una plataforma totalmente sin servidor para ejecutar aplicaciones sin servidor a escala de manera confiable.

Conclusión

La informática sin servidor con Azure Functions permite a los desarrolladores centrarse en la lógica empresarial mientras descargan toda la infraestructura y la gestión de operaciones en Azure. El soporte de desarrollo nativo de .NET, incluida la opción de contratar desarrolladores principales de ASP.NET , permite crear soluciones robustas sin servidor con facilidad en C#. Con desencadenadores, enlaces y funciones duraderas, los desarrolladores pueden crear arquitecturas y flujos de trabajo basados ​​en eventos de un extremo a otro como funciones con estado y sin estado. Combinadas con las mejores prácticas, Azure Functions permiten crear e implementar aplicaciones sin servidor en la nube con simplicidad y escala.