快速入門:將功能旗標新增至 Azure Functions 應用程式
在本快速入門中,您會建立 Azure Functions C# 程式碼專案並在其中使用功能旗標。 您會使用 Azure 應用程式組態的管理功能來集中儲存所有功能旗標及控制其狀態。
.NET 功能功能管理程式庫可透過功能旗標支援來擴充架構。 這些程式庫會建置在 .NET 組態系統之上。 透過其 .NET 組態提供者與應用程式組態密切整合。
注意
本文目前僅支援在 .NET 6 上執行的 C# 內含式函數應用程式。
必要條件
- 具有有效訂用帳戶的 Azure 帳戶。 免費建立一個。
- 應用程式組態存放區。 建立存放區。
- 包含 Azure 開發工作負載的 Visual Studio 2019。
新增功能旗標
將名為 Beta 的功能旗標新增至應用程式組態存放區,並保留標籤和描述的預設值。 如需如何使用 Azure 入口網站或 CLI 將功能旗標新增至存放區的詳細資訊,請移至建立功能旗標。
建立 Functions 專案
Visual Studio 中的 Azure Functions 專案範本會建立可發行至 Azure 中函數應用程式的 C# 類別庫專案。 您可以使用函式應用程式將多個函式群組為邏輯單位,以方便管理、部署、調整和共用資源。
在 Visual Studio 功能表中,選取 [檔案] > [新增] > [專案]。
在 [建立新專案] 的搜尋方塊中輸入函式,選擇 [Azure Functions] 範本,然後選取 [下一步]。
在 [設定您的新專案] 中,輸入專案的專案名稱,然後選取 [建立]。 函式應用程式名稱必須是有效的 C# 命名空間,因此不會使用底線、連字號或任何其他非英數字元。
針對 [建立新的 Azure Functions 應用程式] 設定,請使用下表中的值:
設定 值 Description .NET 版本 .NET 6 此值會建立一個函數專案,執行 Azure Functions 執行階段版本 4.x 的內含式。 如需詳細資訊,請參閱 Azure Functions 執行階段版本概觀。 函式範本 HTTP 觸發程序 此值會建立 HTTP 要求所觸發的函式。 儲存體帳戶 (AzureWebJobsStorage) 儲存體模擬器 因為 Azure 中的函數應用程式需要儲存體帳戶,所以當您將專案發佈至 Azure 時,就會指派或建立一個儲存體帳戶。 HTTP 觸發程式不會使用 Azure 儲存體帳戶連接字串;所有其他觸發程式類型都需要有效的 Azure 儲存體帳戶連接字串。 授權等級 匿名 建立的函式可以由任何用戶端觸發,而不需提供金鑰。 此授權設定可以讓測試新函式變得簡單。 如需金鑰和授權的詳細資訊,請參閱 授權金鑰和 HTTP 和 Webhook 繫結。
請確定您已將 [授權層級] 設定為 [匿名]。 如果您選擇函式的預設層級,必須在要求中提供函式金鑰以存取您的函式端點。
選取 [建立] 以建立函式專案和 HTTP 觸發程序函數。
連線至應用程式組態存放區
此專案將在 .NET Azure Functions 中使用相依性插入。 其會將 Azure 應用程式組態新增為您的功能旗標儲存所在的額外組態來源。
以滑鼠右鍵按一下專案,然後選取 [管理 NuGet 套件]。 在 [瀏覽] 索引標籤上,搜尋下列 NuGet 套件並新增至您的專案。
- Microsoft.Extensions.Configuration.AzureAppConfiguration 4.1.0 版或更新版本
- Microsoft.FeatureManagement 2.2.0 版或更新版本
- Microsoft.Azure.Functions.Extensions 1.1.0 版或更新版本
使用下列程式碼,新增 Startup.cs 檔案。 其會定義名為
Startup
的類別,以實作FunctionsStartup
抽象類別。 元件屬性用來指定 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) { } } }
藉由呼叫
AddAzureAppConfiguration()
,更新ConfigureAppConfiguration
方法,並將 Azure 應用程式組態提供者新增為額外的組態來源。UseFeatureFlags()
方法會指示提供者載入功能旗標。 在重新檢查變更之前,所有功能旗標的預設快取到期時間均為 30 秒。 設定傳遞給UseFeatureFlags
方法的FeatureFlagsOptions.CacheExpirationInterval
屬性,即可更新到期間隔。public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) { builder.ConfigurationBuilder.AddAzureAppConfiguration(options => { options.Connect(Environment.GetEnvironmentVariable("ConnectionString")) .Select("_") .UseFeatureFlags(); }); }
提示
如果不想將功能旗標以外的任何組態載入您的應用程式中,您可呼叫
Select("_")
,只載入不存在的虛擬機碼"_"
。 根據預設,如果沒有呼叫Select
方法,就會載入您應用程式組態存放區中的所有組態機碼值。更新
Configure
方法,使 Azure 應用程式組態服務和功能管理員可透過相依性插入來提供。public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddAzureAppConfiguration(); builder.Services.AddFeatureManagement(); }
開啟 Function1.cs,並新增下列命名空間。
using System.Linq; using Microsoft.FeatureManagement; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
新增用於透過相依性插入取得
_featureManagerSnapshot
和IConfigurationRefresherProvider
執行個體的建構函式。 從IConfigurationRefresherProvider
,您可取得IConfigurationRefresher
的執行個體。private readonly IFeatureManagerSnapshot _featureManagerSnapshot; private readonly IConfigurationRefresher _configurationRefresher; public Function1(IFeatureManagerSnapshot featureManagerSnapshot, IConfigurationRefresherProvider refresherProvider) { _featureManagerSnapshot = featureManagerSnapshot; _configurationRefresher = refresherProvider.Refreshers.First(); }
更新
Run
方法,以根據功能旗標的狀態變更顯示的訊息值。TryRefreshAsync
方法會在 Functions 呼叫的開頭進行呼叫,以重新整理功能旗標。 如果未達到快取到期時間範圍,這就不會有任何作用。 如果您想要在不封鎖目前函式呼叫的情況下重新整理功能旗標,請移除await
運算子。 在此情況下,較新的函式呼叫將會取得更新的值。[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); }
在本機測試函式
設定名為 ConnectionString 的環境變數,其值為您先前在應用程式組態存放區中的 [存取金鑰] 下擷取的連接字串。 如果您使用 Windows 命令提示字元,請執行下列命令,然後重新啟動命令提示字元以讓變更生效:
setx ConnectionString "<connection-string-of-your-app-configuration-store>"
如果您使用 Windows PowerShell,請執行下列命令:
$Env:ConnectionString = "<connection-string-of-your-app-configuration-store>"
如果您使用 macOS 或 Linux,請執行下列命令:
export ConnectionString='<connection-string-of-your-app-configuration-store>'
按 F5 測試您的函式。 如果出現提示,請接受 Visual Studio 所發出要下載及安裝 Azure Functions Core (CLI) 工具的要求。 您可能也需要啟用防火牆例外狀況,工具才能處理 HTTP 要求。
從 Azure Functions 執行階段輸出複製函式的 URL。
將 HTTP 要求的 URL 貼到您的瀏覽器位址列。 下圖顯示的回應指出已停用 Beta 功能旗標。
登入 Azure 入口網站。 選取 [所有資源],然後選取您先前建立的應用程式組態存放區。
選取 [功能管理員],然後將 Beta 金鑰的狀態變更為 [開啟]。
重新整理瀏覽器數次。 重新整理的間隔時間範圍過後,頁面將會變更並指出已開啟 Beta 功能旗標,如下圖所示。
注意
本教學課程中使用的範例程式碼,可從 Azure 應用程式組態 GitHub 存放庫下載取得。
清除資源
如果您不想繼續使用本文中建立的資源,請刪除在此處建立的資源群組,以避免產生費用。
重要
刪除資源群組是無法回復的動作。 資源群組和其中的所有資源都將被永久刪除。 請確定您不會誤刪錯誤的資源群組或資源。 如果您是在包含需保留其他資源的資源群組內部,建立本文的資源,則可以從每個資源各自的窗格中個別刪除每個資源,而不必刪除整個資源群組。
- 登入 Azure 入口網站,然後選取 [資源群組]。
- 在 [依名稱篩選] 方塊中,輸入您資源群組的名稱。
- 在結果清單中,選取資源群組名稱以查看概觀。
- 選取 [刪除資源群組]。
- 系統將會要求您確認是否刪除資源群組。 輸入您資源群組的名稱以進行確認,然後選取 [刪除]。
不久後,系統便會刪除該資源群組及其所有的資源。
下一步
在本快速入門中,您已建立功能旗標,並將功能與 Azure Functions 搭配使用。
若要啟用其他類型應用程式的功能管理功能,請繼續下列教學課程。
若要深入了解如何在 Azure 應用程式設定中管理功能旗標,請繼續下列教學課程。
如需 .NET 功能管理程式庫的完整功能摘要,請繼續參閱下列文件。