Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Déplacez les informations de configuration du package de déploiement d’application vers un emplacement centralisé. Cette approche facilite la gestion et le contrôle des données de configuration, et permet de partager des données de configuration entre les applications et les instances d’application.
Contexte et problème
La plupart des environnements d’exécution d’application incluent des informations de configuration dans les fichiers que vous déployez avec l’application. Dans certains cas, vous pouvez modifier ces fichiers pour modifier le comportement de l’application après avoir déployé l’application. Toutefois, les modifications de configuration vous obligent à redéployer l’application. Le redéploiement entraîne souvent des temps d’arrêt inacceptables et d’autres frais administratifs.
Les fichiers de configuration locaux limitent également la configuration à une seule application. Dans certains scénarios, vous pouvez partager des paramètres de configuration entre plusieurs applications. Par exemple, citons les chaînes de connexion de base de données, les informations sur le thème de l’interface utilisateur et les URL des files d’attente et du stockage qu’un ensemble associé d’applications utilise.
La gestion des modifications apportées aux configurations locales sur plusieurs instances en cours d’exécution de l’application est difficile. Ce défi peut entraîner des instances qui utilisent différents paramètres de configuration lors du déploiement de la mise à jour.
Les mises à jour apportées aux applications et aux composants peuvent également nécessiter des modifications apportées aux schémas de configuration. De nombreux systèmes de configuration ne prennent pas en charge différentes versions des informations de configuration.
Solution
Stockez les informations de configuration dans le stockage externe et fournissez une interface que vous pouvez utiliser pour lire et mettre à jour rapidement et efficacement les paramètres de configuration. Le type de magasin externe dépend de l’environnement d’hébergement et d’exécution de l’application. Dans un scénario hébergé dans le cloud, le stockage externe est généralement un service de stockage basé sur le cloud ou un service de configuration dédié. Il peut également s’agir d’une base de données hébergée ou d’un autre système personnalisé.
Le magasin de stockage que vous choisissez pour les informations de configuration doit avoir une interface qui fournit un accès cohérent et facile à utiliser. Il doit exposer les informations dans un format correctement typé et structuré. L’implémentation peut également avoir besoin d’autoriser l’accès des utilisateurs pour protéger les données de configuration. Il peut être nécessaire de disposer d’une flexibilité suffisante pour stocker plusieurs versions de la configuration, telles que le développement, la préproduction et la production, y compris plusieurs versions de version de chaque configuration.
De nombreux systèmes de configuration intégrés lisent les données au démarrage de l’application, puis cachent les données en mémoire pour fournir un accès rapide et réduire l’impact sur les performances de l’application. Selon le type de magasin de stockage que vous utilisez et la latence de ce magasin, vous pouvez implémenter un mécanisme de mise en cache dans le magasin de configuration externe. Pour plus d’informations, consultez les instructions de mise en cache. Le diagramme suivant montre une vue d’ensemble du modèle magasin de configuration externe avec un cache local facultatif.
Problèmes et considérations
Tenez compte des points suivants lorsque vous décidez comment implémenter ce modèle :
Choisissez un magasin de stockage qui offre des performances, une haute disponibilité et une robustesse acceptables. Vérifiez que vous pouvez la sauvegarder dans le processus de maintenance et d’administration de votre application. Dans une application hébergée dans le cloud, utilisez un mécanisme de stockage cloud ou un service de plateforme de configuration dédié pour répondre à ces exigences.
Concevez le schéma du magasin de stockage pour permettre une flexibilité dans les types d’informations qu’il peut contenir. Assurez-vous qu’elle fournit des fonctionnalités pour toutes les exigences de configuration, telles que les données typées, les regroupements de paramètres, plusieurs versions de paramètres et toutes les autres fonctionnalités requises par les applications. Le schéma doit être facile à étendre pour prendre en charge davantage de paramètres lorsque les exigences changent.
Considérez les capacités physiques de la mémoire de stockage, comment elles sont liées à la manière dont elle stocke les informations de configuration, et les effets sur les performances. Par exemple, le stockage d’un document XML qui contient des informations de configuration nécessite l’interface de configuration ou l’application pour analyser le document pour lire des paramètres individuels. L’analyse complique la façon dont vous mettez à jour les paramètres, mais la mise en cache des paramètres peut aider à compenser les performances de lecture plus lentes.
Réfléchissez à la façon dont l’interface de configuration autorise le contrôle de l’étendue et de l’héritage des paramètres de configuration. Par exemple, vous devrez peut-être étendre les paramètres de configuration au niveau de l’organisation, de l’application et de l’ordinateur. L’interface de configuration peut avoir besoin de déléguer le contrôle sur l’accès à différentes étendues et empêcher ou autoriser des applications individuelles à remplacer les paramètres.
Vérifiez que l’interface de configuration peut exposer les données de configuration dans les formats requis, telles que les valeurs typées, les collections, les paires clé-valeur et les sacs de propriétés.
Prenez en compte le comportement de l'interface de stockage de configuration lorsque les paramètres présentent des erreurs ou ne se trouvent pas dans l'espace de stockage. Vous devrez peut-être restaurer les paramètres par défaut et les erreurs de journalisation. Considérez également la sensibilité à la casse des clés de configuration ou des noms, comment stocker et gérer des données binaires et comment gérer les valeurs nulles ou vides.
Pensez à protéger les données de configuration et à accorder l’accès aux seuls utilisateurs et applications appropriés. L’interface de magasin de configuration fournit généralement cette fonctionnalité, mais vous devez également vous assurer que les utilisateurs et les applications ne peuvent pas accéder directement aux données dans le magasin de stockage sans les autorisations appropriées. Assurez-vous d’une séparation stricte entre les autorisations requises pour lire et écrire des données de configuration. Déterminez également si vous devez chiffrer certains ou tous les paramètres de configuration et comment implémenter ce chiffrement dans l’interface du magasin de configuration.
Vous devez également activer la journalisation d’audit pour enregistrer qui lit ou modifie les valeurs de configuration et lorsque ces actions se produisent. Appliquez les mêmes exigences d’audit à toutes les copies de secours locales des données de configuration.
Séparez les valeurs de configuration non sensibles des secrets. Conservez les paramètres de routine, tels que les indicateurs de fonctionnalité et les points de terminaison, dans les paramètres de configuration. Stockez des secrets, tels que des chaînes de connexion, des clés API, des certificats et des mots de passe, dans un système de gestion des secrets dédié qui fournit un chiffrement et un accès contrôlé.
Les configurations stockées de manière centralisée, qui modifient le comportement de l’application pendant l’exécution, sont cruciales. Déployez, mettez à jour et gérez-les à l’aide des mêmes mécanismes que ceux que vous utilisez pour déployer du code d’application. Par exemple, vous devez effectuer des modifications qui peuvent affecter plusieurs applications à l’aide d’une approche de déploiement entièrement testée et intermédiaire pour vous assurer que la modification convient à toutes les applications qui utilisent cette configuration. Si un administrateur modifie un paramètre pour mettre à jour une application, cela peut affecter d’autres applications qui utilisent le même paramètre. Les produits tels que Azure App Configuration aident à atténuer ce risque par le biais de fonctionnalités intégrées, telles que l’historique des révisions, la récupération à un point dans le temps (PITR), les instantanés immuables et les modèles de déploiement progressifs.
Si une application met en cache les informations de configuration, vous devez alerter l’application lorsque la configuration change. Vous pouvez implémenter une stratégie d’expiration pour les données de configuration mises en cache afin que ces informations s’actualisent automatiquement régulièrement. L’application voit les modifications et les implémente.
Les données de configuration mises en cache peuvent aider à résoudre les problèmes de connectivité temporaires rencontrés par le magasin de configuration externe au moment de l’exécution de l’application, mais cette approche ne résout généralement pas le problème si le magasin externe est arrêté au démarrage de l’application. Vérifiez que votre pipeline de déploiement d’application peut fournir le dernier ensemble connu de valeurs de configuration dans un fichier de configuration à utiliser lorsque votre application ne peut pas récupérer les valeurs actives au démarrage.
Quand utiliser ce modèle
Utilisez ce modèle dans les situations suivantes :
Vous devez partager des paramètres de configuration entre plusieurs applications ou instances ou appliquer une configuration standard.
Votre système de configuration standard ne prend pas en charge tous les types de paramètres requis, tels que les images ou les structures de données complexes.
Vous avez besoin d’un magasin complémentaire pour certains paramètres, tout en permettant aux applications de remplacer certaines ou toutes les valeurs stockées de manière centralisée.
Vous devez simplifier l’administration sur plusieurs applications et surveiller éventuellement l’utilisation de la configuration en enregistrant l’accès au magasin de configuration.
Ce modèle peut ne pas convenir lorsque :
- Votre configuration est simple, locale à une application et change uniquement pendant les cycles de publication normaux. Dans ce cas, un magasin de configuration externe peut ajouter une complexité opérationnelle inutile.
Conception de la charge de travail
Évaluez comment utiliser le modèle de magasin de configuration externe dans une conception de charge de travail, pour répondre aux objectifs et principes abordés dans les piliers Azure Well-Architected Framework. Le tableau suivant fournit des conseils sur la façon dont ce modèle prend en charge les objectifs de chaque pilier.
| Pilier | Comment ce modèle soutient les objectifs des piliers. |
|---|---|
| L’excellence opérationnelle permet de fournir une qualité de charge de travail grâce à des processus standardisés et à la cohésion de l’équipe. | Cette séparation de la configuration d’application du code d’application prend en charge la configuration spécifique à l’environnement et applique le contrôle de version aux valeurs de configuration. Les magasins de configuration externes sont également un endroit courant pour gérer les indicateurs de fonctionnalités afin d’implémenter des pratiques de déploiement sécurisées. - OE 10 Conception de l’automatisation - OE :11 Pratiques de déploiement sécurisé |
Si ce modèle introduit des compromis au sein d’un pilier, considérez-les contre les objectifs des autres piliers.
Example
Les exemples suivants montrent comment implémenter le modèle magasin de configuration externe dans Azure. Le premier exemple utilise App Configuration et les bibliothèques clientes. Le deuxième exemple utilise un magasin de stockage personnalisé pour les scénarios nécessitant une implémentation spécialisée.
App Configuration
La plupart des applications peuvent utiliser App Configuration au lieu d’un magasin de configuration personnalisé. App Configuration prend en charge les paires clé-valeur auxquelles vous pouvez attribuer des espaces de noms. App Configuration prend également en charge les instantanés immuables de la configuration afin de pouvoir inspecter, restaurer ou déployer progressivement des modifications de configuration sans risquer d’exécuter des instances.
Utilisez des références d’instantanés pour permettre aux applications de basculer entre les instantanés au moment de l’exécution sans modification ou redéploiement du code. Vous pouvez exporter des valeurs de configuration afin qu’une copie fournie avec votre application en tant que sauvegarde à utiliser si le service est inaccessible au démarrage de l’application.
Dans App Configuration, les clés et les valeurs sont des chaînes Unicode, et chaque paire clé-valeur a des métadonnées facultatives, telles que les variantes basées sur des étiquettes et letype de contenu. Utilisez le type de contenu pour décrire comment votre application doit interpréter une valeur, telle qu’en JSON ou dans un type App Configuration intégré. App Configuration conserve également un historique de révision avec PITR, ce qui vous permet de passer en revue et de récupérer les paires clé-valeur précédentes.
Pour la résilience, approvisionnez votre magasin dans une région qui prend en charge les zones de disponibilité et activez la géoréplication afin que vous puissiez configurer vos applications pour lire à partir du réplica le plus proche et basculer entre les points de terminaison de réplica pendant les pannes régionales. Utilisez les références Azure Key Vault pour conserver vos secrets dans Key Vault et les référencer à partir d’App Configuration, plutôt que de stocker les identifiants directement dans le magasin de configuration. Utilisez identité managée et Azure contrôle d’accès en fonction du rôle (Azure RBAC) au lieu de chaînes de connexion pour authentifier les applications auprès d’App Configuration.
Pour les charges de travail qui s'exécutent dans Azure Kubernetes Service (AKS), le fournisseur Kubernetes de Configuration d'Applications peut générer des ConfigMaps et des secrets directement à partir de votre magasin sans nécessiter de modifications de code dans vos conteneurs de charge de travail. Vous pouvez également utiliser App Configuration pour gérer les indicateurs de fonctionnalité, notamment le déploiement ciblé et l’expérimentation basée sur des variantes, dans vos pratiques de déploiement sécurisées.
Pour l’isolation réseau, utilisez des points de terminaison private pour App Configuration afin que le trafic client reste sur des adresses IP privées via Azure Private Link. Après avoir configuré l’accès privé, vous pouvez désactiver l’accès public pour réduire l’exposition des points de terminaison publics. Dans les déploiements géorépliqués, un point de terminaison privé unique peut atteindre tous les réplicas, mais pour une résilience régionale plus élevée, vous pouvez provisionner des points de terminaison privés pour chaque région de réplica et configurer le système DNS (Domain Name System) en conséquence.
Un diagramme montrant un exemple d’implémentation du modèle de Magasin de Configuration Externe avec App Configuration comme hub central qui se connecte à plusieurs services Azure et à plusieurs systèmes de stockage.
En haut du diagramme, une flèche pointe d’une fonction Azure vers App Configuration. Sur le côté gauche du diagramme, une flèche connecte l’environnement Azure Container Apps et AKS et pointe vers App Configuration. Sur le côté droit du diagramme, une flèche connecte une machine virtuelle Azure et Azure App Service à App Configuration. Une flèche pointe de App Configuration vers Key Vault en bas du diagramme. L’architecture montre comment App Configuration sert de service de gestion de configuration centralisé auquel plusieurs services de calcul Azure peuvent accéder pour récupérer les paramètres d’application, tout en conservant des secrets sensibles dans Key Vault et en les référençant via App Configuration.
Bibliothèques clientes
Les bibliothèques clientes fournissent la plupart des fonctionnalités précédentes. Les bibliothèques clientes s’intègrent au runtime d’application pour aider à extraire et à mettre en cache des valeurs, à actualiser les valeurs lorsqu’elles changent et à gérer les pannes temporaires dans App Configuration.
| Temps d'exécution | Bibliothèque de client | Remarques | Démarrage rapide |
|---|---|---|---|
| .NET | Microsoft.Extensions.Configuration.AzureAppConfiguration | Fournisseur pour Microsoft.Extensions.Configuration |
Démarrage rapide pour .NET |
| ASP.NET Core | Microsoft.Azure.AppConfiguration.AspNetCore | Ajoute l’intergiciel d’actualisation piloté par les requêtes pour ASP.NET Core | Quickstart pour ASP.NET Core |
| Azure Functions dans .NET | Microsoft.Azure.AppConfiguration.Functions.Worker | Fournisseur du modèle de travailleur isolé qui utilise Program.cs |
Quickstart pour Azure Functions |
| .NET Framework | Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration | Générateur de configuration pour System.Configuration |
Quickstart pour .NET Framework |
| Java Spring | com.azure.spring > azure-spring-cloud-appconfiguration-config | Prend en charge l’accès à Spring Framework via ConfigurationProperties |
Quickstart pour Java Spring |
| Python | provideur de configuration d'application Azure | Bibliothèque de fournisseurs qui fournit une actualisation dynamique et une prise en charge de référence Key Vault | Démarrage rapide pour Python |
| JavaScript et Node.js | @azure/app-configuration-provider | Bibliothèque de fournisseurs proposant une actualisation dynamique et une prise en charge des références au Coffre de clés. | Démarrage rapide pour JavaScript |
La GitHub Action de synchronisation App Configuration et les tâches intégrées Azure Pipelines suivantes sont également disponibles :
Exemple de stockage de support personnalisé
Dans une application qui est hébergée par Azure, vous pouvez utiliser stockage Azure pour stocker des informations de configuration en externe. Cette approche offre une résilience et des performances élevées. Par défaut, le stockage réplique les données trois fois au sein d’un seul centre de données. Pour la géoredondance entre les régions, vous pouvez configurer la géoréplication avec des fonctionnalités de basculement manuel. Azure Table Storage fournit un magasin clé-valeur qui peut utiliser un schéma flexible pour les valeurs. Stockage Blob Azure fournit un magasin hiérarchique basé sur un conteneur qui peut contenir n’importe quel type de données dans des objets blob nommés individuellement.
Lorsque vous implémentez ce modèle, vous devez extraire Stockage Blob et exposer vos paramètres au sein de vos applications. Vous devez également rechercher les mises à jour au moment de l’exécution et décider comment répondre à ces mises à jour.
L’exemple suivant montre comment utiliser un magasin de configuration simple et Stockage Blob pour stocker et exposer des informations de configuration. Une classe BlobSettingsStore extrait Stockage Blob pour contenir des informations de configuration. Il implémente une interface simple ISettingsStore .
public interface ISettingsStore
{
Task<ETag> GetVersionAsync();
Task<Dictionary<string, string>> FindAllAsync();
}
Cette interface définit des méthodes pour récupérer les paramètres de configuration que le magasin de configuration contient et inclut un numéro de version que vous pouvez utiliser pour détecter les modifications récentes du paramètre de configuration. Une BlobSettingsStore classe peut utiliser la ETag propriété de l’objet blob pour implémenter le contrôle de version. La propriété ETag se met à jour automatiquement à chaque écriture d'un blob.
Note
Par conception, cette illustration simple expose tous les paramètres de configuration sous forme de valeurs de chaîne plutôt que de valeurs typées.
Une ExternalConfigurationManager classe fournit un wrapper autour d’une BlobSettingsStore instance. Une application peut utiliser cette classe pour récupérer les informations de configuration. Cette classe peut utiliser un mécanisme de notification de modification, tel que Microsoft Extensions réactives, pour publier des mises à jour de configuration pendant l’exécution du système. Il implémente également le modèle Cache-Aside pour les paramètres de configuration afin de fournir une meilleure résilience et des performances.
L’exemple suivant montre comment implémenter une ExternalConfigurationManager classe.
static void Main(string[] args)
{
// Start monitoring configuration changes.
ExternalConfiguration.Instance.StartMonitor();
// Get a setting.
var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
…
}
Étapes suivantes
- exemples de configuration de l'application
- Intégrer App Configuration aux déploiements Kubernetes à l’aide de Helm
- Gérer les indicateurs de fonctionnalité dans App Configuration
- Conseils de mise en cache
- Meilleures pratiques de configuration d'application
Ressource associée
- Modèle de mise en cache Cache-Aside