Simplification des App Settings avec Azure App Configuration

Peter KARDA
Publié par Peter KARDA
Catégorie : Azure / Azure Functions
22/12/2019

Le paramétrage d’un App Service ou d’une Function App se fait au moyen des paires clé-valeur (ex. : chaînes de connexion, endpoints d’API…). Quand on a une solution Azure conséquente avec de multiples services, il peut s’avérer difficile de gérer tous ces paramètres dans différents environnements. Un nouveau service Azure App Configuration permet d’externaliser les paramètres de l’application pour pouvoir les utiliser plus facilement et de façon centralisée. Tous les paramètres sont stockés à un endroit unique qui offre la possibilité de les récupérer depuis l’application. Cet article va vous montrer comment transférer facilement nos paramètres d’application dans ce nouveau service Azure.

 

Mise en place de l’App Configuration

 

Nous allons commencer par créer le service App Configuration directement depuis le portail Azure. Les seules informations nécessaires sont les suivantes : name, resource group, region et subscription.

 

App Configuration - creation resource

 

Nous avons nommé notre service mwappconfiguration. Notez que le endpoint pour cette App Configuration a été créé. Nous verrons donc un peu plus loin que l’application va utiliser ce endpoint pour accéder à son paramétrage.

 

App Configuration EndPoint

 

Nous allons maintenant utiliser Configuration explorer pour ajouter quelques paramètres d’application à l’App Configuration.

 

Ajout de paramètres d’application à l’App Configuration

 

Cliquez tout d’abord sur le menu Configuration explorer puis ajoutez vos premiers paramètres en cliquant sur + Create puis sur le sous-menu Key-value.

 

App Configuration - ajoute cle et valuer

 

Le seul paramètre requis est le nom de la clé Key. Il sert à nommer la paire clé-valeur et est utilisé pour stocker et récupérer une valeur correspondante.

Il y a deux approches générales pour le nommage des clés utilisées pour les données de configuration : plate ou hiérarchique. Elles sont similaires du point de vue de l’utilisation de l’application. Le nommage hiérarchique est plus facile à lire, gérer et utiliser. Il est courant d’organiser les clés dans un espace de nommage hiérarchique en utilisant un délimiteur de caractères, tel que « / » ou « : ». Pour plus d’informations sur la façon de définir des espaces de nommage de clés, rendez-vous sur la documentation disponible sur le site de Microsoft.

Supposons que notre application s’appelle MwDemoApp et qu’elle accède à un endpoint d’API. Les noms des clés pourraient donc ressembler à ceci :

 

MwConfigDemoApp:ApiEndpoint

 

Comme vous pouvez le constater, un attribut optionnel appelé label est également disponible pour la paire clé-valeur. Ce label vous permet d’utiliser plusieurs fois un même nom de clé. Il ajoute en quelque sorte une dimension à la clé. Supposons que vous souhaitiez travailler dans trois environnements différents : Dev, Test et Production. Pour ces environnements, vous préféreriez utiliser toujours la même clé plutôt que d’avoir à définir trois clés avec des noms différents. C’est typiquement dans ce genre de scénario que l’attribut label montre toute son utilité. Comme vous pouvez le voir, nous avons ajouté 3 paires clé-valeur avec la même clé : MwDemoApp:ApiEndpoint.

 

App Configuration - ajoute cle et valuer

 

Une fois les clés définies dans l’App Configuration, elles peuvent être utilisées dans un App Service, une Function App ou tout autre service Azure compatible avec l’App Configuration. Il est intéressant de mentionner que chaque modification de la valeur est historisée, ce qui permet si nécessaire de retrouver une valeur à une date et une heure précises.

 

Accès à l’App Configuration depuis une Function App

 

Pour accéder aux paires clé-valeur d’une App Configuration, vous pouvez utiliser sa chaîne de connexion qui est accessible dans le portail Azure. Une chaîne de connexion de ce type est considérée comme un secret : elle doit être stockée dans Azure Key Vault. Votre code doit donc s’authentifier à Key Vault pour pouvoir les récupérer. Une Function App peut également accéder à l’App Configuration en utilisant l’identité managée. Voyons comment faire.

Pour cette démonstration, nous avons créé une Function App nommée MwConfigDemoApp. Allez dans Function app settings et cliquez sur Identity.

 

App Configuration - activation Managed Identity

 

Mettez le statut de l’identité à On et cliquez sur Save pour enregistrer.

 

App Configuration - activation Managed Identity

 

Allez ensuite sur l’App Configuration, cliquez sur Access control (IAM) et ajoutez un rôle d’accès à la Function App MwConfigDemoApp.

 

App Configuration - ajout role pour Function App

 

Sélectionnez la Function App et cliquez sur Save pour enregistrez les modifications. Notre Function App a dorénavant accès à l’App Configuration.

 

Création d’une Azure Function avec l’App Configuration

 

Nous allons créer une Azure Function qui va lire des informations dans l’App Configuration. Créez une Azure Function dans Visual Studio et installez le package NuGet suivant.

 

Azure.Identity 1.1.1 or later

Microsoft.Extensions.Configuration.AzureAppConfiguration 3.0.1 or later

 

Le premier package permet à Azure Function de se connecter aux ressources Azure avec Managed Identity. Le deuxième package contient la classe ConfigurationBuilder qui permet d’utiliser l’App Configuration dans votre code.

 

App Configuration - installation des NuGets

 

Quelques lignes de code suffisent pour accéder à l’App Configuration et récupérer nos paramètres.  Nous allons commencer par créer une instance de ConfigurationBuilder et, avec les options suivantes, nous allons :

  • nous connecter à un endpoint de l’App Configuration avec l’identité managée. Le endpoint est le seul paramètre d’application que nous avons ajouté à la Function App. ;
  • repérer toutes les clés commençant par MwConfigDemoApp ;
  • filtrer uniquement celles qui portent le label Dev (souvenez-vous que nous avons aussi créé les mêmes clés pour Test et Production). Ce label est codé en dur. Dans une application du monde réel, nous le passerions plutôt comme paramètre de fonction.

 

var builder = new ConfigurationBuilder(); // App Cofiguration builder
   builder.AddAzureAppConfiguration(options =>
   {
       options.Connect(new Uri(Environment.GetEnvironmentVariable("AppConfigurationEndpoint")), 
           new ManagedIdentityCredential()).Select(keyFilter: "MwConfigDemoApp:*", labelFilter: "Dev");
   });
 
var config = builder.Build();
string apiEndpoint = config["MwConfigDemoApp:ApiEndpoint"];

// Now use apiEndpoint in HttpClient to get the data!

 

À la dernière ligne, nous avons extrait la valeur du endpoint de la clé « MwConfigDemoApp:ApiEndpoint » et sommes prêts à l’utiliser.

 

Résumé

 

Qui n’a jamais rêvé, principalement dans une solution Azure conséquente, de pouvoir stocker et gérer les paramètres d’une application dans un endroit unique et sécurisé ? Dans cet article, nous vous avons montré comment stocker et récupérer les paramètres d’une application avec l’App Configuration. Beaucoup de fonctionnalités n’entraient pas dans le cadre de cet article, mais l’App Configuration est très bien documentée (avec des exemples, les meilleures pratiques, etc.) sur la documentation disponible sur le site de Microsoft.