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
- Sottoscrizione di Azure: creare un account gratuito
- Visual Studio con il carico di lavoro di sviluppo di Azure
- Funzioni di Azure strumenti, se non è già installato con Visual Studio.
- Completare l'argomento di avvio rapido Creare un'app di Funzioni di Azure con Configurazione app di Azure
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.Worker
consente alla chiamata di aggiornare automaticamente la configurazione prima dell'esecuzione di ogni funzione.
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 parametrorefreshAll
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.
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(); }
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 diIConfigurationRefresher
.private readonly IConfiguration _configuration; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider) { _configuration = configuration; _configurationRefresher = refresherProvider.Refreshers.First(); }
Aggiornare il metodo
Run
e segnalare di aggiornare la configurazione usando il metodoTryRefreshAsync
all'inizio della chiamata di Funzioni. Questa operazione non verrà eseguita se non viene raggiunta la finestra temporale di scadenza della cache. Rimuovere l'operatoreawait
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
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'
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.
Copiare l'URL della funzione dall'output di runtime di Funzioni di Azure.
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.
Accedere al portale di Azure. Selezionare Tutte le risorse e quindi l'archivio di Configurazione app creato nella guida di avvio rapido.
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 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.
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.
- Accedere al portale di Azure e selezionare Gruppi di risorse.
- Nella casella Filtra per nome immettere il nome del gruppo di risorse.
- Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
- Selezionare Elimina gruppo di risorse.
- 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.