你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将创建一个 Azure Functions 应用并使用其中的功能标志。 可使用 Azure 应用程序配置中的功能管理集中存储所有功能标志并控制其状态。
Prerequisites
- 具有活动订阅的 Azure 帐户。 免费创建一个。
- 应用配置存储区,如 创建存储区的教程所示。
- 包含“Azure 开发”工作负载的 Visual Studio。
添加功能标志
将名为“Beta”的功能标志添加到应用程序配置存储区,并将“标签”和“描述”保留为其默认值。 有关如何使用 Azure 门户或 CLI 将功能标志添加到存储区的详细信息,请转到创建功能标志。
创建函数应用
通过选择 Azure Functions (C#) 模板,使用 Visual Studio 创建 Azure Functions 应用。 此模板指导你配置项目的基本设置。 有关详细说明,请参阅 使用 Visual Studio 开发 Azure Functions。
创建 Function App 时,请使用下表作为关键参数的参考。
设置 | 值 |
---|---|
函数辅助角色 | .NET 8.0(独立) |
功能 | HTTP 触发器 |
授权级别 | 匿名 |
注意
Azure Functions 可与 Azure 应用程序配置配合使用,无论是在 独立进程模型 还是 进程内模型 中。 本快速入门以独立辅助角色模型为例。 可以在 Azure 应用配置 GitHub 存储库中找到这两个模型的完整代码示例。
连接到应用程序配置存储区
你可以使用 Microsoft Entra ID(推荐)或连接字符串连接到应用程序配置存储区。
右键单击项目,然后选择“管理 NuGet 包”。 在“ 浏览 ”选项卡上,搜索以下 NuGet 包的最新稳定版本并将其添加到项目中。
- Microsoft.Azure.AppConfiguration.Functions.Worker
- Microsoft.FeatureManagement
- Azure.Identity
打开 Program.cs 并更新代码,如下所示。 通过调用
AddAzureAppConfiguration
该方法,将 Azure 应用配置添加为额外的配置源。使用
DefaultAzureCredential
向应用程序配置存储区进行身份验证。 按照说明为凭据分配“应用程序配置数据读取者”角色。 运行应用程序前,请务必留出足够的时间让权限生效。using Azure.Identity; using Microsoft.Azure.Functions.Worker.Builder; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.FeatureManagement; var builder = FunctionsApplication.CreateBuilder(args); // Connect to Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => { Uri endpoint = new(Environment.GetEnvironmentVariable("AZURE_APPCONFIG_ENDPOINT") ?? throw new InvalidOperationException("The environment variable 'AZURE_APPCONFIG_ENDPOINT' is not set or is empty.")); options.Connect(endpoint, new DefaultAzureCredential()) // Load all feature flags with no label. To load feature flags with specific keys and labels, set via FeatureFlagOptions.Select. // Use the default refresh interval of 30 seconds. It can be overridden via FeatureFlagOptions.SetRefreshInterval. .UseFeatureFlags(); });
该方法
UseFeatureFlags()
指示提供程序加载功能标志。 默认情况下,不带标签的所有功能标志都会每 30 秒加载和刷新一次。 功能标志的选择和刷新行为是独立于其他配置键值进行配置的。 可以通过将FeatureFlagOptions
操作传递给UseFeatureFlags
方法来自定义这些行为。 使用FeatureFlagOptions.Select
指定要加载的功能标志的键和标签,使用FeatureFlagOptions.SetRefreshInterval
替代默认刷新间隔。提示
如果不想将除功能标志以外的任何配置加载到应用程序中,可以调用
options.Select("_")
只加载不存在的伪键"_"
。 默认情况下,如果未调用任何Select
方法,则会加载应用配置存储中所有没有标签的配置键值。更新 Program.cs 文件,以通过添加 Azure 应用配置中间件在每个函数执行上启用自动功能标志刷新。 你还会注册功能管理服务,以便稍后在函数代码中注入和使用它。
// Connect to Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => { // Omitted the code added in the previous step. }); // Add Azure App Configuration middleware and feature management to the service collection. builder.Services .AddAzureAppConfiguration() .AddFeatureManagement(); // Use Azure App Configuration middleware for dynamic configuration and feature flag refresh. builder.UseAzureAppConfiguration(); builder.ConfigureFunctionsWebApplication(); builder.Build().Run();
打开 Function1.cs,并添加以下命名空间。
using Microsoft.FeatureManagement;
更新构造函数以获取通过依赖项注入的
IVariantFeatureManagerSnapshot
实例。private readonly IVariantFeatureManagerSnapshot _featureManager; private readonly ILogger<Function1> _logger; public Function1(IVariantFeatureManagerSnapshot featureManager, ILogger<Function1> logger) { _featureManager = featureManager; _logger = logger; }
更新
Run
方法,使其能够根据功能标志的状态返回响应消息。[Function("Function1")] public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req) { _logger.LogInformation("C# HTTP trigger function processed a request."); // Read feature flag string featureName = "Beta"; bool featureEnabled = await _featureManager.IsEnabledAsync(featureName, req.HttpContext.RequestAborted); return new OkObjectResult(featureEnabled ? $"The Feature Flag '{featureName}' is turned ON!" : $"The Feature Flag '{featureName}' is turned OFF"); }
在本地测试函数
设置 环境变量。
将名为 AZURE_APPCONFIG_ENDPOINT 的环境变量设置为 Azure 门户中应用商店的“概述”下找到的应用程序配置存储区的终结点。
如果使用 Windows 命令提示符,则请运行以下命令并重启命令提示符,这样更改才会生效:
setx AZURE_APPCONFIG_ENDPOINT "<endpoint-of-your-app-configuration-store>"
如果使用 PowerShell,请运行以下命令:
$Env:AZURE_APPCONFIG_ENDPOINT = "<endpoint-of-your-app-configuration-store>"
如果使用 macOS 或 Linux,则请运行以下命令:
export AZURE_APPCONFIG_ENDPOINT='<endpoint-of-your-app-configuration-store>'
按 F5 测试函数。 如果系统提示,请按 Visual Studio 的请求下载和安装 Azure Functions Core (CLI) 工具。 你还需要启用防火墙例外,这样工具才能处理 HTTP 请求。
从 Azure Functions 运行时输出复制函数的 URL。
将 HTTP 请求的 URL 粘贴到浏览器的地址栏中。 下图显示了指出功能标志 Beta 已被禁用的响应。
在 Azure 门户中,导航到应用程序配置存储。 在 “操作”下,选择 “功能管理器”,找到 Beta 功能标志,并将 “已启用” 开关设置为 “打开”。
多次刷新浏览器。 刷新间隔时间窗口过后,页面将更改以指示功能标志 Beta 处于打开状态,如下图所示。
清理资源
如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。
重要说明
删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。
- 登录到 Azure 门户,然后选择“资源组”。
- 在“按名称筛选”框中,输入资源组的名称。
- 在结果列表中,选择资源组名称以查看概述。
- 选择“删除资源组”。
- 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除”。
片刻之后,将会删除该资源组及其所有资源。
Next steps
在本快速入门中,你创建了一个功能标志,并将其用于 Azure Functions 应用。
有关 .NET 功能管理库的完整功能概要,请继续阅读以下文档。
若要详细了解如何在 Azure 应用程序配置中管理功能标志,请继续阅读以下教程。