Compartir a través de


Inicio rápido: Adición de marcas de características a una aplicación de Azure Functions

En este inicio rápido, creará un proyecto de código de C# de Azure Functions y usará marcas de características en él. La administración de características de Azure App Configuration se usa para almacenar de forma centralizada todas las marcas de características y controlar sus estados.

Las bibliotecas de administración de características de .NET amplían la plataforma con compatibilidad con las marcas de características. Estas bibliotecas se compilan a partir del sistema de configuración de .NET. Se integran con App Configuration mediante su proveedor de configuración de .NET.

Nota:

Actualmente, este artículo solo admite aplicaciones de funciones en el mismo proceso de C# que se ejecuten en .NET 6.

Requisitos previos

Agregar marca de características

Agregue una marca de característica denominada Beta al almacén de App Configuration y deje Etiqueta y descripción con sus valores predeterminados. Para obtener más información sobre cómo agregar marcas de características a un almacén mediante Azure Portal o la CLI, vaya a Creación de una marca de característica.

Habilitación de la marca de característica denominada Beta

Creación de un proyecto de Functions

La plantilla del proyecto de Azure Functions de Visual Studio crea un proyecto de biblioteca de clases de C# que puede publicar en una aplicación de funciones en Azure. Una aplicación de funciones permite agrupar funciones como una unidad lógica para facilitar la administración, la implementación, el escalado y el uso compartido de recursos.

  1. En el menú de Visual Studio, seleccione Archivo>Nuevo>Proyecto.

  2. En Crear un proyecto, escriba functions en el cuadro de búsqueda, elija la plantilla Azure Functions y seleccione Siguiente.

  3. En Configurar el nuevo proyecto, escriba un nombre de proyecto para el proyecto y, a continuación, seleccione Crear. El nombre de la aplicación de función debe ser válido como espacio de nombres de C#, por lo que no debe usar guiones bajos, guiones u otros caracteres no alfanuméricos.

  4. En la configuración de Crear aplicación de Azure Functions, use los valores de la tabla siguiente:

    Configuración valor Descripción
    Versión de .NET .NET 6 Este valor crea un proyecto de función que se ejecuta dentro de proceso con la versión 4.x del entorno de ejecución de Azure Functions. Para más información, consulte Selección de un destino para versiones de runtime de Azure Functions.
    Plantilla de función desencadenador HTTP Este valor crea una función desencadenada por una solicitud HTTP.
    Cuenta de almacenamiento (AzureWebJobsStorage) Emulador de Storage Dado que una aplicación de funciones de Azure necesita una cuenta de almacenamiento, se asigna o se crea una cuando publica su proyecto en Azure. Un desencadenador HTTP no utiliza una cadena de conexión de cuenta de Azure Storage; todos los demás tipos de desencadenador requieren una cadena de conexión de cuenta de Azure Storage válida.
    Nivel de autorización Anónimo Cualquier cliente puede desencadenar una función creada sin tener que proporcionar una clave. Esta configuración de autorización facilita probar la función nueva. Para más información sobre las claves y la autorización, consulte Claves de autorización e Introducción a los enlaces y desencadenadores HTTP de Azure Functions.

    Captura de pantalla de la configuración del proyecto de Azure Functions


    Asegúrese de establecer el Nivel de autorización en Anónimo. Al elegir el nivel predeterminado de Función, tiene que presentar la tecla de función en las solicitudes para acceder al punto de conexión de la función.

  5. Seleccione Crear para crear el proyecto de función y la función con desencadenador HTTP.

Conexión a un almacén de App Configuration

