Modifier

Modèle de magasin de configurations externe

Azure App Configuration
Stockage Blob Azure

Déplacez les informations de configuration depuis le package de déploiement d’application vers un emplacement centralisé. Ainsi, vous pouvez gérer et contrôler les données de configuration plus facilement et partager les 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 contiennent des informations de configuration qui sont conservées dans les fichiers déployés avec l’application. Dans certains cas, il est possible de modifier ces fichiers pour changer le comportement de l’application après son déploiement. Toutefois, les modifications apportées à la configuration nécessitent le redéploiement de l’application, ce qui entraîne souvent des temps d’arrêt inacceptables et autres traitements administratifs.

En outre, les fichiers de configuration locale limitent la configuration à une seule application, alors que le partage des paramètres de configuration entre plusieurs applications pourrait parfois s’avérer utile. À titre d’exemple, citons les chaînes de connexion de base de données, les informations relatives aux thèmes de l’interface utilisateur ou les URL de files d’attente et de stockage utilisées par un ensemble d’applications connexe.

Il est difficile de gérer les modifications apportées aux configurations locales sur plusieurs instances en cours d’exécution de l’application, en particulier dans un scénario de type cloud. En effet, les instances risquent d’utiliser différents paramètres de configuration durant le déploiement de la mise à jour.

En outre, les mises à jour des applications et des composants peuvent nécessiter des modifications des 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 un stockage externe et fournissez une interface qui peut être utilisée pour lire et mettre à jour les paramètres de configuration rapidement et efficacement. Le type de magasin externe dépend de l’environnement d’hébergement et d’exécution de l’application. Dans un scénario de type cloud, il s’agit généralement d’un service de stockage cloud ou d’un service de configuration dédié, mais ce peut être une base de données hébergée ou un autre système personnalisé.

Le magasin de stockage que vous choisissez pour les informations de configuration doit avoir une interface qui offre un accès cohérent et facile à utiliser. Il doit exposer les informations dans un format correctement typé et structuré. Le cas échéant, l’implémentation doit aussi autoriser l’accès des utilisateurs afin de protéger les données de configuration, et être suffisamment flexible pour permettre le stockage de plusieurs versions de la configuration (par exemple, développement, préproduction ou production, y compris plusieurs versions de mise en production de chacune d’elles).

De nombreux systèmes de configuration intégrés lisent les données quand l’application démarre et les mettent en cache en mémoire afin de les rendre rapidement accessibles et de réduire au minimum l’impact sur les performances de l’application. Selon le type de magasin de stockage utilisé et la latence de ce magasin, il peut être utile d’implémenter un mécanisme de mise en cache dans le magasin de configuration externe. Pour plus d’informations, consultez la page Conseils de mise en cache. La figure illustre une vue d’ensemble du modèle de magasin de configuration externe avec le cache local facultatif.

Vue d’ensemble du modèle de magasin de configuration externe avec le cache local facultatif

Problèmes et considérations

Prenez en compte les points suivants lorsque vous choisissez comment implémenter ce modèle :

Choisissez un magasin de stockage qui offre des performances acceptables, un haut niveau de disponibilité, une certaine fiabilité et qui peut être sauvegardé dans le cadre du processus de maintenance et d’administration des applications. Dans une application hébergée dans le cloud, utiliser un mécanisme de stockage cloud ou un service de plateforme de configuration dédié est généralement un bon choix pour répondre à ces exigences.

Concevez le schéma du magasin de stockage afin qu’il puisse contenir des types d’informations variés. Vérifiez qu’il satisfait à toutes les contraintes de configuration requises, telles que les données typées, les collections de paramètres, la diversité des versions de paramètres et toute autre fonctionnalité nécessaire aux applications qui l’utilisent. Le schéma doit être facile à étendre pour prendre en charge des paramètres supplémentaires selon les besoins.

Prenez en considération les capacités physiques du magasin de stockage, sa relation au mode de stockage des informations de configuration et les effets sur les performances. Par exemple, le stockage d’un document XML contenant les informations de configuration nécessite que l’interface de configuration ou l’application analyse le document afin de lire les différents paramètres. Cela rend plus compliquée la mise à jour d’un paramètre, bien que la mise en cache des paramètres puisse aider à compenser la baisse des performances de lecture.

Considérez la façon dont l’interface de configuration doit permettre de contrôler l’étendue et l’héritage des paramètres de configuration. Par exemple, il peut être nécessaire de limiter l’étendue des paramètres de configuration à l’ordinateur, à l’application et à l’organisation. Il se peut qu’elle doive prendre en charge la délégation du contrôle de l’accès à différentes étendues et interdire à des applications spécifiques de remplacer les paramètres ou les autoriser à le faire.

