Démarrage rapide : Ajouter des indicateurs de fonctionnalités à une application Azure Functions
Dans ce guide de démarrage rapide, vous allez créer un projet de code C# Azure Functions et utiliser des indicateurs de fonctionnalité dans celui-ci. Vous utiliserez la gestion des fonctionnalités d’Azure App Configuration pour stocker de manière centralisée tous les indicateurs de fonctionnalités et contrôler leurs états.
Les bibliothèques de gestion des fonctionnalités .NET étendent le framework avec une prise en charge des indicateurs de fonctionnalités. Ces bibliothèques sont basées sur le système de configuration de .NET. Elles s’intègrent à App Configuration par le biais de son fournisseur de configuration .NET.
Remarque
Cet article prend uniquement en charge applications de fonction in-process C# qui s’exécutent sur .NET 6.
Prérequis
- Compte Azure avec un abonnement actif. Créez-en un gratuitement.
- Un magasin App Configuration. Créez un magasin.
- Visual Studio 2019 avec la charge de travail Développement Azure
Ajouter un indicateur de fonctionnalité
Ajoutez un indicateur de fonctionnalité appelé Bêta au magasin App Configuration et laissez les valeurs par défaut à Étiquette et à Description. Pour plus d’informations sur l’ajout d’indicateurs de fonctionnalité à un magasin à l’aide du portail Azure ou de CLI, accédez à Créer un indicateur de fonctionnalité.
Créer un projet Functions
Le modèle de projet Azure Functions dans Visual Studio crée un projet de bibliothèque de classe C# que vous pouvez publier dans une application de fonction dans Azure. Vous pouvez utiliser une application de fonction pour regrouper des fonctions en une unité logique afin de faciliter la gestion, le déploiement, la mise à l’échelle et le partage des ressources.
Dans le menu de Visual Studio, sélectionnez Fichier>Nouveau>Projet.
Dans Créer un projet, entrez functions dans la zone de recherche, choisissez le modèle Azure Functions, puis sélectionnez Suivant.
Dans Configurer votre nouveau projet, entrez un Nom de projet, puis sélectionnez Créer. Le nom d’application de la fonction doit être valide en tant qu’espace de noms C#, afin de ne pas utiliser des traits d’union, des traits de soulignement ou d’autres caractères non alphanumériques.
Pour les paramètres Créer une application Azure Functions, utilisez les valeurs du tableau suivant :
Paramètre valeur Description Version de .NET .NET 6 Cette valeur crée un projet de fonction qui s’exécute dans un processus interne avec la version 4.x du runtime d’Azure Functions. Pour plus d’informations, consultez Vue d’ensemble des versions du runtime Azure Functions. Modèle de fonction Déclencheur HTTP Cette valeur crée une fonction déclenchée par une requête HTTP. Compte de stockage (AzureWebJobsStorage) Émulateur de stockage Étant donné qu’une application de fonction dans Azure nécessite un compte de stockage, celui-ci est attribué ou créé quand vous publiez votre projet sur Azure. Un déclencheur HTTP n’utilise pas de chaîne de connexion de compte Stockage Azure ; tous les autres types de déclencheurs nécessitent une chaîne de connexion de compte Stockage Azure valide. Niveau d’autorisation Anonyme La fonction créée peut être déclenchée par n’importe quel client sans fournir une clé. Ce paramètre d’autorisation facilite le test de votre nouvelle fonction. Pour plus d’informations sur les clés et autorisations, consultez Clés d’autorisation et Liaisons HTTP et webhook.
Veillez à définir le Niveau d’autorisation sur Anonyme. Si vous choisissez le niveau par défaut Fonction, vous êtes invité à présenter la clé de fonction dans les requêtes d’accès à votre point de terminaison de fonction.
Sélectionnez Créer pour créer le projet de fonction et la fonction de déclencheur HTTP.
Se connecter à un magasin App Configuration
Ce projet utilise l’injection de dépendances dans .NET Azure Functions. Il ajoute Azure App Configuration comme source de configuration supplémentaire où sont stockés vos indicateurs de fonctionnalités.
Cliquez avec le bouton droit sur votre projet, puis sélectionnez Gérer les packages NuGet. Sous l’onglet Parcourir, recherchez les packages NuGet suivants et ajoutez-les à votre projet.
- Microsoft.Extensions.Configuration.AzureAppConfiguration version 4.1.0 ou ultérieure
- Microsoft.FeatureManagement version 2.2.0 ou ultérieure
- Microsoft.Azure.Functions.Extensions version 1.1.0 ou ultérieure
Ajoutez un nouveau fichier, Startup.cs, avec le code suivant. Il définit une classe nommée
Startup
qui implémente la classe abstraiteFunctionsStartup
. Un attribut d’assembly est utilisé pour spécifier le nom du type utilisé durant le démarrage d’Azure Functions.using System; using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; using Microsoft.FeatureManagement; [assembly: FunctionsStartup(typeof(FunctionApp.Startup))] namespace FunctionApp { class Startup : FunctionsStartup { public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) { } public override void Configure(IFunctionsHostBuilder builder) { } } }
Mettez à jour la méthode
ConfigureAppConfiguration
et ajoutez le fournisseur Azure App Configuration comme source de configuration supplémentaire en appelantAddAzureAppConfiguration()
.La méthode
UseFeatureFlags()
indique au fournisseur de charger les indicateurs de fonctionnalités. Tous les indicateurs de fonctionnalités étant par défaut mis en cache pendant 30 secondes, les éventuelles modifications ne sont détectées qu’au terme de ce délai. Vous pouvez changer cet intervalle d’expiration en définissant la propriétéFeatureFlagsOptions.CacheExpirationInterval
passée à la méthodeUseFeatureFlags
.public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) { builder.ConfigurationBuilder.AddAzureAppConfiguration(options => { options.Connect(Environment.GetEnvironmentVariable("ConnectionString")) .Select("_") .UseFeatureFlags(); }); }
Conseil
Si vous souhaitez limiter les configurations chargées dans votre application aux indicateurs de fonctionnalités, vous pouvez appeler
Select("_")
pour charger uniquement une clé factice"_"
non existante. Par défaut, toutes les valeurs de clé de configuration dans votre magasin App Configuration sont chargées si aucune méthodeSelect
n’est appelée.Mettez à jour la méthode
Configure
pour rendre le gestionnaire de fonctionnalités et les services Azure App Configuration accessibles par le biais de l’injection de dépendances.public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddAzureAppConfiguration(); builder.Services.AddFeatureManagement(); }
Ouvrez Function1.cs et ajoutez les espaces de noms suivants.
using System.Linq; using Microsoft.FeatureManagement; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Ajoutez un constructeur utilisé pour obtenir des instances de
_featureManagerSnapshot
etIConfigurationRefresherProvider
par le biais de l’injection de dépendances. Vous pouvez obtenir l’instance deIConfigurationRefresher
à partir deIConfigurationRefresherProvider
.private readonly IFeatureManagerSnapshot _featureManagerSnapshot; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider) { _featureManagerSnapshot = featureManagerSnapshot; _configurationRefresher = refresherProvider.Refreshers.First(); }
Mettez à jour la méthode
Run
pour changer la valeur du message affiché en fonction de l’état de l’indicateur de fonctionnalité.La méthode
TryRefreshAsync
est appelée au début de l’appel Functions pour actualiser les indicateurs de fonctionnalités. Aucune opération n’est effectuée si la fenêtre de délai d’expiration du cache n’est pas atteinte. Supprimez l’opérateurawait
si vous préférez que les indicateurs de fonctionnalité soient actualisés sans bloquer l’appel Functions en cours. Dans ce cas, les appels Functions ultérieurs obtiendront une valeur mise à jour.[FunctionName("Function1")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); await _configurationRefresher.TryRefreshAsync(); string message = await _featureManagerSnapshot.IsEnabledAsync("Beta") ? "The Feature Flag 'Beta' is turned ON" : "The Feature Flag 'Beta' is turned OFF"; return (ActionResult)new OkObjectResult(message); }
Tester la fonction en local
Définissez une variable d’environnement nommée ConnectionString, où la valeur est la chaîne de connexion que vous avez récupérée précédemment dans votre magasin App Configuration sous Clés d’accès. Si vous utilisez l’invite de commandes Windows, exécutez la commande suivante et redémarrez l’invite pour que la modification soit prise en compte :
setx ConnectionString "<connection-string-of-your-app-configuration-store>"
Si vous utilisez Windows PowerShell, exécutez la commande suivante :
$Env:ConnectionString = "<connection-string-of-your-app-configuration-store>"
Si vous utilisez macOS ou Linux, exécutez la commande suivante :
export ConnectionString='<connection-string-of-your-app-configuration-store>'
Appuyez sur F5 pour tester votre fonction. Si vous y êtes invité, acceptez la requête dans Visual Studio pour télécharger et installer Azure Functions Core (CLI) Tools. Vous devrez peut-être aussi activer une exception de pare-feu afin de permettre aux outils de prendre en charge les requêtes HTTP.
Copiez l’URL de votre fonction à partir de la sortie runtime Azure Functions.
Collez l’URL de la demande HTTP dans la barre d’adresses de votre navigateur. L’illustration suivante montre la réponse signalant que l’indicateur de fonctionnalité bêta est désactivé.
Connectez-vous au portail Azure. Sélectionnez Toutes les ressources, puis le magasin App Configuration que vous avez créé.
Sélectionnez Gestionnaire de fonctionnalités, puis remplacez l'état de la clé Beta par Activé.
Actualisez le navigateur à plusieurs reprises. Lorsque la fenêtre d’intervalle d’actualisation est passée, la page change pour indiquer que l’indicateur de fonctionnalité bêta est activé, comme illustré dans l’image ci-dessous.
Notes
Vous pouvez télécharger l’exemple de code utilisé dans ce tutoriel à partir du dépôt GitHub Azure App Configuration
Nettoyer les ressources
Si vous ne souhaitez plus utiliser les ressources créées dans cet article, supprimez le groupe de ressources que vous avez créé ici afin d’éviter des frais.
Important
La suppression d’un groupe de ressources est irréversible. Le groupe de ressources et toutes les ressources qu’il contient sont supprimés définitivement. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé les ressources pour cet article dans un groupe de ressources contenant d’autres ressources que vous souhaitez conserver, supprimez chaque ressource individuellement à partir de son volet, au lieu de supprimer l’intégralité du groupe de ressources.
- Connectez-vous au portail Azure, puis sélectionnez Groupes de ressources.
- Dans la zone Filtrer par nom, entrez le nom de votre groupe de ressources.
- Dans la liste de résultats, sélectionnez le nom du groupe de ressources pour afficher une vue d’ensemble.
- Sélectionnez Supprimer le groupe de ressources.
- Vous êtes invité à confirmer la suppression du groupe de ressources. Entrez le nom de votre groupe de ressources à confirmer, puis sélectionnez Supprimer.
Après quelques instants, le groupe de ressources et toutes ses ressources sont supprimés.
Étapes suivantes
Dans ce guide de démarrage rapide, vous avez créé un indicateur de fonctionnalité et vous l’avez utilisé dans une application Azure Functions.
Pour activer la fonctionnalité de gestion des fonctionnalités pour d’autres types d’applications, passez aux tutoriels suivants.
Pour en savoir plus sur la gestion des indicateurs de fonctionnalités dans Azure App Configuration, passez au tutoriel suivant.
Pour obtenir la liste complète des fonctionnalités de la bibliothèque de gestion des fonctionnalités .NET, passez au document suivant.