En este proyecto se usa la inserción de dependencias en Azure Functions para .NET. Se agrega Azure App Configuration como origen de configuración adicional donde se almacenan las marcas de características.

  1. Haga clic con el botón derecho en el proyecto y seleccione Administrar paquetes NuGet. En la pestaña Examinar, busque los siguientes paquetes NuGet y agréguelos al proyecto.

  2. Agregue un nuevo archivo, Startup.cs, con el código siguiente. Se define una clase denominada Startup que implementa la clase abstracta FunctionsStartup. Para especificar el nombre de tipo empleado durante el inicio de Azure Functions, se usa un atributo de ensamblado.

    using System;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    using Microsoft.FeatureManagement;
    
    [assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
    
    namespace FunctionApp
    {
        class Startup : FunctionsStartup
        {
            public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
            {
            }
    
            public override void Configure(IFunctionsHostBuilder builder)
            {
            }
        }
    }
    
  3. Actualice el método ConfigureAppConfiguration y llame a AddAzureAppConfiguration() para agregar el proveedor de Azure App Configuration como origen de configuración adicional.

    El método UseFeatureFlags() indica al proveedor que cargue las marcas de características. Todas las marcas de características tienen una expiración de caché predeterminada de 30 segundos antes de que se vuelvan a comprobar los cambios. Para actualizar el intervalo de expiración, se puede establecer la propiedad FeatureFlagsOptions.CacheExpirationInterval pasada al método UseFeatureFlags.

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                   .Select("_")
                   .UseFeatureFlags();
        });
    }
    

    Sugerencia

    Si no quiere que se cargue ninguna configuración que no sea la de las marcas de características en la aplicación, puede llamar a Select("_") para cargar solo una clave ficticia no existente"_". De forma predeterminada, todos los valores de clave de configuración del almacén de App Configuration se cargarán si no se llama a ningún método Select.

  4. Actualice el método Configure para que los servicios y el administrador de características de Azure App Configuration estén disponibles mediante la inserción de dependencias.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
        builder.Services.AddFeatureManagement();
    }
    
  5. Abra Function1.cs y agregue los siguientes espacios de nombres.

    using System.Linq;
    using Microsoft.FeatureManagement;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    

    Agregue un constructor utilizado para obtener instancias de _featureManagerSnapshot y IConfigurationRefresherProvider mediante la inserción de dependencias. En IConfigurationRefresherProvider, puede obtener la instancia de IConfigurationRefresher.

    private readonly IFeatureManagerSnapshot _featureManagerSnapshot;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider)
    {
        _featureManagerSnapshot = featureManagerSnapshot;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  6. Actualice el método Run para cambiar el valor del mensaje mostrado en función del estado de la marca de característica.

    Se llama al método TryRefreshAsync al principio de la llamada a Functions para actualizar las marcas de características. Esta operación no tiene efecto si no se alcanza la ventana de tiempo de expiración de la caché. Si prefiere que las marcas de características se actualicen sin bloquear la llamada a Functions actual, quite el operador await. En ese caso, las llamadas posteriores a Functions recibirán el valor actualizado.

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        await _configurationRefresher.TryRefreshAsync();
    
        string message = await _featureManagerSnapshot.IsEnabledAsync("Beta")
                ? "The Feature Flag 'Beta' is turned ON"
                : "The Feature Flag 'Beta' is turned OFF";
    
        return (ActionResult)new OkObjectResult(message);
    }
    

Prueba local de la función

  1. Establezca una variable de entorno denominada ConnectionString, donde el valor es la cadena de conexión que recuperó anteriormente en el almacén de App Configuration en Claves de acceso. Si usa el símbolo del sistema de Windows, ejecute el siguiente comando y reinícielo para que se aplique el cambio:

        setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Si usa Windows PowerShell, ejecute el siguiente comando:

        $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    Si usa macOS o Linux, ejecute el siguiente comando:

        export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Presione F5 para probar la función. Si se le solicita, acepte la solicitud de Visual Studio para descargar e instalar las herramientas de Azure Functions Core (CLI) . También es preciso que habilite una excepción de firewall para que las herramientas para controlen las solicitudes de HTTP.

  3. Copie la dirección URL de la función de los resultados del runtime de Azure Functions.

    Inicio rápido: depuración de funciones en VS

  4. Pegue la dirección URL de la solicitud HTTP en la barra de direcciones del explorador. En la imagen siguiente se muestra la respuesta que indica que la marca de la característica Beta está deshabilitada.

    Marca de la característica de función de inicio rápido deshabilitada

  5. Inicie sesión en Azure Portal. Seleccione Todos los recursos y, después, elija el almacén de App Configuration que creó.

  6. Seleccione Administrador de características y cambie el estado de la clave Beta a Activado.

  7. Actualice el explorador varias veces. Cuando se supera la ventana de tiempo del intervalo de actualización, la página cambiará para indicar que la marca de característica Beta está activada, como se muestra en la imagen siguiente.

    Marca de la característica de función de inicio rápido habilitada

Nota

El código de ejemplo que se usa en este tutorial se puede descargar del repositorio de GitHub de App Configuration.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este inicio rápido, creó una marca de característica y la usó con una aplicación de Azure Functions mediante la biblioteca Microsoft.FeatureManagement.