Assurez-vous que l’interface de configuration peut exposer les données de configuration dans les formats requis (valeurs typées, collections, paires clé/valeur, conteneurs de propriétés, entre autres).

Considérez la façon dont l’interface du magasin de configuration doit se comporter si les paramètres contiennent des erreurs ou font défaut dans le magasin de sauvegarde. Il peut être approprié de retourner les paramètres par défaut et de consigner les erreurs. Envisagez également des aspects tels que le respect de la casse dans les clés ou les noms des paramètres de configuration, le stockage et la gestion des données binaires et la gestion des valeurs null ou vides.

Déterminez la façon dont les données de configuration doivent être protégées afin que seul l’accès aux utilisateurs et applications appropriés soit autorisé. Il s’agit probablement d’une fonctionnalité de l’interface du magasin de configuration, mais il est également nécessaire de s’assurer que les données du magasin de stockage ne sont pas directement accessibles sans l’autorisation appropriée. Mettez en place une séparation stricte entre les autorisations requises pour lire et pour écrire des données de configuration. En outre, déterminez si vous devez chiffrer tout ou partie des paramètres de configuration et la façon dont vous devez implémenter cela dans l’interface du magasin de configuration.

Les configurations stockées de manière centralisée, qui modifient le comportement de l’application pendant l’exécution, sont extrêmement importantes et doivent être déployées, mises à jour et gérées en utilisant les mêmes mécanismes que pour le déploiement du code d’une application. Par exemple, les modifications qui peuvent affecter plusieurs applications doivent être effectuées à l’aide d’un test complet et d’une approche de déploiement intermédiaire afin que la modification soit appropriée pour toutes les applications qui utilisent cette configuration. Si un administrateur modifie un paramètre pour mettre à jour une application, l’opération risque d’affecter les autres applications qui utilisent le même paramètre.

Si une application met en cache les informations de configuration, elle doit être alertée si la configuration est modifiée. Il peut être possible d’implémenter une stratégie d’expiration sur les données de configuration mises en cache afin que ces informations soient automatiquement actualisées à intervalles réguliers et que toute modification soit récupérée (et traitée en conséquence).

Bien que la mise en cache des données de configuration puisse contribuer à résoudre les problèmes de connectivité temporaires avec le magasin de configuration externe lors de l’exécution de l’application, cela ne résout généralement pas le problème si le magasin externe est hors service au moment du premier démarrage de l’application. En guise de solution de secours, veillez à ce que votre pipeline de déploiement d’applications puisse fournir le dernier ensemble connu de valeurs de configuration au sein d’un fichier de configuration si votre application ne parvient pas récupérer les valeurs en direct au moment du démarrage.

Quand utiliser ce modèle

Ce modèle est utile dans les situations suivantes :

  • Paramètres de configuration partagés entre plusieurs applications et instances d’application, ou quand une configuration standard doit être appliquée à plusieurs applications et instances d’application.

  • Système de configuration standard qui ne prend pas en charge tous les paramètres de configuration requis, tels que le stockage d’images ou les types de données complexes.

  • En tant que magasin complémentaire pour certains des paramètres des applications, avec possibilité éventuelle pour celles-ci de remplacer tout ou partie des paramètres stockés de manière centralisée.

  • Comme moyen de simplifier l’administration de plusieurs applications et éventuellement pour analyser l’utilisation des paramètres de configuration en consignant tout ou partie des types d’accès au magasin de configuration.

Conception de la charge de travail

Un architecte doit évaluer la façon dont le modèle de magasin de configurations externe peut être utilisé dans la conception de leurs charges de travail pour se conformer aux objectifs et principes abordés dans les piliers d’Azure Well-Architected Framework. Par exemple :

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 d’équipe. Cette séparation de la configuration de l’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 servent aussi souvent à gérer les indicateurs de fonctionnalités pour permettre des pratiques de déploiement sécurisé.

- OE 10 Conception de l’automatisation
- OE :11 Pratiques de déploiement sécurisé

Comme pour toute autre décision de conception, il convient de prendre en compte les compromis par rapport aux objectifs des autres piliers qui pourraient être introduits avec ce modèle.

Exemple de magasin de stockage personnalisé

