このクイック スタートでは、Azure Functions アプリを作成し、その中で機能フラグを使用します。 Azure App Configuration の機能管理を使用して、すべての機能フラグを 1 か所に保存し、それらの状態を制御します。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料で作成できます。
- "App Configuration ストアは、ストアを作成するためのチュートリアルに示されているように設置されています。"
- Visual Studio と Azure 開発ワークロード。
機能フラグを追加する
Beta という機能フラグを App Configuration ストアに追加し、[ラベル] と [説明] を既定値のままにします。 Azure portal または CLI を使用してストアに機能フラグを追加する方法の詳細については、「機能フラグを作成する」を参照してください。
関数アプリを作成する
Azure Functions (C#) テンプレートを選択して、Visual Studio を使用して Azure Functions アプリを作成します。 このテンプレートでは、プロジェクトの重要な設定を構成する手順について説明します。 詳細な手順については、 Visual Studio を使用した Azure Functions の開発に関するページを参照してください。
関数アプリを作成するときに、キー パラメーターの参照として次の表を使用します。
設定 | 値 |
---|---|
関数作業者 | .NET 8.0 分離 |
機能 | HTTP トリガー |
承認レベル | アノニマス |
注
Azure App Configuration は、 分離されたワーカー モデル または インプロセス モデルのいずれかで Azure Functions と共に使用できます。 このクイック スタートでは、分離されたワーカー モデルを例として使用します。 両方のモデルの完全なコード例は、 Azure App Configuration GitHub リポジトリにあります。
App Configuration ストアに接続する
Microsoft Entra ID (推奨) または接続文字列を使用して App Configuration ストアに接続できます。
プロジェクトを右クリックし、[NuGet パッケージの管理] を選択します。 [ 参照 ] タブで、次の NuGet パッケージの最新の安定バージョンを検索してプロジェクトに追加します。
- Microsoft.Azure.AppConfiguration.Functions.Worker
- Microsoft.FeatureManagement
- Azure.Identity
Program.csを開き、次のようにコードを更新します。
AddAzureAppConfiguration
メソッドを呼び出して、追加の構成ソースとして Azure App Configuration を追加します。DefaultAzureCredential
を使って、App Configuration ストアに対する認証を行います。 手順に従い、あなたの資格情報にApp Configuration データリーダー役割を割り当ててください。 アプリケーションを実行する前に、アクセス許可が伝わるのに十分な時間をおいてください。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
メソッドが呼び出されない場合、App Configuration ストアにラベルのないすべての構成キー値が読み込まれます。Program.cs ファイルを更新して、Azure App Configuration ミドルウェアを追加することで、各関数の実行で機能フラグの自動更新を有効にします。 また、機能管理サービスを登録して、後で関数コードに挿入して使用することもできます。
// 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 portal のストアの概要にある App Configuration ストアのエンドポイントに設定します。
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 portal で、App Configuration ストアに移動します。 [操作] で [機能マネージャー] を選択し、ベータ機能フラグを見つけて、[有効] トグルを [オン] に設定します。
ブラウザーを数回更新します。 更新間隔の時間枠が経過すると、ページが変更され、図に示すように、 機能フラグ Beta がオンになっていることを示します。
リソースをクリーンアップする
この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。
重要
リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。
- Azure portal にサインインし、[リソース グループ] を選択します。
- [名前でフィルター] ボックスにリソース グループの名前を入力します。
- 結果一覧でリソース グループ名を選択し、概要を表示します。
- [リソース グループの削除] を選択します。
- リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、[削除] を選択します。
しばらくすると、リソース グループとそのすべてのリソースが削除されます。
次のステップ
このクイック スタートでは、機能フラグを作成し、Azure Functions アプリで使用しました。
.NET 機能管理ライブラリの詳細な機能の説明については、次のドキュメントに進んでください。
Azure App Configuration での機能フラグの管理の詳細については、次のチュートリアルに進んでください。