Simplification des App Settings avec Azure App Configuration

Peter KARDA
Publié par Peter
Catégorie : Azure / Azure function
30/11/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.

Azure App Configuration

 

Nous avons nommé notre service mwappconfiguration. Au moment où nous rédigeons cet article, le service App Configuration est toujours en preview et son utilisation est gratuite. 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.

Création d'une App Configuration

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.

Ajout des paramètres clé/valeur

 

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.

Clés multiples

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.

Identité Function App

 

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

Activité l'identité

 

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

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. Notez que le package est disponible uniquement en pré-version (au moment où nous rédigeons cet article, App Configuration est encore en preview).

Microsoft.Extensions.Configuration.AzureAppConfiguration 2.0.0-preview-010050001-38 or later

Le package contient la classe ConfigurationBuilder qui permet d’utiliser l’App Configuration dans votre code.

App Configuration Nuget Package

 

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.ConnectWithManagedIdentity(Environment.GetEnvironmentVariable("AppConfigurationEndpoint"))
    .Use(keyFilter: "MwConfigDemoApp:*", labelFilter: "Dev");
});

var config = builder.Build();
string apiEndpoint = config["MwConfigDemoApp:ApiEndpoint"];

// Reste à utiliser apiEndpoint dans HttpClient pour récupérer les données !

À 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.