Cómo trabajar con Azure Functions en C#

 C Programming >> Programación C >  >> Tags >> Azure
Cómo trabajar con Azure Functions en C#

Azure Functions es la oferta informática sin servidor en la nube de Microsoft Azure. Básicamente, "sin servidor" significa que ni siquiera necesita una máquina virtual para ejecutar una función de Azure. Las funciones de Azure son solo una implementación de la plataforma como servicio (PaaS), que se basa en un modelo de programación basado en eventos. Este artículo presenta una introducción a Azure Functions, por qué son útiles y cómo podemos trabajar con ellas.

Como no hay servidores que deba administrar, Azure Functions puede escalar automáticamente y solo paga por el tiempo que se ejecuta su código. Puede aprovechar Azure Functions para el procesamiento de eventos en tiempo real o para trabajos de procesamiento de datos programados, como copia de seguridad de datos programada o limpieza de datos. Incluso puede usar Azure Functions como back-end sin servidor para aplicaciones móviles.

Aquí hay un vistazo rápido a algunas de las características sorprendentes de Azure Functions:

  • Implementación de código flexible (a través de Azure Portal o GitHub, por ejemplo)
  • Compatibilidad con varios idiomas (C#, F#, Java, Node.js o PHP)
  • Soporte para dependencias externas a través de NuGet o NPM
  • Fáciles integraciones con otros servicios de Azure

Para trabajar con los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2022 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2022 aquí.

También debe tener la versión más reciente de Azure Function Tools y una suscripción de Azure activa. Las herramientas de funciones de Azure se incluyen como parte de la carga de trabajo de desarrollo de Azure en Visual Studio 2022.

¿Qué son las funciones de Azure? ¿Por qué los necesitamos?

Azure Functions son servicios alojados en la nube de Microsoft Azure que ejecutan código a pedido, sin necesidad de aprovisionar o administrar la infraestructura. Usted escribe solo el código que necesita para la tarea en cuestión y Azure Functions se encarga de todo lo demás.

Una función de Azure puede activarse mediante un evento (una solicitud HTTP) o según una programación (usando una expresión CRON). Puede probar rápidamente funciones localmente mientras escribe sus funciones antes de implementarlas en Azure.

Ventajas y desventajas de las funciones de Azure

Costos reducidos: Una de las razones más convincentes para usar Azure Functions es que reduce drásticamente el costo de ejecutar aplicaciones. Solo tiene que pagar por los recursos que ha consumido, y no se consumen recursos hasta que se ejecuta su función.

Flexibilidad: Puede crear e implementar nuevas funciones basadas en eventos rápidamente a medida que cambian sus requisitos, y también puede modificar las funciones existentes.

Escalabilidad: Azure Functions proporciona escalabilidad al permitirle activar rápidamente nuevas instancias de una función cuando aumenta la demanda. Esto elimina la necesidad de escalar manualmente las instancias hacia arriba y hacia abajo por adelantado, un proceso que, si la demanda aumenta de forma impredecible o con poca frecuencia, se vuelve laborioso y también puede resultar ineficiente.

Desencadenadores y enlaces en Azure Functions

Azure Functions usa desencadenadores y, opcionalmente, enlaces. Los desencadenadores son funciones definidas por el usuario que especifican cómo se ejecutará una función de Azure. Un activador puede definirse mediante un atributo de código y activarse mediante un mensaje de cola, un temporizador, una solicitud HTTP, un blob, etc.

Los disparadores tienen enlaces de entrada que definen los datos disponibles para el código durante la ejecución. El cuerpo de la solicitud HTTP normalmente se pasa como un objeto JSON al parámetro de entrada de la función de Azure en un desencadenador HTTP.

El enlace es una forma de conectar recursos a una función de Azure mediante declaración. Hay dos tipos de enlaces:entrada y salida. Mientras que el primero permite ingresar datos en la Función de Azure, el segundo permite que la Función de Azure envíe datos a recursos externos. Solo puede tener un desencadenador para una función de Azure, pero varios enlaces.

Tipos de disparadores en Azure Functions

Los diferentes tipos de desencadenadores en Azure Functions le permiten configurar una función que se ejecuta cuando se realiza una actualización de un recurso, como un desencadenador de centro de eventos que envía una alerta por correo electrónico cada vez que se actualiza su servicio.

Activador HTTP: Un disparador HTTP usa un punto final HTTP para llamar a la función a través de una solicitud HTTP. Puede usar disparadores HTTP para crear una aplicación web sin servidor para recibir webhooks de otros servicios.

Disparador de temporizador: Se llama a un disparador de temporizador en un horario predefinido. Este programa se puede expresar en sintaxis CRON o mediante intervalos. El activador del temporizador es útil para programar cualquier trabajo regular, como una tarea de limpieza o un informe semanal por correo electrónico.

Activador de Centros de eventos: Un desencadenador de Event Hubs responde a un mensaje de transmisión de Event Hubs. Al usar el atributo EventHubTrigger, puede vincular el flujo de mensajes de todas las particiones.

Activador de Blob Storage: Un desencadenador de blobs responde a eventos en Azure Blob Storage. Un desencadenador de blob puede iniciar una función de Azure cada vez que se crea un blob nuevo o se actualiza un blob existente.

Activador de Cosmos DB: Un desencadenador de Cosmos DB responde a eventos generados por Azure Cosmos DB. Por ejemplo, si desea que su función de Azure se ejecute cuando se crea un nuevo documento en la base de datos, puede crear un desencadenador de Cosmos DB y agregar el código necesario para controlar el evento.

Activador de Event Grid: Un desencadenador de Event Grid responde a los eventos de Azure Event Grid. Event Grid es un servicio de enrutamiento de eventos sin servidor que le permite crear reglas que enrutan eventos desde servicios de Azure, como Blob Storage, grupos de recursos y recursos de terceros, a cualquier destino compatible con Event Grid.

Disparador de almacenamiento en cola: Un desencadenador de Azure Queue Storage se activa cuando se agregan mensajes a Azure Queue Storage. Azure Queue Storage proporciona mensajería asíncrona y confiable entre los componentes de la aplicación.

Webhook genérico: Un webhook es análogo a una devolución de llamada HTTP definida por el usuario. Proporciona una forma liviana de recibir notificaciones de otro servicio cuando ocurre algo. Un webhook genérico es otra categoría de activador que se activa cuando se origina una solicitud HTTP desde un servicio.

Webhook de GitHub: Un disparador de webhook de GitHub se ejecuta cuando ocurre un evento en su repositorio de GitHub, como la creación de una nueva rama, la eliminación de una rama existente o el código confirmado o comentado.

Disparador de Service Bus: Un disparador de Service Bus responde a los mensajes de una cola o tema de Azure Service Bus.

Cree un proyecto de aplicación de Azure Functions en Visual Studio

En primer lugar, creemos un proyecto de aplicación de .NET Azure Functions en Visual Studio. Suponiendo que Visual Studio 2022 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un proyecto de Azure Functions.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Azure Functions" de la lista de plantillas que se muestra.
  4. Haga clic en Siguiente.
  5. En la ventana "Configure su nuevo proyecto" que se muestra a continuación, especifique el nombre y la ubicación del nuevo proyecto.
  6. Haga clic en Crear.
  7. En la pantalla "Crear una nueva aplicación de Azure Functions", seleccione el tipo de activador que le gustaría usar para su función de Azure.
  8. Haga clic en Crear.

Ahora debería tener un nuevo proyecto de aplicación de .NET Azure Functions listo para usar en Visual Studio 2022. Usaremos este proyecto en las secciones siguientes de este artículo.

Crear una nueva función de Azure

De forma predeterminada, se creará automáticamente una función de Azure denominada Function1 dentro de un archivo denominado Function1.cs. Reemplacemos la función predeterminada con el siguiente código:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Azure_FunctionAppDemo
{
    public static class Demo
    {
        [FunctionName("Demo")]
        public static async Task<IActionResult> Run(
          [HttpTrigger(AuthorizationLevel.Function, "get",
          "post", Route = null)] HttpRequest request,
            ILogger logger)
        {
            logger.LogInformation("An HTTP triggered Azure Function.");
            string requestBody = String.Empty;
            using (StreamReader streamReader = new StreamReader(request.Body))
            {
                requestBody = await streamReader.ReadToEndAsync();
            }
            return new OkObjectResult(!string.IsNullOrEmpty(requestBody));
        }
    }

Consulte la lista de códigos anterior. Una función de Azure está representada por una clase estática que tiene una función estática denominada Ejecutar. En este ejemplo, el nombre de la función de Azure es Demo. El atributo FunctionName se usa para indicar que la función es una función de Azure. Además, marca el método Run como punto de entrada. El nombre de la función debe ser único dentro de un proyecto.

Los dos parámetros del método Run son de tipo HttpRequest e ILogger. El primer parámetro le permite trabajar con el objeto HttpRequest (para recuperar los metadatos de la solicitud, por ejemplo). El segundo parámetro le permite registrar datos relacionados con su función de Azure en un destino de registro predefinido.

Sabemos que las funciones de Azure se ejecutan en función de disparadores preconfigurados. El uso del atributo HttpTrigger indica que la función de Azure denominada Demo se basará en un desencadenador Http. La figura 1 a continuación muestra cómo puede seleccionar el activador para su función cuando crea su aplicación Azure Functions en Visual Studio.

IDG

Probar una función de Azure localmente

Ahora que su función de Azure está lista, el siguiente paso es ejecutarla. Puede usar Azure Functions Tools para ejecutar Azure Functions localmente en su sistema. Simplemente puede presionar F5 para ejecutar y probar su función de Azure. Tenga en cuenta que si Azure Functions Tools no está instalado, se le pedirá que lo instale cuando intente ejecutar su función. Simplemente acepte la solicitud para descargar e instalar las herramientas cuando se le solicite.

Si las herramientas de funciones de Azure están instaladas, la ventana de la consola mostrará la URL de su función de Azure como se muestra en la figura 2 a continuación.

IDG

Tome nota de la URL que se muestra para su función de Azure. Ahora aprovecharemos Postman, una de las herramientas de prueba de API más populares, para probar la función. Cuando ejecuta la URL en Postman, debería ver un resultado similar al que se muestra en la Figura 3 a continuación.

IDG

Publicar una función de Azure en Azure

Suponiendo que haya iniciado sesión en Azure, siga los pasos que se describen a continuación para publicar el proyecto de aplicación de Azure Functions en Azure:

  1. Haga clic con el botón derecho en el proyecto de aplicación de Azure Functions en la ventana del Explorador de soluciones.
  2. Haga clic en Publicar.
  3. Seleccione Azure como destino de publicación.
  4. Seleccione Azure Function App (Windows) como destino específico.
  5. Haga clic en Siguiente.
  6. Por último, haga clic en Finalizar para completar el proceso.
IDG

Puede aprovechar Azure Functions para implementar funciones informáticas sin servidor en Azure. La capacidad de ejecutarse en un entorno sin servidor hace que Azure Functions sea altamente escalable y eficiente. Azure Functions es ideal para tareas programadas, notificaciones y API livianas, cualquier tarea simple que se pueda ejecutar cada vez que ocurra un evento específico.

Azure Functions se puede invocar mediante una solicitud HTTP, como se muestra aquí, mediante un webhook o mediante un evento en Azure Cosmos DB, Blob Storage, Mobile Apps y muchos otros servicios de Azure. Incluso puede activar una función de Azure desde OneDrive, Excel o Outlook. Y puede almacenar los datos procesados ​​por Azure Functions en un servicio de almacenamiento de Azure, una base de datos de documentos o incluso una base de datos SQL si lo desea.

Por último, tenga en cuenta que puede usar Azure Durable Functions, una extensión de Azure Functions, para crear funciones duraderas y con estado que se ejecutan en la nube de Azure. Echaremos un vistazo al trabajo con Azure Durable Functions en una publicación posterior aquí.