Granska appkonfigurationsbegrepp
Det är en stor utmaning att skapa mikrotjänster för en distribuerad miljö. Molnbaserade mikrotjänster körs ofta i flera containrar i olika regioner. Genom att implementera en lösning som separerar varje tjänsts kod från konfigurationen blir det enklare att prioritera problem i alla miljöer.
I den här lektionen utforskar du hur du integrerar ASP.NET Core- och Docker-konfigurationsfunktioner med Azure App Configuration för att hantera den här utmaningen på ett effektivt sätt.
Du kommer att granska följande:
- ASP.NET Core-konfigurationsinfrastruktur.
- Kubernetes-konfigurationsabstraktion ConfigMap– .
- Azure App Configuration Service.
- .NET-bibliotek för funktionshantering.
- Funktionsflaggakomponenter implementerade i appen.
ASP.NET Core-konfiguration
Konfiguration i ett ASP.NET Core-projekt finns i en eller flera .NET-konfigurationsproviders. En konfigurationsprovider är en abstraktion över en specifik konfigurationskälla, till exempel en JSON-fil. Konfigurationskällans värden representeras som en samling nyckel/värde-par.
En ASP.NET Core-app kan registrera flera konfigurationsproviders för att läsa inställningar från olika källor. Med standardprogramvärden registreras flera konfigurationsproviders automatiskt. Följande konfigurationskällor är tillgängliga i den ordning som anges:
- JSON-fil (appsettings.json)
- JSON-fil (appsettings.{environment}.json)
- Användarhemligheter
- Miljövariabler
- Kommandorad
Varje konfigurationsprovider kan bidra med sitt eget nyckelvärde. Dessutom kan alla leverantörer åsidosätta ett värde från en provider som registrerades tidigare i kedjan än sig själv. Med tanke på registreringsordningen i föregående lista åsidosätter en UseFeatureManagement
kommandoradsparameter en UseFeatureManagement
miljövariabel. På samma sätt kan en nyckel i appsettings.json åsidosättas av en UseFeatureManagement
nyckel som lagras i appsettings.Development.json.UseFeatureManagement
Namn på konfigurationsnycklar kan beskriva en hierarki. Till exempel refererar notationen eShop:Store:SeasonalSale till funktionen SeasonalSale i store-mikrotjänsten för eShop-appen . Den här strukturen kan också mappa konfigurationsvärden till ett objektdiagram eller en matris.
Viktigt!
Vissa plattformar stöder inte kolon i miljövariabelnamn. För att säkerställa plattformsoberoende kompatibilitet används ett dubbelt understreck (__
) i stället för ett kolon (:
) för att avgränsa nycklar. Till exempel eShop__Store__SeasonalSale
är den plattformsoberoende motsvarande notationen för eShop:Store:SeasonalSale
.
ASP.NET Core använder en ConfigurationBinder för att mappa konfigurationsvärden till objekt och matriser. Mappningen till nyckelnamn sker på ett skiftlägesokänsligt sätt. Till exempel ConnectionString
och connectionstring
behandlas som motsvarande nycklar. Mer information finns i nycklar och värden.
Docker-konfiguration
I Docker är en abstraktion för att hantera konfiguration som en nyckel/värde-parsamling miljövariabelavsnittet i en containers YAML-fil. Följande kodfragment är ett utdrag ur appens docker-compose.yml
fil:
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
Filfragmentet definierar:
- Variabler som lagras i avsnittet i
environment
YAML-filen, enligt beskrivningen i föregående kodfragment. - Presenteras för den containerbaserade appen som miljövariabler.
- En mekanism för att bevara .NET-konfigurationsvärden i mikrotjänstappar.
Miljövariabler är en plattformsoberoende mekanism för att tillhandahålla körningskonfiguration för appar som finns i Docker-containrarna.
Azure App Configuration
En centraliserad konfigurationstjänst är särskilt användbar i mikrotjänstappar och andra distribuerade appar. Den här modulen introducerar Azure App Configuration som en tjänst för central hantering av konfigurationsvärden – särskilt för funktionsflaggor. Tjänsten underlättar felsökningen av fel som uppstår när konfigurationen distribueras med en app.
App Configuration är en fullständigt hanterad tjänst som krypterar nyckelvärden både i vila och under överföring. Konfigurationsvärden som lagras med den kan uppdateras i realtid utan att du behöver distribuera om eller starta om en app.
I en ASP.NET Core-app registreras Azure App Configuration som en konfigurationsprovider. Förutom providerregistreringen känner appen inte till App Configuration Store. Konfigurationsvärden kan hämtas från den via . NET:s konfigurationsabstraktion – IConfiguration
gränssnittet.
Bibliotek för funktionshantering
Funktionshanteringsbiblioteket innehåller standardiserade .NET-API:er för hantering av funktionsflaggor i appar. Biblioteket distribueras via NuGet i form av två olika paket med namnet Microsoft.FeatureManagement
och Microsoft.FeatureManagement.AspNetCore
. Det senare paketet tillhandahåller Tag Helpers för användning i ett ASP.NET Core-projekts Razor-filer. Det tidigare paketet räcker när Tag Helpers inte behövs eller när de inte använder med ett ASP.NET Core-projekt.
Biblioteket är byggt ovanpå IConfiguration
. Därför är den kompatibel med alla .NET-konfigurationsprovider, inklusive providern för Azure App Configuration. Eftersom biblioteket är frikopplat från Azure App Configuration möjliggörs integrering av de två via konfigurationsprovidern. Genom att kombinera det här biblioteket med Azure App Configuration kan du dynamiskt växla funktioner utan att implementera stödinfrastruktur.
Integrering med Azure App Configuration
Information om integreringen av Azure App Configuration och funktionshanteringsbiblioteket finns i följande utdrag från en ASP.NET Core-projektfil Program.cs
:
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
options.Connect(connectionString)
.UseFeatureFlags();
});
I föregående kodfragment:
- Appens metod anropas för att registrera en konfigurationsprovider
builder.Configuration
för Azure App Configuration Store. Konfigurationsprovidern registreras via ett anrop tillAddAzureAppConfiguration
. - Azure App Configuration-providerns beteende konfigureras med följande alternativ:
- Autentisera till motsvarande Azure-tjänst via en anslutningssträng skickas till metodanropet
Connect
. Anslutningssträng hämtas från variabelnconnectionString
. De registrerade konfigurationskällorna görs tillgängliga viabuilder.Configuration
. - Aktivera stöd för funktionsflaggor via ett anrop till
UseFeatureFlags
.
- Autentisera till motsvarande Azure-tjänst via en anslutningssträng skickas till metodanropet
- Azure App Configuration-providern ersätter alla andra registrerade konfigurationsprovidrar eftersom den registreras efter andra.
Dricks
I ett ASP.NET Core-projekt kan du komma åt listan över registrerade providers genom att configBuilder.Sources
analysera egenskapen inuti ConfigureAppConfiguration
.