Share via


Tutorial: Uso de la configuración dinámica en una aplicación de Azure Functions

El proveedor de configuración de App Configuration para .NET admite el almacenamiento en caché y la actualización de la configuración controlada dinámicamente por la actividad de la aplicación. Este tutorial le muestra cómo puede implementar las actualizaciones de configuración dinámica en el código. Se basa en la aplicación de Azure Functions que se presentó en las guías de inicio rápido. Antes de continuar, finalice primero el tutorial Creación de una aplicación de Azure Functions con Azure App Configuration.

En este tutorial, aprenderá a:

  • Configurar la aplicación de Azure Functions para actualizar su configuración en respuesta a los cambios en un almacén de App Configuration.
  • Inserte la configuración más reciente en las llamadas a Azure Functions.

Prerrequisitos

Recarga de datos de App Configuration

Azure Functions admite la ejecución en proceso o en un proceso aislado. La principal diferencia en el uso de App Configuration entre ambos modos es la forma en que se actualiza la configuración. En el modo en proceso, debe realizar una llamada en cada función para actualizar la configuración. En el modo de proceso aislado existe middleware compatible. El middleware de App Configuration, Microsoft.Azure.AppConfiguration.Functions.Worker, habilita la llamada para actualizar la configuración automáticamente antes de que se ejecute cada función.

  1. Actualice el código de conexión a App Configuration y agregue las condiciones de actualización de los datos.

    Abra Startup.cs y actualice el método ConfigureAppConfiguration.

    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    // Load all keys that start with `TestApp:` and have no label
                    .Select("TestApp:*")
                    // Configure to reload configuration if the registered sentinel key is modified
                    .ConfigureRefresh(refreshOptions =>
                        refreshOptions.Register("TestApp:Settings:Sentinel", refreshAll: true));
        });
    }
    

    El método ConfigureRefresh registra un valor donde se comprobarán los cambios que se produzcan siempre que se desencadene una actualización en la aplicación. El parámetro refreshAll indica al proveedor App Configuration que vuelva a cargar toda la configuración siempre que se detecte un cambio en la configuración registrada.

    Todas las configuraciones registradas para la actualización tienen un tiempo de expiración de la memoria caché predeterminado de 30 segundos antes de que se vuelva a intentar realizar una nueva actualización. Puede actualizarse al llamar al método AzureAppConfigurationRefreshOptions.SetCacheExpiration.

    Sugerencia

    Al actualizar varias claves y valores en App Configuration, normalmente no se desea que la aplicación vuelva a cargar la configuración hasta que se hayan realizado todos los cambios. Puede registrar una clave de Sentinel y actualizarla solo cuando se hayan completado los demás cambios de configuración. Esto ayuda a garantizar la coherencia de la configuración en la aplicación.

    También puede hacer lo siguiente para minimizar el riesgo de incoherencias:

    • Diseñar la aplicación para que sea tolerable para la incoherencia de configuración transitoria
    • Preparar la aplicación antes de ponerla en línea (atender solicitudes)
    • Lleve la configuración predeterminada en la aplicación y úsela cuando se produzca un error en la validación de la configuración.
    • Elija una estrategia de actualización de configuración que minimice el impacto en la aplicación, por ejemplo, un tiempo de tráfico bajo.
  1. Actualice el método Configure para que los servicios de Azure App Configuration estén disponibles mediante la inserción de dependencias.

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

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

    Actualice el constructor para obtener la instancia de IConfigurationRefresherProvider mediante la inserción de dependencias, desde la que podrá obtener la instancia de IConfigurationRefresher.

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  3. Actualice el método Run y señalice para actualizar la configuración mediante el método TryRefreshAsync al principio de la llamada a Azure Functions. No será operativo si no se alcanza la ventana de tiempo de expiración de la memoria caché. Elimine el operador await si prefiere que la configuración se actualice sin bloqueos en la llamada a Functions actual. De ese modo, las llamadas a Functions posteriores obtendrán el valor actualizado.

    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 keyName = "TestApp:Settings:Message";
        string message = _configuration[keyName];
    
        return message != null
            ? (ActionResult)new OkObjectResult(message)
            : new BadRequestObjectResult($"Please create a key-value with the key '{keyName}' in App Configuration.");
    }
    

Prueba local de la función

  1. Establezca una variable de entorno llamada ConnectionString y defínala como la clave de acceso a su almacén de configuración de aplicaciones. 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. Para probar la función, presione F5. 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.

    Quickstart Function debugging in VS

  4. Pegue la dirección URL de la solicitud HTTP en la barra de direcciones del explorador. La siguiente imagen muestra la respuesta en el explorador para la solicitud GET local devuelta por la función.

    Quickstart Function launch local

  5. Inicie sesión en Azure Portal. Seleccione Todos los recursos y seleccione el almacén de App Configuration que creó en el inicio rápido.

  6. Seleccione Explorador de configuración y actualice el valor de la clave siguiente:

    Clave Value
    TestApp:Settings:Message Datos de Azure App Configuration, actualizados

    A continuación, cree la clave de Sentinel o modifique su valor si ya existe; por ejemplo,

    Clave Valor
    TestApp:Settings:Sentinel v1
  7. Actualice el explorador varias veces. Cuando la configuración almacenada en la memoria caché expira después de 30 segundos, la página muestra la respuesta de la llamada a Azure Functions con el valor actualizado.

    Quickstart Function refresh local

Nota:

El código de ejemplo que se usa en este tutorial se puede descargar desde el 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 tutorial, ha habilitado la aplicación de Azure Functions para actualizar dinámicamente la configuración a partir de App Configuration. Para obtener información sobre cómo usar una identidad administrada de Azure para simplificar el acceso a App Configuration, vaya al siguiente tutorial.