Überprüfen von App-Konfigurationskonzepten

Abgeschlossen

Das Erstellen von Microservices für eine verteilte Umgebung stellt eine erhebliche Herausforderung dar. In der Cloud gehostete Microservices werden häufig in mehreren Containern in verschiedenen Regionen ausgeführt. Durch die Implementierung einer Lösung, die den Code jedes Diensts von der Konfiguration trennt, wird das Triaging von Problemen in allen Umgebungen erleichtert.

In dieser Lektion erfahren Sie, wie Sie ASP.NET Core- und Docker-Konfigurationsfeatures in Azure App Configuration integrieren, um diese Herausforderung effektiv zu bewältigen.

Sie machen sich mit Folgendem vertraut:

  • ASP.NET Core-Konfigurationsinfrastruktur.
  • Kubernetes Konfigurationsabstraktion – die ConfigMap.
  • Azure App-Konfigurationsdienst.
  • Der .NET-Bibliothek „Featureverwaltung“.
  • In die App implementierte Komponenten von Featureflags.

ASP.NET Core-Konfiguration

Die Konfiguration in einem ASP.NET Core-Projekt ist in einem oder mehreren . NET-Konfigurationsanbietern enthalten. Ein Konfigurationsanbieter ist eine Abstraktion über eine bestimmte Konfigurationsquelle, z. B. eine JSON-Datei. Die Werte der Konfigurationsquelle werden als Sammlung von Schlüsselwertpaaren dargestellt.

Eine ASP.NET Core-App kann mehrere Konfigurationsanbieter registrieren, um Einstellungen aus verschiedenen Quellen zu lesen. Bei dem Standardanwendungshost werden mehrere Konfigurationsanbieter automatisch registriert. Die folgenden Konfigurationsquellen sind in der aufgeführten Reihenfolge verfügbar:

  1. JSON-Datei (appsettings.json)
  2. JSON-Datei (appsettings.{environment}.json)
  3. Benutzergeheimnisse
  4. Umgebungsvariablen
  5. Befehlszeile

Jeder Konfigurationsanbieter kann einen eigenen Schlüsselwert beitragen. Darüber hinaus kann jeder Anbieter einen Wert von einem Anbieter außer Kraft setzen, der zuvor in der Kette registriert wurde als sich selbst. Aufgrund der Registrierungsreihenfolge in der vorherigen Liste überschreibt ein UseFeatureManagement Befehlszeilenparameter eine UseFeatureManagement Umgebungsvariable. Ebenso kann ein UseFeatureManagement Schlüssel innerhalb von appsettings.json durch einen in UseFeatureManagement gespeicherten appsettings.Development.json Schlüssel überschrieben werden.

Konfigurationsschlüsselnamen können eine Hierarchie beschreiben. Beispielsweise bezieht sich die Notation "eShop:Store:SeasonalSale " auf das "SeasonalSale "-Feature im Store microservice der eShop-App . Diese Struktur kann konfigurationswerte auch einem Objektdiagramm oder einem Array zuordnen.

Von Bedeutung

Einige Plattformen unterstützen keinen Doppelpunkt in Umgebungsvariablennamen. Um die plattformübergreifende Kompatibilität sicherzustellen, wird anstelle eines Doppelpunkts () ein doppelter Unterstrich (__:) zum Trennen von Schlüsseln verwendet. Zum Beispiel ist eShop__Store__SeasonalSale das plattformübergreifende Äquivalent zu eShop:Store:SeasonalSale.

ASP.NET Core verwendet einen ConfigurationBinder , um Konfigurationswerte Objekten und Arrays zuzuordnen. Die Zuordnung zu Schlüsselnamen erfolgt ohne Berücksichtigung von Groß-/Kleinschreibung. Beispielsweise werden ConnectionString und connectionstring als gleichwertige Schlüssel behandelt. Weitere Informationen finden Sie unter Schlüssel und Werte.

Docker-Konfiguration

In Docker ist eine Abstraktion zum Behandeln der Konfiguration als Schlüsselwertpaarsammlung der Umgebungsvariablenabschnitt der YAML-Datei eines Containers. Der folgende Codeausschnitt ist ein Auszug aus der App-Datei 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

Der Dateiausschnitt definiert Folgendes:

  • Variablen, die im environment -Abschnitt der YAML-Datei gespeichert sind, wie im vorherigen Ausschnitt hervorgehoben.
  • Wird der containerisierten App als Umgebungsvariablen angezeigt.
  • Ein Mechanismus zum Speichern von .NET-Konfigurationswerten in Microservices-Apps.

