Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verschieben von Konfigurationsinformationen aus dem Anwendungsbereitstellungspaket an einen zentralen Speicherort. Dieser Ansatz bietet eine einfachere Verwaltung und Kontrolle von Konfigurationsdaten und die Gemeinsame Nutzung von Konfigurationsdaten über Anwendungen und Anwendungsinstanzen hinweg.
Kontext und Problem
Die meisten Anwendungslaufzeitumgebungen enthalten Konfigurationsinformationen in Dateien, die Sie mit der Anwendung bereitstellen. In einigen Fällen können Sie diese Dateien bearbeiten, um das Verhalten der Anwendung nach der Bereitstellung der Anwendung zu ändern. Konfigurationsänderungen erfordern jedoch, dass Sie die Anwendung erneut bereitstellen. Die erneute Bereitstellung führt häufig zu inakzeptablen Ausfallzeiten und anderen Verwaltungsaufwand.
Lokale Konfigurationsdateien beschränken auch die Konfiguration auf eine einzelne Anwendung. In einigen Szenarien sollten Sie Konfigurationseinstellungen für mehrere Anwendungen freigeben. Beispiele hierfür sind Datenbankverbindungszeichenfolgen, Benutzeroberflächendesigninformationen und die URLs von Warteschlangen und Speicher, die ein verwandter Satz von Anwendungen verwendet.
Das Verwalten von Änderungen an lokalen Konfigurationen in mehreren ausgeführten Instanzen der Anwendung ist eine Herausforderung. Diese Herausforderung kann zu Instanzen führen, die während der Bereitstellung des Updates unterschiedliche Konfigurationseinstellungen verwenden.
Updates für Anwendungen und Komponenten erfordern möglicherweise auch Änderungen an Konfigurationsschemas. Viele Konfigurationssysteme unterstützen keine verschiedenen Versionen von Konfigurationsinformationen.
Lösung
Speichern Sie die Konfigurationsinformationen im externen Speicher, und stellen Sie eine Schnittstelle bereit, mit der Sie Konfigurationseinstellungen schnell und effizient lesen und aktualisieren können. Der Typ des externen Speichers hängt von der Host- und Laufzeitumgebung der Anwendung ab. In einem in der Cloud gehosteten Szenario ist externer Speicher in der Regel ein cloudbasierter Speicherdienst oder dedizierter Konfigurationsdienst. Es kann auch eine gehostete Datenbank oder ein anderes benutzerdefiniertes System sein.
Der Sicherungsspeicher, den Sie für Konfigurationsinformationen auswählen, sollte über eine Schnittstelle verfügen, die einen konsistenten und benutzerfreundlichen Zugriff bietet. Sie sollte die Informationen in einem korrekt eingegebenen und strukturierten Format verfügbar machen. Die Implementierung muss möglicherweise auch den Zugriff der Benutzer zum Schutz von Konfigurationsdaten autorisieren. Möglicherweise muss es flexibel genug sein, um mehrere Versionen der Konfiguration zu speichern, z. B. Entwicklung, Staging und Produktion, einschließlich mehrerer Releaseversionen jeder Konfiguration.
Viele integrierte Konfigurationssysteme lesen die Daten, wenn die Anwendung gestartet wird, und speichern sie dann im Arbeitsspeicher zwischen, um schnellen Zugriff zu ermöglichen und die Auswirkungen auf die Anwendungsleistung zu minimieren. Je nach Art des verwendeten Sicherungsspeichers und der Latenz dieses Speichers sollten Sie einen Cachemechanismus innerhalb des externen Konfigurationsspeichers implementieren. Weitere Informationen finden Sie unter Zwischenspeicherungsleitfaden. Das folgende Diagramm zeigt eine Übersicht über das Muster des externen Konfigurationsspeichers mit einem optionalen lokalen Cache.
Probleme und Überlegungen
Berücksichtigen Sie die folgenden Punkte, wenn Sie sich für die Implementierung dieses Musters entscheiden:
Wählen Sie einen Sicherungsspeicher aus, der eine akzeptable Leistung, hohe Verfügbarkeit und Stabilität bietet. Stellen Sie sicher, dass Sie sie in Ihrem Anwendungswartungs- und Verwaltungsprozess sichern können. Verwenden Sie in einer in der Cloud gehosteten Anwendung einen Cloudspeichermechanismus oder einen dedizierten Konfigurationsplattformdienst, um diese Anforderungen zu erfüllen.
Entwerfen Sie das Schema des Sicherungsspeichers, um Flexibilität in den Informationstypen zu ermöglichen, die er enthalten kann. Stellen Sie sicher, dass sie Funktionen für alle Konfigurationsanforderungen bereitstellt, z. B. typierte Daten, Sammlungen von Einstellungen, mehrere Versionen von Einstellungen und alle anderen Features, die die Anwendungen benötigen. Das Schema sollte einfach erweitert werden, um weitere Einstellungen zu unterstützen, wenn sich die Anforderungen ändern.
Berücksichtigen Sie die physischen Funktionen des Sicherungsspeichers, wie sie sich auf die Art und Weise beziehen, in der Konfigurationsinformationen gespeichert werden, und die Auswirkungen auf die Leistung. Zum Beispiel erfordert das Speichern eines XML-Dokuments, das Konfigurationsinformationen enthält, entweder die Konfigurationsschnittstelle oder die Anwendung, um das Dokument zu analysieren, um einzelne Einstellungen zu lesen. Durch das Parsen wird die Aktualisierung von Einstellungen erschwert, jedoch kann das Zwischenspeichern der Einstellungen dazu beitragen, die geringere Leseleistung auszugleichen.
Überlegen Sie, wie die Konfigurationsschnittstelle die Kontrolle über den Umfang und die Vererbung von Konfigurationseinstellungen zulässt. So müssen Sie beispielsweise Konfigurationseinstellungen auf Organisations-, Anwendungs- und Computerebene festlegen. Die Konfigurationsschnittstelle muss möglicherweise die Kontrolle über den Zugriff auf verschiedene Zugriffsbereiche delegieren und zulassen oder verhindern, dass einzelne Anwendungen Einstellungen außer Kraft setzen.
Stellen Sie sicher, dass die Konfigurationsschnittstelle die Konfigurationsdaten in den erforderlichen Formaten verfügbar machen kann, z. B. typierte Werte, Auflistungen, Schlüsselwertpaare und Eigenschaftenbehälter.
Überlegen Sie, wie sich die Konfigurationsspeicherschnittstelle verhält, wenn Einstellungen Fehler enthalten oder im Sicherungsspeicher nicht vorhanden sind. Möglicherweise müssen Sie Standardeinstellungen und Protokollfehler wiederherstellen. Berücksichtigen Sie außerdem die Groß-/Kleinschreibung von Konfigurationseinstellungsschlüsseln oder -namen, wie Binärdaten gespeichert und behandelt werden und wie Null- oder leere Werte behandelt werden.
Überlegen Sie, wie Sie die Konfigurationsdaten schützen und nur den entsprechenden Benutzern und Anwendungen Zugriff gewähren. Die Konfigurationsspeicherschnittstelle stellt dieses Feature in der Regel bereit. Sie müssen jedoch auch sicherstellen, dass Benutzer und Anwendungen ohne die entsprechenden Berechtigungen nicht direkt auf die Daten im Sicherungsspeicher zugreifen können. Stellen Sie eine strikte Trennung zwischen den zum Lesen und Schreiben von Konfigurationsdaten erforderlichen Berechtigungen sicher. Überlegen Sie außerdem, ob Sie einige oder alle Konfigurationseinstellungen verschlüsseln müssen und wie Sie diese Verschlüsselung in der Konfigurationsspeicherschnittstelle implementieren.
Sie sollten auch die Überwachungsprotokollierung aktivieren, um aufzuzeichnen, wer Konfigurationswerte liest oder ändert und wann diese Aktionen auftreten. Wenden Sie dieselben Überwachungsanforderungen auf alle lokalen Fallbackkopien von Konfigurationsdaten an.
Trennen Sie nicht sensible Konfigurationswerte von geheimen Schlüsseln. Behalten Sie Routineeinstellungen, z. B. Featurekennzeichnungen und Endpunkte, in den Konfigurationseinstellungen bei. Speichern Sie geheime Schlüssel, z. B. Verbindungszeichenfolgen, API-Schlüssel, Zertifikate und Kennwörter, in einem dedizierten Geheimverwaltungssystem, das Verschlüsselung und kontrollierten Zugriff ermöglicht.
Zentral gespeicherte Konfigurationen, die das Anwendungsverhalten während der Laufzeit ändern, sind von entscheidender Bedeutung. Stellen Sie sie bereit, aktualisieren und verwalten Sie diese mithilfe der gleichen Mechanismen, die Sie zum Bereitstellen von Anwendungscode verwenden. Sie müssen beispielsweise Änderungen vornehmen, die sich auf mehrere Anwendungen auswirken können, indem Sie einen vollständig getesteten und mehrstufigen Bereitstellungsansatz verwenden, um sicherzustellen, dass die Änderung für alle Anwendungen geeignet ist, die diese Konfiguration verwenden. Wenn ein Administrator eine Einstellung zum Aktualisieren einer Anwendung bearbeitet, wirkt sich dies möglicherweise negativ auf andere Anwendungen aus, die dieselbe Einstellung verwenden. Produkte wie Azure App Configuration helfen, dieses Risiko durch integrierte Funktionen wie Revisionsverlauf, Point-in-Time Recovery (PITR), unveränderliche Momentaufnahmen und progressive Rolloutmuster zu mindern.
Wenn eine Anwendung Konfigurationsinformationen zwischenspeichert, müssen Sie die Anwendung benachrichtigen, wenn sich die Konfiguration ändert. Sie können eine Ablaufrichtlinie für zwischengespeicherte Konfigurationsdaten implementieren, damit diese Informationen automatisch regelmäßig aktualisiert werden. Die Anwendung sieht die Änderungen und implementiert sie.
Zwischengespeicherte Konfigurationsdaten können dabei helfen, vorübergehende Konnektivitätsprobleme zu beheben, die der externe Konfigurationsspeicher zur Anwendungslaufzeit erlebt, aber dieser Ansatz löst normalerweise das Problem nicht, wenn der externe Speicher beim Start der Anwendung nicht mehr auftritt. Stellen Sie sicher, dass Ihre Anwendungsbereitstellungspipeline die letzten bekannten Konfigurationswerte in einer Konfigurationsdatei bereitstellen kann, die verwendet werden kann, wenn Ihre Anwendung beim Start keine Livewerte abrufen kann.
Wann Sie dieses Muster verwenden sollten
Verwenden Sie dieses Muster in folgenden Fällen:
Sie müssen Konfigurationseinstellungen für mehrere Anwendungen oder Instanzen freigeben oder eine Standardkonfiguration für sie erzwingen.
Ihr Standardkonfigurationssystem unterstützt nicht alle erforderlichen Einstellungstypen, z. B. Bilder oder komplexe Datenstrukturen.
Sie benötigen einen ergänzenden Speicher für einige Einstellungen, während Anwendungen einige oder alle zentral gespeicherten Werte außer Kraft setzen können.
Sie müssen die Verwaltung über mehrere Anwendungen hinweg vereinfachen und die Konfiguration optional überwachen, indem Sie den Zugriff auf den Konfigurationsspeicher aufzeichnen.
Dieses Muster ist möglicherweise nicht geeignet, wenn:
- Ihre Konfiguration ist einfach, lokal für eine Anwendung und ändert sich nur während der normalen Veröffentlichungszyklen. In diesem Fall kann ein externer Konfigurationsspeicher unnötige Betriebskomplexität hinzufügen.
Arbeitslastgestaltung
Bewerten Sie, wie Sie das Muster für den externen Konfigurationsspeicher in einem Workloaddesign verwenden, um die in den Azure Well-Architected Framework-Säulen behandelten Ziele und Prinzipien zu erfüllen. Die folgende Tabelle enthält Anleitungen dazu, wie dieses Muster die Ziele jeder Säule unterstützt.
| Säule | So unterstützt dieses Muster die Säulenziele |
|---|---|
| Operational Excellence unterstützt die Workloadqualität durch standardisierte Prozesse und Teamzusammenhalt. | Diese Trennung der Anwendungskonfiguration vom Anwendungscode unterstützt die umgebungsspezifische Konfiguration und wendet die Versionsverwaltung auf Konfigurationswerte an. Externe Konfigurationsspeicher sind auch ein häufiger Ort zum Verwalten von Featurekennzeichnungen zum Implementieren sicherer Bereitstellungsmethoden. - OE:10 Automatisierungsdesign - OE:11 Sichere Bereitstellungsmethoden |
Wenn dieses Muster Kompromisse innerhalb einer Säule einführt, sollten Sie sie gegen die Ziele der anderen Säulen berücksichtigen.
Example
Die folgenden Beispiele zeigen, wie Sie das Muster für den externen Konfigurationsspeicher in Azure implementieren. Im ersten Beispiel werden App-Konfiguration und Clientbibliotheken verwendet. Im zweiten Beispiel wird ein benutzerdefinierter Sicherungsspeicher für Szenarien verwendet, die eine spezielle Implementierung erfordern.
App Configuration
Die meisten Anwendungen können die App-Konfiguration anstelle eines benutzerdefinierten Konfigurationsspeichers verwenden. Die App-Konfiguration unterstützt Schlüsselwertpaare , auf die Sie Namespaces anwenden können. Die App-Konfiguration unterstützt auch unveränderliche Momentaufnahmen der Konfiguration, sodass Sie Konfigurationsänderungen überprüfen, zurücksetzen oder schrittweise bereitstellen können, ohne dass Risiken für die Ausführung von Instanzen besteht.
Verwenden Sie Momentaufnahmenverweise, damit Anwendungen während der Laufzeit ohne Codeänderungen oder Neubereitstellung zwischen Momentaufnahmen wechseln können. Sie können Konfigurationswerte exportieren, damit eine Kopie mit Ihrer Anwendung als Sicherung ausgeliefert wird, wenn der Dienst beim Start der Anwendung nicht erreichbar ist.
Bei der App-Konfiguration sind Schlüssel und Werte Unicode-Zeichenfolgen, und jedes Schlüsselwertpaar verfügt über optionale Metadaten, z. B. bezeichnungsbasierte Varianten und Inhaltstyp. Verwenden Sie den Inhaltstyp, um zu beschreiben, wie Ihre Anwendung einen Wert interpretieren soll, z. B. in JSON oder in einem integrierten App-Konfigurationstyp. Die App-Konfiguration behält auch einen Überarbeitungsverlauf mit PITR bei, wodurch Sie frühere Schlüsselwertpaare überprüfen und wiederherstellen können.
Stellen Sie für Resilienz Ihren Speicher in einer Region bereit, die Verfügbarkeitszonen unterstützt, und aktivieren Sie die Georeplikation , sodass Sie Ihre Anwendungen so konfigurieren können, dass sie aus dem nächstgelegenen Replikat gelesen und während regionaler Ausfalle zwischen Replikatendpunkten wechseln können. Verwenden Sie Azure Key Vault-Verweise, um Geheimnisse im Key Vault zu speichern und aus der App Configuration darauf zu referenzieren, anstatt Anmeldeinformationen direkt im Konfigurationsspeicher zu speichern. Verwenden Sie managed Identity und Azure rollenbasierte Zugriffssteuerung (Azure RBAC) anstelle von Verbindungszeichenfolgen zum Authentifizieren von Anwendungen bei der App-Konfiguration.
Für Workloads, die in Azure Kubernetes Service (AKS) ausgeführt werden, kann der App Configuration Kubernetes Provider ConfigMaps und Secrets direkt aus Ihrem Speicher generieren, ohne dass Codeänderungen in Ihren Workloadcontainern erforderlich sind. Sie können die App-Konfiguration auch verwenden, um Feature-Flags zu verwalten, einschließlich gezielter Rollouts und variantenbasierter Experimente, in Ihren sicheren Bereitstellungspraktiken.
Verwenden Sie für die Netzwerkisolation Private-Endpunkte für die App-Konfiguration damit der Clientdatenverkehr über Azure Private Link auf privaten IP-Adressen verbleibt. Nachdem Sie den privaten Zugriff eingerichtet haben, können Sie den öffentlichen Zugriff deaktivieren , um die Gefährdung öffentlicher Endpunkte zu verringern. In georeplizierten Bereitstellungen kann ein einzelner privater Endpunkt alle Replikate erreichen, aber für eine höhere regionale Resilienz können Sie private Endpunkte für jede Replikatregion bereitstellen und das Domain Name System (DNS) entsprechend einrichten.
Clientbibliotheken
Clientbibliotheken bieten viele der vorherigen Features. Clientbibliotheken sind in die Anwendungslaufzeit integriert, um Werte abzurufen und zwischenzuspeichern, Werte zu aktualisieren, wenn sie sich ändern, und vorübergehende Ausfälle in der App-Konfiguration zu behandeln.
| Laufzeit | Clientbibliothek | Hinweise | Schnellstart |
|---|---|---|---|
| .NET | Microsoft.Extensions.Configuration.AzureAppConfiguration | Anbieter für Microsoft.Extensions.Configuration |
Schnellstartanleitung für .NET |
| ASP.NET Kern | Microsoft.Azure.AppConfiguration.AspNetCore | Fügt anforderungsgesteuerte Aktualisierungs-Middleware für ASP.NET Core hinzu. | Quickstart für ASP.NET Core |
| Azure Functions in .NET | Microsoft.Azure.AppConfiguration.Functions.Worker | Anbieter für das Modell des isolierten Mitarbeiters, das Program.cs verwendet |
Quickstart für Azure Functions |
| .NET Framework | Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration | Konfigurations-Generator für System.Configuration |
Quickstart für .NET Framework |
| Java Frühling | com.azure.spring > azure-spring-cloud-appconfiguration-config | Unterstützt den Spring Framework-Zugriff über ConfigurationProperties |
Quickstart für Java Spring |
| Python | Azure-App-Konfigurationsanbieter | Anbieterbibliothek, die dynamische Aktualisierung und Key Vault Referenzunterstützung bereitstellt | Schnellstartanleitung für Python |
| JavaScript und Node.js | @azure/app-configuration-provider (ein Anbieter für die Konfiguration von Anwendungen) | Anbieterbibliothek, die dynamische Aktualisierung und Key Vault Referenzunterstützung bereitstellt | Schnellstartanleitung für JavaScript |
Die folgenden Synchronisierungsaktionen für die App-Konfiguration, GitHub-Aktionen und integrierte Azure-Pipelines-Aufgaben sind ebenfalls verfügbar:
Beispiel für einen benutzerdefinierten Sicherungsspeicher
In einer von Azure gehosteten Anwendung können Sie Azure Storage verwenden, um Konfigurationsinformationen extern zu speichern. Dieser Ansatz bietet Resilienz und hohe Leistung. Standardmäßig repliziert Speicher Daten dreimal innerhalb eines einzelnen Rechenzentrums. Für Geo-Redundanz über Regionen hinweg können Sie die Georeplikation mit manuellen Failover-Funktionen einrichten. Azure Table Storage stellt einen Schlüsselwertspeicher bereit, der ein flexibles Schema für die Werte verwenden kann. Azure Blob Storage stellt einen hierarchischen containerbasierten Speicher bereit, der jeden Datentyp in einzelnen benannten Blobs enthalten kann.
Wenn Sie dieses Muster implementieren, müssen Sie Blob Storage abstrahieren und Ihre Einstellungen in Ihren Anwendungen verfügbar machen. Außerdem müssen Sie zur Laufzeit nach Updates suchen und entscheiden, wie Sie auf diese Updates reagieren.
Das folgende Beispiel zeigt, wie Sie einen einfachen Konfigurationsspeicher und Blob Storage verwenden können, um Konfigurationsinformationen zu speichern und verfügbar zu machen. Eine BlobSettingsStore-Klasse abstrahiert Blob Storage zum Halten von Konfigurationsinformationen. Es implementiert eine einfache ISettingsStore Schnittstelle.
public interface ISettingsStore
{
Task<ETag> GetVersionAsync();
Task<Dictionary<string, string>> FindAllAsync();
}
Diese Schnittstelle definiert Methoden zum Abrufen von Konfigurationseinstellungen, die der Konfigurationsspeicher enthält, und enthält eine Versionsnummer, mit der Sie aktuelle Konfigurationseinstellungsänderungen erkennen können. Eine BlobSettingsStore Klasse kann die ETag Eigenschaft des Blob zur Implementierung der Versionsverwaltung nutzen. Die ETag-Eigenschaft wird jedes Mal automatisch aktualisiert, wenn ein BLOB geschrieben wird.
Note
Diese einfache Abbildung macht alle Konfigurationseinstellungen als Zeichenfolgenwerte und nicht als eingegebene Werte verfügbar.
Eine ExternalConfigurationManager Klasse stellt einen Wrapper um eine BlobSettingsStore Instanz bereit. Eine Anwendung kann diese Klasse verwenden, um Konfigurationsinformationen abzurufen. Diese Klasse kann einen Änderungsbenachrichtigungsmechanismus verwenden, z. B. Microsoft Reaktive Erweiterungen, um Konfigurationsupdates zu veröffentlichen, während das System ausgeführt wird. Außerdem wird das Cache-Aside Muster für Einstellungen implementiert, um eine bessere Resilienz und Leistung zu bieten.
Das folgende Beispiel zeigt, wie Sie eine ExternalConfigurationManager Klasse implementieren können.
static void Main(string[] args)
{
// Start monitoring configuration changes.
ExternalConfiguration.Instance.StartMonitor();
// Get a setting.
var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
…
}
Nächste Schritte
- App-Konfigurationsbeispiele
- Integrieren der App-Konfiguration mit Kubernetes-Bereitstellungen mithilfe von Helm
- Verwalten von Featurekennzeichnungen in der App-Konfiguration
- Caching-Richtlinien
- Bewährte Methoden für die App-Konfiguration