Esaminare i concetti di configurazione delle app
La creazione di microservizi per un ambiente distribuito presenta una sfida significativa. I microservizi ospitati nel cloud vengono spesso eseguiti in più contenitori in diverse aree. L'implementazione di una soluzione che separa il codice di ogni servizio dalla configurazione semplifica la valutazione dei problemi in tutti gli ambienti.
In questa unità viene illustrato come integrare ASP.NET funzionalità di configurazione core e Docker con Configurazione app di Azure per affrontare questa sfida in modo efficace.
Si esaminerà quanto illustrato di seguito:
- ASP.NET Core, infrastruttura di configurazione.
- Astrazione della configurazione di Kubernetes, ConfigMap.
- Servizio Configurazione app di Azure.
- Libreria di gestione delle funzionalità .NET.
- Componenti dei feature flag implementati nell'app.
configurazione di ASP.NET Core
La configurazione in un progetto ASP.NET Core è contenuta in uno o più provider di configurazione .NET. Un provider di configurazione è un'astrazione in un'origine di configurazione specifica, ad esempio un file JSON. I valori dell'origine di configurazione sono rappresentati come una raccolta di coppie chiave-valore.
Un'app ASP.NET Core può registrare più provider di configurazione per leggere le impostazioni da varie origini. Con l'host applicazione predefinito, diversi provider di configurazione vengono registrati automaticamente. Nell'ordine elencato sono disponibili le origini di configurazione seguenti:
- File JSON (appsettings.json)
- File JSON (appsettings.{environment}.json)
- Segreti utente
- Variabili di ambiente
- Linea di comando
Ogni provider di configurazione può contribuire con il proprio valore di chiave. Qualsiasi provider può anche sostituire un valore di un provider registrato nella catena prima del proprio. Dato l'ordine di registrazione nell'elenco precedente, un UseFeatureManagement parametro della riga di comando esegue l'override di una UseFeatureManagement variabile di ambiente. Analogamente, una chiave all'interno di UseFeatureManagement può essere sostituita da una chiave archiviata in appsettings.json.
I nomi delle chiavi di configurazione possono descrivere una gerarchia. Ad esempio, la notazione eShop:Store:SeasonalSale fa riferimento alla funzionalità SeasonalSale all'interno del microservizio Store dell'app eShop . Questa struttura può anche eseguire il mapping dei valori di configurazione a un oggetto grafico o a una matrice.
Importante
Alcune piattaforme non supportano due punti nei nomi delle variabili di ambiente. Per garantire la compatibilità multipiattaforma, viene usato un doppio carattere di sottolineatura (__) anziché due punti (:) per delimitare le chiavi. Ad esempio, eShop__Store__SeasonalSale è la notazione equivalente multipiattaforma per eShop:Store:SeasonalSale.
ASP.NET Core usa configurationBinder per eseguire il mapping dei valori di configurazione a oggetti e matrici. Il mapping ai nomi di chiave non fa distinzione tra maiuscole e minuscole. Ad esempio, ConnectionString e connectionstring vengono considerate chiavi equivalenti. Per altre informazioni, vedere Chiavi e valori.
Configurazione di Docker
In Docker, un'astrazione per gestire la configurazione come raccolta di coppie chiave-valore è la sezione delle variabili di ambiente nel file YAML di un contenitore. Il frammento di codice seguente è un estratto del file dell'app docker-compose.yml :
services:
frontend:
image: storeimage
build:
context: .
dockerfile: DockerfileStore
environment:
- ProductEndpoint=http://backend:8080
- ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features.azconfig.io;Id=<ID>;Secret=<SECRET>
ports:
- "32000:8080"
depends_on:
- backend
Il frammento di file definisce:
- Variabili archiviate nella
environmentsezione del file YAML, come evidenziato nel frammento di codice precedente. - Sono presentate nell'app in contenitori come variabili di ambiente.
- Meccanismo per rendere persistenti i valori di configurazione di .NET nelle app di microservizi.
Le variabili di ambiente sono un meccanismo multipiattaforma per fornire la configurazione di runtime alle app ospitate nei contenitori Docker.
Configurazione app di Azure
Un servizio di configurazione centralizzato è particolarmente utile nelle app di microservizi e in altre app distribuite. Questo modulo presenta Configurazione app di Azure come servizio per la gestione centralizzata dei valori di configurazione, in particolare per i flag di funzionalità. Il servizio semplifica la risoluzione degli errori che si verificano quando la configurazione viene distribuita con un'app.
Configurazione App è un servizio completamente gestito che crittografa i valori chiave sia a riposo che in transito. I valori di configurazione archiviati con esso possono essere aggiornati in tempo reale senza la necessità di ridistribuire o riavviare un'app.
In un'applicazione ASP.NET Core, Azure App Configuration viene registrata come provider di configurazione. A parte la registrazione del provider, l'app non riconosce l'archivio di Configurazione app. I valori di configurazione possono essere recuperati da esso tramite l'astrazione della configurazione di .NET, ovvero l'interfaccia IConfiguration.
Libreria della gestione delle funzionalità
La libreria Gestione funzionalità fornisce API .NET standardizzate per la gestione dei flag di funzionalità all'interno delle app. La libreria viene distribuita tramite NuGet sotto forma di due pacchetti diversi denominati Microsoft.FeatureManagement e Microsoft.FeatureManagement.AspNetCore. Quest'ultimo pacchetto fornisce helper tag da usare nei file Razor di un progetto ASP.NET Core. Il pacchetto precedente è sufficiente quando i Tag Helper non sono necessari o quando non si utilizza con un progetto ASP.NET Core.
La biblioteca è costruita sopra IConfiguration. Per questo motivo, è compatibile con qualsiasi provider di configurazione .NET, incluso il provider per Configurazione app di Azure. Poiché la libreria è disaccoppiata da Configurazione app di Azure, l'integrazione dei due viene resa possibile tramite il provider di configurazione. La combinazione di questa libreria con Configurazione app di Azure consente di attivare o disattivare dinamicamente le funzionalità senza implementare l'infrastruttura di supporto.
Integrazione con configurazione app di Azure
Per comprendere l'integrazione tra Azure App Configuration e la libreria Gestione delle Funzionalità, vedere l'estratto riportato di seguito da un file Program.cs del progetto ASP.NET Core.
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
options.Connect(connectionString)
.UseFeatureFlags();
});
Nel frammento di codice precedente:
- Il metodo dell'app
builder.Configurationviene chiamato per registrare un provider di configurazione per l'Azure App Configuration Store. Il provider di configurazione viene registrato tramite una chiamata aAddAzureAppConfiguration. - Il comportamento del provider di Configurazione app di Azure è configurato con le opzioni seguenti:
- Eseguire l'autenticazione al servizio Azure corrispondente tramite una stringa di connessione passata alla chiamata a un metodo
Connect. La stringa di connessione viene recuperata dallaconnectionStringvariabile . Le origini di configurazione registrate vengono rese disponibili tramitebuilder.Configuration. - Abilitare il supporto dei flag di funzionalità tramite una chiamata a
UseFeatureFlags.
- Eseguire l'autenticazione al servizio Azure corrispondente tramite una stringa di connessione passata alla chiamata a un metodo
- Il provider di Configurazione app di Azure sostituisce tutti gli altri provider di configurazione registrati perché viene registrato dopo qualsiasi altro provider di configurazione.
Suggerimento
In un progetto ASP.NET Core è possibile accedere all'elenco dei provider registrati analizzando la configBuilder.Sources proprietà all'interno di ConfigureAppConfiguration.