Passage en revue des concepts de configuration des applications

Effectué

La création de microservices pour un environnement distribué présente une difficulté importante. Les microservices hébergés dans le cloud s’exécutent souvent dans plusieurs conteneurs qui se trouvent dans différentes régions. L’implémentation d’une solution qui sépare le code de chaque service de la configuration facilite le triage des problèmes dans tous les environnements.

Dans cette unité, découvrez comment intégrer les fonctionnalités de configuration ASP.NET Core et Docker avec Azure App Configuration pour relever ce défi de manière efficace.

Vous allez passer en revue les éléments suivants :

  • L’infrastructure de la configuration ASP.NET Core
  • L’abstraction de la configuration Kubernetes (ConfigMap)
  • Le service Azure App Configuration
  • La bibliothèque Gestion des fonctionnalités .NET
  • Les composants de l’indicateur de fonctionnalité implémentés dans l’application

Configuration de la plateforme ASP.NET Core

La configuration d’un projet ASP.NET Core est assurée par un ou plusieurs fournisseurs de configuration .NET. Un fournisseur de configuration est une abstraction sur une source de configuration spécifique, par exemple un fichier JSON. Les valeurs de la source de configuration sont représentées sous la forme d’une collection de paires clé-valeur.

Une application ASP.NET Core peut inscrire plusieurs fournisseurs de configuration pour lire les paramètres à partir de différentes sources. Avec l’hôte d’application par défaut, plusieurs fournisseurs de configuration sont automatiquement inscrits. Les sources de configuration suivantes sont disponibles dans l’ordre indiqué :

  1. Fichier JSON (appsettings.json)
  2. Fichier JSON (appsettings.{environment}.json)
  3. Secrets utilisateur
  4. Variables d'environnement
  5. Ligne de commande

Chaque fournisseur de configuration peut apporter sa propre valeur de clé. Il peut également écraser celle d’un fournisseur inscrit plus tôt que lui dans la chaîne. Compte tenu de l’ordre d’inscription de la liste précédente, un paramètre de ligne de commande UseFeatureManagement remplace une variable d’environnement UseFeatureManagement. De même, une clé UseFeatureManagement située dans appsettings.json peut être remplacée par une clé UseFeatureManagement stockée dans appsettings.Development.json.

Le nom des clés de configuration peut décrire une hiérarchie. Par exemple, la notation eShop:Store:SeasonalSale fait référence à la fonctionnalité SeasonalSale dans le microservice Store de l’application eShop. Cette structure peut également faire correspondre des valeurs de configuration à un graphe d’objets ou à un tableau.

Important

Certaines plateformes ne prennent pas en charge le signe deux-points dans le nom des variables d’environnement. Pour garantir la compatibilité multiplateforme, un double trait de soulignement (__) est utilisé à la place du signe deux-points (:) pour délimiter les clés. Par exemple, eShop__Store__SeasonalSale est la notation multiplateforme qui équivaut à eShop:Store:SeasonalSale.

ASP.NET Core utilise un ConfigurationBinder pour faire correspondre les valeurs de configuration à des objets et tableaux. Le mappage avec les noms de clés ne respecte pas la casse. Par exemple, ConnectionString et connectionstring sont traités en tant que clés équivalentes. Pour plus d’informations, consultez Clés et valeurs.

Configuration Docker

Dans Docker, la section variable d’environnement du fichier YAML d’un conteneur est une abstraction permettant de gérer la configuration en tant que collection de paires clé-valeur. L’extrait de code suivant est un extrait du fichier docker-compose.yml de l’application :

services: 

  frontend:
    image: storeimage
    build:
      context: .
      dockerfile: DockerfileStore
    environment: 
      - ProductEndpoint=http://backend:8080
      - ConnectionStrings:AppConfig=Endpoint=https://eshop-app-features.azconfig.io;Id=QWQy;Secret=V/4r/rhg/0tdy2L/AmMfBUcgTrYC4krRC7uFqbjRvDU=
    ports:
      - "32000:8080"
    depends_on: 
      - backend

