Configurez vos applications avec Azure App Configuration !

Lors de la conception d’une application cloud, nous restons souvent dans nos premiers reflexes de développement en configurant nos applications (dans le cas de Docker) sous la forme de variables d’environnements.

Aujourd’hui, nous allons voir comment mettre en place l’un des principes des modèles d’architecture préconisé par l’application 12-Factor : « Store config in the environment » avec Azure App Configuration.

Qu’est –ce qu’Azure App Configuration ?

Azure App Configuration est un service Cloud disponible dans Azure permettant de gérer la configuration de votre application de manière centralisée ainsi que vos balises de fonctionnalités actives/désactivés.

Dans le cadre d’une application « monolithique », je vous dirais tout de suite que cette solution n’offre que peu d’avantages. En revanche dès lors que nous souhaitons réaliser une application cloud-native nous souhaitons tirer un maximum de bénéfices de cette plateforme cloud notamment en réalisant des services distribués. Le fait de réaliser ces micro-services occasionnera alors parfois des besoins partager des paramètres de configuration entre ces services.

Afin d’éviter une répartition des paramètres de votre application sur chacun des composants, l’utilisation de ce type de solution s’avère un avantage pour limiter les risques d’erreurs notamment lors de déploiements par exemple.

Comment ça marche ?

Ce service permet de gérer vos paramètres sous la forme de paires clés-valeurs avec une flexibilité puisque les clefs peuvent également représenter une hiérarchie dans les paramètres applicatifs comme une représentation JSON par exemple.

    AppName:Service1:ApiEndpoint
    AppName:Service2:ApiEndpoint

Une fois vos paramètres présents dans App Config, votre application doit avoir en charge la récupération de ces paramètres auprès d’App Config. Plusieurs langages sont actuellement pris en charge :

  • .NET,
  • Java Spring,
  • Python,
  • TypeScript,
  • NodeJS

Si votre langage n’est pas pris en charge, il est toujours possible de réccupérer ces paramètres au travers des API REST disponibles

Labels

Les labels sont intéressants dans cette solution. Ils offrent la possibilité de déclarer des valeurs de paramètres différents en fonction de ces labels et laissent le client d’App Configuration l’opportunité de récupérer uniquement les valeurs qui lui correspondent.

Cette fonctionnalité peut être très utile lorsque vous souhaitez par exemple proposer des configurations différentes en fonction des régions dans lesquels vous déployez l’application en sélectionnant un label Region avec des valeurs possibles comme : Europe, US, …

Vous pouvez aussi (comme moi je vais vous le présenter) l’utiliser pour représenter les environnements d’exécution de votre application.

Démo

Pour cette première prise en mains d’Azure App Configuration, je vous propose montrer l’utilisation de cette solution avec une application ASP.NET Core.

Après avoir créé mon instance App Configuration, j’y ai créé un ensemble de paramètres correspondants aux configurations de Logging de mon application en fonction de l’environnement d’exécution de celle-ci :

Configuration de logging d’une application .NET Core

Passons maintenant au code de l’application .NET Core.

Ajout du package NuGet

Pour pouvois utiliser App Configuration dans une application .NET Core, nous pouvons installer le package NuGet prévu:

dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore

Configuration de l’application

Puis voici comment ajouter dans notre configuration ASP.NET Core les paramètres en provenance de App Configuration (après avoir rajouté la chaine de connexion dans les user secrets de l’application) :

 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                    {
                        var settings = config.Build();
                        config.AddAzureAppConfiguration(options =>
                        {
options.Connect(settings.GetConnectionString("AppConfig"));
                        });
                    })
                        .UseStartup<Startup>();
                });

Utilisation des paramètres

Enfin, comme pour toute configuration dans .NET Core, nous pouvons accéder aux paramètres depuis l’injection de dépendance en faisant référence à l’instance de IConfiguration présente dans le runtime :

Filtrer les labels

Je vous en parlais plus haut, il est egalement possible avec App Configuration de réccupérer les paramètres par environnement. Pour réaliser cela, j’ai ajouté des filtres de sélection dans la configuation de l’application:

                            options.Connect(settings.GetConnectionString("AppConfig"))
                                .Select(KeyFilter.Any, LabelFilter.Null)
                                .Select(KeyFilter.Any, hostingContext.HostingEnvironment.EnvironmentName);

Le premier select permet alors de récupérer tous les paramètres qui n’ont pas de label (tous les paramètres non spécifiques à un environnement. Puis en second, je récupère les paramètres de mon environnement d’exécution.

Ainsi en modifiant, l’environnement d’exécution de mon application, je peux récupérer les paramètres correspondant (c.f: Utiliser plusieurs environnements dans ASP.NET Core | Microsoft Docs).

Flags de fonctionnalités

Les Flags de fonctionnalité sont encore des possibilités intéressantes dans le cas d’applications modernes puisqu’elles permettent d’activer/désactiver facilement des fonctionnalités de votre application depuis le portail de gestion de votre configuration. Bien entendu il est également possible de réaliser cela avec les settings que nous avons vus précédemment, mais regardons en quoi cela est intéressant dans notre application .NET Core.

Flags de fonctionnalités

Ajout des prérequis

Pour pouvoir utiliser les flags de feature, il faut installer un nouveau package puis ajouter des imports (dans nos vues) pour pouvoir utiliser ces flags.

dotnet add package Microsoft.FeatureManagement.AspNetCore

J’ajoute également la ligne suivante dans mon fichier _ViewImports.cshtml :

@addTagHelper *, Microsoft.FeatureManagement.AspNetCore

Activation de la gestion des features

Je modifie alors mon « Program.cs » afin de rajouter le support des flags dans les options du client de AppConfiguration:

options.UseFeatureFlags();

Enfin pour pouvoir bénéficier des classes et extensions ASP.NET Core permettent d’utiliser ces flags, nous pouvons ajouter la gestion des services :

services.AddAzureAppConfiguration();
services.AddFeatureManagement();

Utilisation

Il y a plusieurs manières d’utiliser ces flags de fonctionnalités dans notre application :

  • Programmatiquement avec l’instance IFeatureManagerSnapshot présente dans l’injection de dépendance du runtime.
  • Balises dans le code cshtml <feature name= »Beta »>
  • Attribut FeatureGate sur les controlleurs

Conclusions

Lorsque l’on développe des applications cloud natives, l’utilisation d’un gestionnaire de configuration de notre application n’est pas à négliger. L’implémentation de Azure App Configuration dans une application µService s’intègre parfaitement, et supporte un grand nombre de langages offrant de grandes possibilités d’intégration.

J’avais souvent délaissé ce type de solution en m’appuyant sur les gestionnaires de configuration par défaut d l’hébergeur (Azure Web App, Container environnement variables, …). La possibilité d’importer/exporter la configuration depuis Azre WebApps, fichiers JSON facilite la transition. Un autre intérêt que j’y trouve, la possibilité de charger la configuration à chaud de mon application (c.f: Tutorial: Use App Configuration dynamic configuration in ASP.NET Core – Azure App Configuration | Microsoft Docs) sans avoir à faire un redémarrage (ou redéploiement via CI/CD) de mon application …

Cerise sur le gâteau, Azure App Configuration permet également d’effectuer un contrôle par comparaisons des valeurs par labels, idéal pour valider la configuration entre environnements !

Plus d’infos sur Azure App Configuration : Azure App Configuration documentation | Microsoft Docs

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s