Umgebungsvariablen sind ein plattformübergreifender Mechanismus zum Bereitstellen der Laufzeitkonfiguration für Apps, die in den Docker-Containern gehostet werden.

Azure App-Konfiguration

Ein zentralisierter Konfigurationsdienst ist besonders nützlich bei Microservices-Apps und anderen verteilten Apps. In diesem Modul wird die Azure App-Konfiguration als Dienst für die zentrale Verwaltung von Konfigurationswerten eingeführt, insbesondere für Featurekennzeichnungen. Der Dienst erleichtert die Problembehandlung von Fehlern, die auftreten, wenn die Konfiguration mit einer App bereitgestellt wird.

Die App-Konfiguration ist ein vollständig verwalteter Dienst, der Schlüsselwerte sowohl im Ruhezustand als auch während der Übertragung verschlüsselt. Mit ihr gespeicherte Konfigurationswerte können in Echtzeit aktualisiert werden, ohne dass eine App erneut bereitgestellt oder neu gestartet werden muss.

In einer ASP.NET Core-App wird die Azure-App-Konfiguration als Konfigurationsanbieter registriert. Abgesehen von der Anbieterregistrierung weiß die App nichts über den App Configuration-Speicher. Konfigurationswerte können über die Konfigurationsabstraktion von .NET – die IConfiguration Schnittstelle – abgerufen werden.

Bibliothek „Featureverwaltung“

Die Featureverwaltungsbibliothek stellt standardisierte .NET-APIs zum Verwalten von Featurekennzeichnungen in Apps bereit. Die Bibliothek wird in Form von zwei verschiedenen Paketen, die Microsoft.FeatureManagement und Microsoft.FeatureManagement.AspNetCore heißen, über NuGet verteilt. Das letztere Paket bietet Tag Helpers für die Verwendung in den Razor-Dateien eines ASP.NET Core-Projekts. Das frühere Paket reicht aus, wenn die Tag-Hilfsprogramme nicht benötigt werden oder nicht mit einem ASP.NET Core-Projekt verwendet werden.

Die Bibliothek wird basierend auf IConfiguration erstellt. Aus diesem Grund ist sie mit jedem .NET-Konfigurationsanbieter kompatibel, einschließlich des Anbieters für die Azure App-Konfiguration. Da die Bibliothek von der Azure-App-Konfiguration entkoppelt wird, wird die Integration der beiden über den Konfigurationsanbieter ermöglicht. Durch die Kombination dieser Bibliothek mit der Azure-App-Konfiguration können Sie Features dynamisch umschalten, ohne die unterstützende Infrastruktur zu implementieren.

Integration in die Azure-App-Konfiguration

Informationen zur Integration der Azure-App-Konfiguration und der Featureverwaltungsbibliothek finden Sie im folgenden Auszug aus der Datei eines ASP.NET Core-Projekts Program.cs :

string connectionString = builder.Configuration.GetConnectionString("AppConfig");

// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
  options.Connect(connectionString)
    .UseFeatureFlags();
});

Im vorherigen Codefragment:

  • Die builder.Configuration Methode der App wird aufgerufen, um einen Konfigurationsanbieter für den Azure App Configuration Store zu registrieren. Der Konfigurationsanbieter wird durch einen Aufruf von AddAzureAppConfiguration registriert.
  • Das Verhalten des Azure App-Konfigurationsanbieters ist mit den folgenden Optionen konfiguriert:
    • Authentifizieren sie sich beim entsprechenden Azure-Dienst über eine Verbindungszeichenfolge, die an den Connect Methodenaufruf übergeben wird. Die Verbindungszeichenfolge wird aus der connectionString Variablen abgerufen. Die registrierten Konfigurationsquellen werden über builder.Configuration verfügbar gemacht.
    • Aktivieren sie die Unterstützung von Featurekennzeichnungen über einen Anruf an UseFeatureFlags.
  • Der Azure App-Konfigurationsanbieter ersetzt alle anderen registrierten Konfigurationsanbieter, da er nach anderen registriert wird.

Tipp

In einem ASP.NET Core-Projekt können Sie auf die Liste der registrierten Anbieter zugreifen, indem Sie die configBuilder.Sources Eigenschaft innerhalb von ConfigureAppConfigurationanalysieren.