Überprüfen von Konzepten für die Konfiguration von Apps

Abgeschlossen

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

In dieser Lerneinheit erkunden Sie, wie Sie ASP.NET Core- und Docker-Konfigurationsfunktionen in Azure App Configuration integrieren können, um diese Aufgabe effektiv zu bewältigen.

Sie machen sich mit Folgendem vertraut:

  • Konfigurationsinfrastruktur von ASP.NET Core
  • Abstraktion der Kubernetes-Konfiguration – die ConfigMap.
  • Dem Dienst Azure App Configuration
  • Der .NET-Bibliothek „Featureverwaltung“
  • In die App implementierte Komponenten von Featureflags

ASP.NET Core-Konfiguration

Die Konfiguration in einem ASP.NET Core-Projekt wird von einem oder mehreren .NET-Konfigurationsanbietern unterstützt. Ein Konfigurationsanbieter ist eine Abstraktion einer bestimmten Konfigurationsquelle, z. B. einer JSON-Datei. Die Werte der Konfigurationsquelle werden als Sammlung von Schlüssel-Werte-Paaren dargestellt.

Eine ASP.NET Core-App kann mehrere Konfigurationsanbieter registrieren, um Einstellungen aus verschiedenen Quellen zu lesen. Beim Standardanwendungshost werden automatisch mehrere Konfigurationsanbieter 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 seinen eigenen Schlüsselwert beitragen. Darüber hinaus kann jeder Anbieter einen Wert eines Anbieters überschreiben, der vor ihm in der Kette registriert wurde. Aufgrund der Registrierungsreihenfolge in der vorherigen Liste überschreibt der Befehlszeilenparameter UseFeatureManagement die Umgebungsvariable UseFeatureManagement. Ebenso kann der Schlüssel UseFeatureManagement in appsettings.json durch den in appsettings.Development.json gespeicherten Schlüssel UseFeatureManagement überschrieben werden.

Mithilfe der Namen von Konfigurationsschlüsseln kann eine Hierarchie beschrieben werden. Beispielsweise bezieht sich die Notation eShop:Store:SeasonalSale auf die Funktion SeasonalSale innerhalb des Store-Microservice der eShop-App. In dieser Struktur können Konfigurationswerte auch einem Objektgraphen oder Array zugeordnet werden.

Wichtig

Einige Plattformen unterstützen in Namen von Umgebungsvariablen keinen Doppelpunkt. Um plattformübergreifende Kompatibilität sicherzustellen, wird zum Trennen von Schlüsseln ein doppelter Unterstrich (__) anstelle eines Doppelpunkts (:) verwendet. Beispielsweise ist eShop__Store__SeasonalSale die plattformübergreifend äquivalente Notation für eShop:Store:SeasonalSale.

ASP.NET Core verwendet das Element ConfigurationBinder, um Konfigurationswerte Objekten und Arrays zuzuordnen. Die Zuordnung zu Schlüsselnamen erfolgt ohne Berücksichtigung von Groß-/Kleinschreibung. Beispielsweise verweisen ConnectionString und connectionstring auf denselben Schlüssel. Weitere Informationen finden Sie unter Schlüssel und Werte.

Docker-Konfiguration

In Docker ist eine Abstraktion zum Behandeln der Konfiguration als Schlüssel-Wert-Paar-Sammlung der Umgebungsvariablenabschnitt der YAML-Datei eines Containers. Der folgende Codeausschnitt ist ein Auszug aus der docker-compose.yml-Datei der App.

services: 

  frontend:
    image: storeimage
    build:
      context: .
      dockerfile: DockerfileStore
    environment: 
      - ProductEndpoint=http://backend:8080
      - ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features.azconfig.io;Id=QWQy;Secret=V/4r/rhg/0tdy2L/AmMfBUcgTrYC4krRC7uFqbjRvDU=
    ports:
      - "32000:8080"
    depends_on: 
      - backend

Der Dateiausschnitt definiert Folgendes:

  • Variablen werden im environment-Abschnitt der YAML-Datei gespeichert, wie im vorherigen Codeausschnitt hervorgehoben.
  • Werden der Container-App als Umgebungsvariablen präsentiert
  • Sind der Mechanismus zum persistenten Speichern von .NET-Konfigurationswerten in Microservices-Apps

Umgebungsvariablen sind ein plattformübergreifender Mechanismus zur Bereitstellung von Runtimekonfigurationen für Apps, die in den Docker-Containern gehostet werden.

Azure App Configuration

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

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

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

Bibliothek „Featureverwaltung“

Die Bibliothek Featureverwaltung bietet standardisierte .NET-APIs zur Verwaltung von Featureflags innerhalb von Apps. Die Bibliothek wird über NuGet in Form zweier Pakete mit den Namen Microsoft.FeatureManagement und Microsoft.FeatureManagement.AspNetCore verteilt. Das letztere Paket stellt Taghilfsprogramme für die Verwendung in Razor-Dateien eines ASP.NET Core-Projekts bereit. Das erstgenannte Paket ist ausreichend, wenn die Taghilfsprogramme nicht benötigt werden oder keine Verwendung in einem ASP.NET Core-Projekt erfolgt.

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

Integration in Azure App Configuration

Um die Integration von Azure App Configuration und der Bibliothek „Featureverwaltung“ zu verstehen, sehen Sie sich den folgenden Auszug aus der Datei Program.cs eines ASP.NET Core-Projekts an:

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-Speicher zu registrieren. Der Konfigurationsanbieter wird über einen Aufruf von AddAzureAppConfiguration registriert.
  • Das Verhalten des Azure App Configuration-Anbieters wird mit den folgenden Optionen konfiguriert:
    • Authentifizieren Sie sich beim entsprechenden Azure-Dienst über eine Verbindungszeichenfolge, die an einen Aufruf der Connect-Methode übergeben wird. Die Verbindungszeichenfolge wird aus der connectionString-Variablen abgerufen. Die registrierten Konfigurationsquellen werden über builder.Configuration verfügbar gemacht.
    • Aktivieren Sie über einen Aufruf von UseFeatureFlags die Unterstützung von Featureflags.
  • Der Azure App Configuration-Anbieter ersetzt alle anderen registrierten Konfigurationsanbieter, da er nach diesen registriert wird.

Tipp

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