Granska appkonfigurationsbegrepp

Slutförd

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:

  1. JSON-fil (appsettings.json)
  2. JSON-fil (appsettings.{environment}.json)
  3. Användarhemligheter
  4. Miljövariabler
  5. 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 till AddAzureAppConfiguration.
  • Azure App Configuration-providerns beteende konfigureras med följande alternativ:
    • Autentisera till motsvarande Azure-tjänst via en anslutningssträng skickas till metodanropetConnect. Anslutningssträng hämtas från variabelnconnectionString. De registrerade konfigurationskällorna görs tillgängliga via builder.Configuration.
    • Aktivera stöd för funktionsflaggor via ett anrop till UseFeatureFlags.
  • 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.