共用方式為


快速入門:將功能旗標新增至 Azure Functions 應用程式

在本快速入門中,您會建立 Azure Functions 應用程式,並在其中使用功能旗標。 您會使用 Azure 應用程式組態的管理功能來集中儲存所有功能旗標及控制其狀態。

先決條件

新增功能旗標

將名為 Beta 的功能旗標新增至應用程式組態存放區,並保留標籤描述的預設值。 如需如何使用 Azure 入口網站或 CLI 將功能旗標新增至存放區的詳細資訊,請移至建立功能旗標

啟用名稱為 Beta 的功能旗標

建立函式應用程式

選取 Azure Functions (C#) 範本,以使用 Visual Studio 建立 Azure Functions 應用程式。 此範本會引導您設定專案的基本設定。 如需詳細指示,請參閱 使用Visual Studio開發 Azure Functions

建立函式應用程式時,請使用下表作為重要參數的參考。

設定
Functions 背景工作角色 .NET 8.0 隔離式
功能 HTTP 觸發器
授權層級 匿名

附註

Azure 應用程式組態可以與 隔離工作者模型同進程模型中的 Azure Functions 搭配使用。 本快速入門使用獨立工作者模型作為範例。 您可以在 Azure 應用程式組態 GitHub 存放庫中找到這兩個模型的完整程式碼範例。

連線至應用程式組態存放區

您可以使用 Microsoft Entra ID (建議) 或連接字串連線到您的應用程式組態存放區。

  1. 以滑鼠右鍵按一下專案,然後選取 [管理 NuGet 套件]。 在 [ 流覽] 索引標籤上,搜尋並新增下列 NuGet 套件的最新穩定版本至您的專案。

    • Microsoft.Azure.AppConfiguration.Functions.Worker
    • Microsoft.FeatureManagement
    • Azure.Identity
  2. 開啟 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 秒載入並重新整理一次。 功能旗標的選取和重新整理行為會與其他組態索引鍵/值分開設定。 您可以將動作傳遞 FeatureFlagOptionsUseFeatureFlags 方法,以自定義這些行為。 使用 FeatureFlagOptions.Select 來指定要載入的功能旗標的鍵值和標籤,並使用 FeatureFlagOptions.SetRefreshInterval 來覆寫預設的刷新間隔。

    秘訣

    如果不想將功能旗標以外的任何組態載入您的應用程式中,您可呼叫 options.Select("_"),只載入不存在的虛擬機碼 "_"。 根據預設,如果未呼叫任何 Select 方法,則會載入應用程式組態存放區中不含標籤的所有組態索引鍵/值。

  3. 更新 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();
    
  4. 開啟 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;
    }
    
  5. 更新 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");
    }
    

在本機測試函式

  1. 設定環境變數。

    將名為 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>'
    
  2. 按 F5 測試您的函式。 如果出現提示,請接受 Visual Studio 所發出要下載及安裝 Azure Functions Core (CLI) 工具的要求。 您可能也需要啟用防火牆例外狀況,工具才能處理 HTTP 要求。

  3. 從 Azure Functions 執行階段輸出複製函式的 URL。

    VS 中的函式偵錯快速入門

  4. 將 HTTP 要求的 URL 貼到瀏覽器的網址列。 下圖顯示的回應指出已停用 Beta 功能旗標。

    已停用快速入門函式功能旗標

  5. 在 Azure 入口網站中,瀏覽至您的應用程式組態存放區。 在 [作業] 底下,選取 [ 功能管理員],找出 Beta 功能旗標,並將 [已啟用] 切換設定為 [開啟]。

  6. 重新整理瀏覽器數次。 當重新整理間隔時間範圍通過時,頁面會變更以指出功能旗標 Beta 已開啟,如下圖所示。

    已啟用快速入門函式功能旗標

清除資源

如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。

重要事項

刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。

  1. 登入 Azure 入口網站,然後選取 [資源群組]
  2. 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
  3. 在結果清單中,選取資源群組名稱以查看概觀。
  4. 選取 [刪除資源群組]
  5. 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]

不久後,系統便會刪除該資源群組及其所有的資源。

後續步驟

在本快速入門中,您已建立功能旗標,並將其與 Azure Functions 應用程式搭配使用。

如需 .NET 功能管理程式庫的完整功能摘要,請繼續參閱下列文件。

若要深入了解如何在 Azure 應用程式設定中管理功能旗標,請繼續下列教學課程。