Dans une application hébergée par Microsoft Azure, un choix possible pour stocker les informations de configuration de manière externe consiste à utiliser Stockage Azure. Cette solution est résiliente, offre des performances élevées et est répliquée trois fois avec basculement automatique pour offrir une haute disponibilité. Le stockage Table Azure fournit un magasin de clés/valeurs avec la possibilité d’utiliser un schéma flexible pour les valeurs. Le 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.

Lors de l’implémentation de ce modèle, vous êtes responsable de l’abstraction du stockage Blob Azure et de l’exposition de vos paramètres au sein de vos applications, notamment en vérifiant les mises à jour au moment de l’exécution et en indiquant comment y répondre.

L’exemple suivant montre comment un magasin de configuration simpliste peut être envisagé sur le stockage Blob pour stocker et exposer les informations de configuration. Une classe BlobSettingsStore peut procéder à l’abstraction du stockage Blob pour conserver les informations de configuration, et implémenter une interface ISettingsStore simple.

public interface ISettingsStore
{
    Task<ETag> GetVersionAsync();
    Task<Dictionary<string, string>> FindAllAsync();
}

Cette interface définit les méthodes utilisées pour récupérer les paramètres de configuration conservés dans le magasin de configuration, et inclut un numéro de version qui peut permettre de déterminer si des paramètres de configuration ont été récemment modifiés. Une classe BlobSettingsStore peut utiliser la propriété ETag de l’objet blob pour implémenter le contrôle de version. La propriété ETag est automatiquement mise à jour chaque fois qu’un objet blob est écrit.

Par nature, 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 classe ExternalConfigurationManager peut ensuite fournir un wrapper autour d’une instance BlobSettingsStore. Une application peut utiliser cette classe pour récupérer des informations de configuration. Cette classe peut par exemple utiliser Microsoft Reactive Extensions pour publier les modifications apportées à la configuration pendant l’exécution du système. Elle peut également être responsable de l’implémentation du modèle Cache-Aside pour que les paramètres offrent une résilience et des performances supplémentaires.

L’utilisation peut être semblable à ce qui suit.

static void Main(string[] args)
{
    // Start monitoring configuration changes.
    ExternalConfiguration.Instance.StartMonitor();

    // Get a setting.
    var setting = ExternalConfiguration.Instance.GetAppSetting("someSettingKey");
    …
}

Utilisation d’Azure App Configuration

Dans certains cas, la création d’un magasin de configuration personnalisé peut s’avérer nécessaire, mais de nombreuses applications utilisent plutôt Azure App Configuration. Azure App Configuration prend en charge les paires clé-valeur qui peuvent comporter des espaces de noms. Les clés sont typées et les versions sont gérées individuellement. Azure App Configuration prend également en charge les instantanés ponctuels de la configuration afin que vous puissiez facilement inspecter ou même revenir aux valeurs de configuration antérieures. Les valeurs de configuration peuvent être exportées afin qu’une copie de la configuration puisse être fournie avec votre application au cas où le service serait inaccessible au démarrage de l’application.

Bibliothèques clientes

La plupart de ces fonctionnalités sont exposées par le biais de bibliothèques clientes qui s’intègrent au runtime de l’application pour faciliter la récupération et la mise en cache des valeurs, l’actualisation de celles-ci en cas de modification, et même la gestion des interruptions temporaires du service App Configuration.

Runtime Bibliothèque de client Notes Démarrage rapide
.NET Microsoft.Extensions.Configuration.AzureAppConfiguration Fournisseur de Microsoft.Extensions.Configuration Démarrage rapide
ASP.NET Microsoft.Azure.AppConfiguration.AspNetCore Fournisseur de Microsoft.Extensions.Configuration Démarrage rapide
Azure Functions dans .NET Microsoft.Extensions.Configuration.AzureAppConfiguration Utilisé avec les extensions Azure Function pour prendre en charge la configuration dans Startup.cs Démarrage rapide
.NET Framework Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration Générateur de configuration pour System.Configuration Démarrage rapide
Java Spring com.azure.spring > azure-spring-cloud-appconfiguration-config Prend en charge l’accès à Spring Framework via ConfigurationProperties Démarrage rapide
Python azure.appconfiguration Fournit un AzureAppConfigurationClient Démarrage rapide
JavaScript/Node.js @azure/app-configuration Fournit un AppConfigurationClient Démarrage rapide

Outre les bibliothèques de clients, il existe également une action GitHub Synchroniser Azure App Configuration et des tâches Azure DevOps récupérer Azure App Configuration et Envoyer Azure App Configuration pour intégrer les étapes de configuration dans votre processus de génération.

Étapes suivantes