L’extrait de fichier définit :

  • Les variables stockées dans la section environment du fichier YAML, comme mis en évidence dans l’extrait de code précédent.
  • Elles sont présentées à l’application en conteneur en tant que variables d’environnement.
  • Un mécanisme permettant de conserver les valeurs de configuration .NET dans les applications de microservices.

Les variables d’environnement représentent un mécanisme multiplateforme permettant de fournir la configuration d’exécution aux applications hébergées dans les conteneurs Docker.

Azure App Configuration

Un service de configuration centralisé est particulièrement utile dans les applications de microservices et d’autres applications distribuées. Ce module présente le service Azure App Configuration, qui permet de gérer de manière centralisée les valeurs de configuration, en particulier pour les indicateurs de fonctionnalités. Le service facilite la résolution des erreurs qui surviennent lorsque la configuration est déployée avec une application.

App Configuration constitue un service complètement managé qui chiffre les valeurs de clés au repos et en transit. Les valeurs de configuration stockées avec peuvent être mises à jour en temps réel sans qu’il soit nécessaire de redéployer ni de redémarrer une application.

Dans une application ASP.NET Core, Azure App Configuration est inscrit en tant que fournisseur de configuration. Hormis l’inscription du fournisseur, l’application ne connaît pas le magasin App Configuration. Les valeurs de configuration peuvent être récupérées à partir de ce dernier au moyen de l’abstraction de configuration de .NET, à savoir l’interface IConfiguration.

Bibliothèque Gestion des fonctionnalités

La bibliothèque Gestion des fonctionnalités fournit des API .NET standardisées pour gérer les indicateurs de fonctionnalités dans les applications. La bibliothèque est distribuée par le biais de NuGet sous la forme de deux packages différents, nommés Microsoft.FeatureManagement et Microsoft.FeatureManagement.AspNetCore. Le deuxième package fournit des Tag Helpers destinés à être utilisés dans les fichiers Razor d’un projet ASP.NET Core. Le premier est suffisant lorsque les Tag Helpers ne sont pas nécessaires ou ne sont pas utilisés avec un projet ASP.NET Core.

La bibliothèque s’appuie sur IConfiguration. Elle est donc compatible avec tous les fournisseurs de configuration .NET, y compris le fournisseur Azure App Configuration. Comme elle est découplée d’Azure App Configuration, l’intégration des deux est rendue possible par l’intermédiaire du fournisseur de configuration. En combinant cette bibliothèque avec Azure App Configuration, vous pouvez activer et désactiver dynamiquement les fonctionnalités sans implémenter d’infrastructure de support.

Intégration avec Azure App Configuration

Pour comprendre l’intégration entre Azure App Configuration et la bibliothèque Gestion des fonctionnalités, consultez l’extrait suivant du fichier Program.cs d’un projet ASP.NET Core :

string connectionString = builder.Configuration.GetConnectionString("AppConfig");

// Load configuration from Azure App Configuration
builder.Configuration.AddAzureAppConfiguration(options => {
  options.Connect(connectionString)
    .UseFeatureFlags();
});

Dans le fragment de code précédent :

  • La méthode builder.Configuration de l’application est appelée pour inscrire un fournisseur de configuration pour le magasin Azure App Configuration. Le fournisseur de configuration est inscrit par l’intermédiaire d’un appel à AddAzureAppConfiguration.
  • Le comportement du fournisseur Azure App Configuration est configuré avec les options suivantes :
    • Authentification auprès du service Azure correspondant par le biais d’une chaîne de connexion transmise à l’appel de méthode Connect. La chaîne de connexion est récupérée à partir de la variable connectionString. Les sources de configuration inscrites sont mises à disposition via builder.Configuration.
    • Activation de la prise en charge des indicateurs de fonctionnalités par l’intermédiaire d’un appel à UseFeatureFlags.
  • Le fournisseur Azure App Configuration annule et remplace tous les autres fournisseurs de configuration inscrits, car il l’a été après eux.

Conseil

Dans un projet ASP.NET Core, vous pouvez accéder à la liste des fournisseurs inscrits en analysant la propriété configBuilder.Sources à l’intérieur de ConfigureAppConfiguration.