App-configuratieconcepten bekijken
Het maken van microservices voor een gedistribueerde omgeving vormt een aanzienlijke uitdaging. In de cloud gehoste microservices worden vaak uitgevoerd in meerdere containers in verschillende regio's. Het implementeren van een oplossing die de code van elke service scheidt van de configuratie vereenvoudigt het ophalen van problemen in alle omgevingen.
In deze les leert u hoe u ASP.NET Core- en Docker-configuratiefuncties integreert met Azure App Configuration om deze uitdaging op een effectieve manier aan te pakken.
U gaat het volgende bekijken:
- ASP.NET Core-configuratie-infrastructuur.
- Kubernetes-configuratieabstractie: de ConfigMap.
- Azure App Configuration-service.
- Bibliotheek voor .NET-functiebeheer.
- Onderdelen van functievlagken die in de app zijn geïmplementeerd.
ASP.NET Core-configuratie
Configuratie in een ASP.NET Core-project is opgenomen in een of meer .NET-configuratieproviders. Een configuratieprovider is een abstractie van een specifieke configuratiebron, zoals een JSON-bestand. De waarden van de configuratiebron worden weergegeven als een verzameling sleutel-waardeparen.
Een ASP.NET Core-app kan meerdere configuratieproviders registreren om instellingen uit verschillende bronnen te lezen. Bij de standaardtoepassingshost worden verschillende configuratieproviders automatisch geregistreerd. De volgende configuratiebronnen zijn beschikbaar in de vermelde volgorde:
- JSON-bestand (appsettings.json)
- JSON-bestand (appsettings.{environment}.json)
- Gebruikersgeheimen
- Omgevingsvariabelen
- Opdrachtregel
Elke configuratieprovider kan een eigen sleutelwaarde bijdragen. Bovendien kan elke provider een waarde overschrijven van een provider die eerder in de keten is geregistreerd dan zichzelf. Gezien de registratievolgorde in de voorgaande lijst, overschrijft een UseFeatureManagement
opdrachtregelparameter een UseFeatureManagement
omgevingsvariabele. Op dezelfde manier kan een UseFeatureManagement
sleutel in appsettings.json worden overschreven door een UseFeatureManagement
sleutel die is opgeslagen in appsettings.Development.json.
Namen van configuratiesleutels kunnen een hiërarchie beschrijven. De notatie eShop:Store:SeasonalSale verwijst bijvoorbeeld naar de functie SeasonalSale in de Store microservice van de eShop-app. Deze structuur kan ook configuratiewaarden toewijzen aan een objectgrafiek of een matrix.
Belangrijk
Sommige platforms ondersteunen geen dubbele punt in namen van omgevingsvariabelen. Om compatibiliteit tussen platforms te garanderen, wordt een dubbele onderstrepingsteken (__
) gebruikt in plaats van een dubbele punt (:
) om sleutels te scheiden.
eShop__Store__SeasonalSale
is bijvoorbeeld de platformoverschrijdende equivalente notatie voor eShop:Store:SeasonalSale
.
ASP.NET Core maakt gebruik van een ConfigurationBinder- om configuratiewaarden toe te wijzen aan objecten en matrices. De toewijzing aan sleutelnamen vindt plaats op een hoofdletterongevoelige manier.
ConnectionString
en connectionstring
worden bijvoorbeeld behandeld als gelijkwaardige sleutels. Zie sleutels en waardenvoor meer informatie.
Docker-configuratie
In Docker is één abstractie voor het afhandelen van configuratie als een verzameling sleutel-waardeparen de omgevingsvariabelesectie van het YAML-bestand van een container. Het volgende fragment is een fragment uit het docker-compose.yml
-bestand van de app:
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
Het bestandsfragment definieert:
- Variabelen die zijn opgeslagen in de sectie
environment
van het YAML-bestand, zoals gemarkeerd in het voorgaande fragment. - Gepresenteerd aan de container-app als omgevingsvariabelen.
- Een mechanisme voor het behouden van .NET-configuratiewaarden in microservices-apps.
Omgevingsvariabelen zijn een platformoverschrijdend mechanisme voor het bieden van runtimeconfiguratie aan apps die worden gehost in de Docker-containers.
Azure App Configuration
Een gecentraliseerde configuratieservice is vooral nuttig in microservices-apps en andere gedistribueerde apps. In deze module maakt u kennis met Azure App Configuration als een service voor het centraal beheren van configuratiewaarden, met name voor functievlagmen. De service vereenvoudigt het oplossen van fouten die optreden wanneer de configuratie wordt geïmplementeerd met een app.
App Configuration is een volledig beheerde service die sleutelwaarden zowel in rust als tijdens verzending versleutelt. Configuratiewaarden die hiermee zijn opgeslagen, kunnen in realtime worden bijgewerkt zonder dat u een app opnieuw hoeft te implementeren of opnieuw hoeft te starten.
In een ASP.NET Core-app wordt Azure App Configuration geregistreerd als een configuratieprovider. Afgezien van de registratie van de provider, weet de app niet van de App Configuration-opslag. Configuratiewaarden kunnen ervan worden opgehaald via de configuratie-abstractie van .NET: de IConfiguration
-interface.
Bibliotheek voor functiebeheer
De bibliotheek Functiebeheer biedt gestandaardiseerde .NET-API's voor het beheren van functievlagmen binnen apps. De bibliotheek wordt gedistribueerd via NuGet in de vorm van twee verschillende pakketten met de naam Microsoft.FeatureManagement
en Microsoft.FeatureManagement.AspNetCore
. Het laatste pakket biedt Tag Helpers voor gebruik in de Razor-bestanden van een ASP.NET Core-project. Het voormalige pakket is voldoende wanneer de Tag Helpers niet nodig zijn of wanneer ze niet worden gebruikt met een ASP.NET Core-project.
De bibliotheek is gebouwd boven op IConfiguration
. Daarom is deze compatibel met elke .NET-configuratieprovider, met inbegrip van de provider voor Azure App Configuration. Omdat de bibliotheek is losgekoppeld van Azure App Configuration, wordt de integratie van de twee mogelijk gemaakt via de configuratieprovider. Door deze bibliotheek te combineren met Azure App Configuration kunt u dynamisch functies in-/uitschakelen zonder ondersteunende infrastructuur te implementeren.
Integratie met Azure App Configuration
Zie het volgende fragment uit het Program.cs
-bestand van een ASP.NET Core-project voor meer informatie over de integratie van Azure App Configuration en de bibliotheek voor functiebeheer:
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
options.Connect(connectionString)
.UseFeatureFlags();
});
In het voorgaande codefragment:
- De
builder.Configuration
-methode van de app wordt aangeroepen om een configuratieprovider te registreren voor de Azure App Configuration-store. De configuratieprovider wordt geregistreerd via een aanroep naarAddAzureAppConfiguration
. - Het gedrag van de Azure App Configuration-provider wordt geconfigureerd met de volgende opties:
- Verifieer bij de bijbehorende Azure-service via een verbindingsreeks die is doorgegeven aan de
Connect
methodeaanroep. De verbindingsreeks wordt opgehaald uit deconnectionString
variabele. De geregistreerde configuratiebronnen worden beschikbaar gesteld viabuilder.Configuration
. - Schakel ondersteuning voor functievlagmen in via een oproep naar
UseFeatureFlags
.
- Verifieer bij de bijbehorende Azure-service via een verbindingsreeks die is doorgegeven aan de
- De Azure App Configuration-provider vervangt alle andere geregistreerde configuratieproviders omdat deze na alle andere geregistreerde configuratieproviders is geregistreerd.
Tip
In een ASP.NET Core-project hebt u toegang tot de lijst met geregistreerde providers door de eigenschap configBuilder.Sources
in ConfigureAppConfiguration
te analyseren.