Esercitazione: Usare la configurazione dinamica in un'app di Funzioni di Azure

Il provider di configurazione .NET di Configurazione app supporta la memorizzazione nella cache e l'aggiornamento della configurazione dinamicamente in base all'attività dell'applicazione. Questa esercitazione mostra come è possibile implementare aggiornamenti dinamici della configurazione nel codice. Si basa sull'app di Funzioni di Azure presentata negli argomenti di avvio rapido. Prima di continuare, completare le procedure descritte in Creare un'app di Funzioni di Azure con Configurazione app.

In questa esercitazione verranno illustrate le procedure per:

  • Configurare l'app di Funzioni di Azure per aggiornarne la configurazione in risposta alle modifiche in un archivio di Configurazione app.
  • Inserire la configurazione più recente nelle chiamate di Funzioni di Azure.

Prerequisiti

Ricaricare i dati di Configurazione app

Funzioni di Azure supporto per l'esecuzione di processi o processi isolati. La differenza principale nell'utilizzo Configurazione app tra le due modalità è la modalità di aggiornamento della configurazione. Nella modalità in-process è necessario effettuare una chiamata in ogni funzione per aggiornare la configurazione. Nella modalità di elaborazione isolata è disponibile il supporto per il middleware. Il middleware Configurazione app , Microsoft.Azure.AppConfiguration.Functions.Workerconsente alla chiamata di aggiornare automaticamente la configurazione prima dell'esecuzione di ogni funzione.

  1. Aggiornare il codice che si connette a Configurazione app e aggiungere le condizioni di aggiornamento dei dati.

    Aprire Startup.cs e aggiornare il metodo 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));
        });
    }
    

    Il ConfigureRefresh metodo registra un'impostazione da controllare per le modifiche ogni volta che viene attivato un aggiornamento all'interno dell'applicazione. Il parametro refreshAll indica al provider di Configurazione app di ricaricare l'intera configurazione ogni volta che viene rilevata una modifica nell'impostazione registrata.

    Tutte le impostazioni registrate per l'aggiornamento hanno una scadenza predefinita della cache di 30 secondi prima che venga tentato un nuovo aggiornamento. Questo valore può essere aggiornato chiamando il metodo AzureAppConfigurationRefreshOptions.SetCacheExpiration.

    Suggerimento

    Quando si aggiornano più valori chiave in Configurazione app, normalmente non si vuole che l'applicazione ricarica la configurazione prima che vengano apportate tutte le modifiche. È possibile registrare una chiave sentinel e aggiornarla solo quando vengono completate tutte le altre modifiche di configurazione. Ciò consente di garantire la coerenza della configurazione nell'applicazione.

    È anche possibile eseguire le operazioni seguenti per ridurre al minimo il rischio di incoerenze:

    • Progettare l'applicazione per essere tollerabile per la configurazione temporanea
    • Riscaldamento dell'applicazione prima di portarla online (richieste di servizio)
    • Eseguire la configurazione predefinita nell'applicazione e usarla quando la convalida della configurazione ha esito negativo
    • Scegliere una strategia di aggiornamento della configurazione che riduce al minimo l'impatto dell'applicazione, ad esempio una bassa tempistica del traffico.
  1. Aggiornare il metodo Configure per rendere disponibili i servizi di Configurazione app di Azure tramite l'inserimento di dipendenze.

    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddAzureAppConfiguration();
    }
    
  2. Aprire Function1.cs e aggiungere gli spazi dei nomi seguenti.

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

    Aggiornare il costruttore per ottenere l'istanza di IConfigurationRefresherProvider tramite l'inserimento di dipendenze, da cui è possibile ottenere l'istanza di IConfigurationRefresher.

    private readonly IConfiguration _configuration;
    private readonly IConfigurationRefresher _configurationRefresher;
    
    public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _configurationRefresher = refresherProvider.Refreshers.First();
    }
    
  3. Aggiornare il metodo Run e segnalare di aggiornare la configurazione usando il metodo TryRefreshAsync all'inizio della chiamata di Funzioni. Questa operazione non verrà eseguita se non viene raggiunta la finestra temporale di scadenza della cache. Rimuovere l'operatore await se si preferisce che la configurazione venga aggiornata senza bloccare la chiamata a Funzioni corrente. In tal caso, le successive chiamate a Funzioni riceveranno il valore aggiornato.

    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.");
    }
    

Testare la funzione in locale

  1. Impostare una variabile di ambiente denominata ConnectionString sulla chiave di accesso all'archivio di configurazione app. Se si usa il prompt dei comandi di Windows, eseguire il comando seguente e riavviare il prompt per rendere effettiva la modifica:

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

    Se si usa Windows PowerShell, eseguire il comando seguente:

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

    Se si usa macOS o Linux, eseguire il comando seguente:

    export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Per testare la funzione premere F5. Se viene visualizzata, accettare la richiesta di Visual Studio di scaricare e installare gli strumenti dell'interfaccia della riga di comando Azure Functions Core Tools. Potrebbe essere necessario anche abilitare un'eccezione del firewall per consentire agli strumenti di gestire le richieste HTTP.

  3. Copiare l'URL della funzione dall'output di runtime di Funzioni di Azure.

    Guida introduttiva: debug di funzioni in VS

  4. Incollare l'URL per la richiesta HTTP nella barra degli indirizzi del browser. L'immagine seguente mostra la risposta nel browser alla richiesta GET locale restituita dalla funzione.

    Guida introduttiva: avvio della funzione in locale

  5. Accedere al portale di Azure. Selezionare Tutte le risorse e quindi l'archivio di Configurazione app creato nella guida di avvio rapido.

  6. Selezionare Configuration Explorer e aggiornare i valori della chiave seguente:

    Chiave Valore
    TestApp:Settings:Message Dati di Configurazione app di Azure - Aggiornati

    Creare quindi la chiave sentinella o modificarne il valore se esiste già, ad esempio:

    Chiave Valore
    TestApp:Settings:Sentinel v1
  7. Aggiornare alcune volte il browser. Quando l'impostazione memorizzata nella cache scade dopo 30 secondi, nella pagina viene visualizzata la risposta della chiamata a Funzioni con il valore aggiornato.

    Avvio rapido: aggiornamento della funzione in locale

Nota

Il codice di esempio usato in questa esercitazione può essere scaricato dal repository GitHub di Configurazione app.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questa esercitazione è stata abilitata l'app di Funzioni di Azure per aggiornare dinamicamente le impostazioni di configurazione di Configurazione app. Per informazioni su come usare un'identità gestita di Azure per semplificare l'accesso a Configurazione app, continuare con l'esercitazione successiva.