App Configuration - utiliser les labels pour partager plus facilement des configurations
J'aime beaucoup le service Azure App Configuration qui permet de stocker la configuration utilisée par une application Asp.Net Core, .Net Core ou autre de manière simple à gérer. Dans cert article, nous verrons comment partager une même configuration entre plusieurs applications tout en différenciant certaines valeurs à l'aide de labels.
La mise en place d'une configuration via Azure App Configuration est très simple : il suffit de l'ajouter comme source de configuration à partir de sa chaîne de connexion :
var appConfigConnectionString = config.GetConnectionString ("AppConfigConnection"); builder.AddAzureAppConfiguration (appConfigConnectionString);
Imaginons maintenant un exemple : vous souhaitez déployer deux instances du même exécutable (deux WebJobs par exemple) mais renseigner l'ensemble des paramètres de configuration est fastidieux car la majorité de ceux-ci sont les mêmes. Il est alors possible, dans le code, d'utiliser des clefs de configurations différentes en fonction d'un discriminant. Ici, par exemple, je vais utiliser la clef PasRigolote si je suis en train de traiter un certain type de fichier.
var typeDeFichier = Environment.GetEnvironmentVariable ("ClefDeConfigurationDifferentiantLeLogiciel"); string autreConfig; if (typeDeWorker == "kikouLol") { Environment.GetEnvironmentVariable ("AutreConfigkikouLol"); } else { Environment.GetEnvironmentVariable ("AutreConfigPasRigolote"); }
Cela reste cependant de la configuration à la main et certaines utilisations restent impossibles. Par exemple, la configuration des attributs TimeTrigger nécessite une clef de configuration figée en dur dans votre code.
[TimerTrigger("%ClefEnDur%")]
Azure App Configuration vous permet par contre de choisir pour une valeur de configuration un label spécifique qui par défaut il sera vide. Ce label va pouvoir être utilisé comme discriminant : chaque instance de logiciel utilisera les valeurs de configuration avec un label spécifique. Vous pouvez créer une valeur sans label et elle sera ainsi utilisée par défaut. Ici j'ai assigné pour la clef de configuration "AutreConfigkikouLol" la valeur 2 avec le label "PasRigolote" :
L'interface d'exploration de la configuration affiche alors les différentes valeurs sous la forme d'un expand.
Une fois cela réalisé, vous pouvez configurer votre application pour utiliser les valeurs de configuration portées par un label spécifique en une ligne de code. Notre problème initial sera alors résolu car notre logiciel utilisera toujours les mêmes clefs de configuration mais les valeurs seront différentes grâce à AppConfiguration ! Dans cet exemple, on demande à charger toutes les valeurs sans label et ensuite toutes celles qui ont le label "labelName" :
builder.AddAzureAppConfiguration( options => { options.Connect(appConfigConnectionString); options.Select(KeyFilter.Any, LabelFilter.Null); options.Select(KeyFilter.Any, $"{labelName}"); });
Ce système est en réalité bien plus puissant et vous pouvez définir des sélecteurs très précis en après lecture de la documentation.
Happy coding :)
PS : si vous souhaitez aller plus loin, cet article de Thomas vous aidera à utiliser des sous environnements.
Commentaires