このクイックスタートでは、Azure App Configuration の機能管理機能を .NET バックグラウンド サービスに組み込みます。 App Configuration を使用し、機能フラグを一元的に格納および管理します。
前提条件
機能管理のサポートにより、App Configuration の動的構成機能が拡張されます。 このクイックスタートの例は、動的構成チュートリアルで紹介された .NET バックグラウンド サービス アプリ上で構築されています。 続行する前に、動的構成を使用して .NET バックグラウンド サービス アプリを作成する次のチュートリアルをまず完了してください。
機能フラグを追加する
Beta という機能フラグを App Configuration ストアに追加し、[ラベル] と [説明] を既定値のままにします。 Azure portal または CLI を使用してストアに機能フラグを追加する方法の詳細については、「機能フラグを作成する」を参照してください。
機能フラグを使用する
次のコマンドを実行して、
Microsoft.FeatureManagement
NuGet パッケージへの参照を追加します。dotnet add package Microsoft.FeatureManagement
次のコマンドを実行して、プロジェクトのパッケージを復元します。
dotnet restore
Program.cs を開き、次のステートメントを追加します。
using Microsoft.FeatureManagement;
AddAzureAppConfiguration
呼び出し内にUseFeatureFlags
メソッドの呼び出しを追加し、機能管理サービスを登録します。// Existing code in Program.cs // ... ... builder.Configuration.AddAzureAppConfiguration(options => { string endpoint = Environment.GetEnvironmentVariable("Endpoint"); options.Connect(new Uri(endpoint), new DefaultAzureCredential()); // Use feature flags options.UseFeatureFlags(); // Register the refresher so that the Worker service can consume it through dependency injection builder.Services.AddSingleton(options.GetRefresher()); }); // Register feature management services builder.Services.AddFeatureManagement(); // The rest of existing code in Program.cs // ... ...
ヒント
UseFeatureFlags
メソッドにパラメーターが渡されないときは、App Configuration ストアに "ラベルのない""すべての" 機能フラグが読み込まれます。 機能フラグの既定の更新間隔は 30 秒です。 この動作は、FeatureFlagOptions
パラメーターを使用してカスタマイズできます。 たとえば、次のコード スニペットは、"キー名" が "TestApp" で始まり、ラベル "dev" がある機能フラグのみを読み込みます。 このコードは、更新間隔を 5 分に変更もします。 この更新間隔は、通常のキー値の場合とは別であることに注意してください。options.UseFeatureFlags(featureFlagOptions => { featureFlagOptions.Select("TestApp:*", "dev"); featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5); });
Worker.cs を開き、次のステートメントを追加します。
using Microsoft.FeatureManagement;
依存関係の挿入によって、
IConfigurationRefresher
およびIVariantFeatureManager
のインスタンスを取得するためのWorker
サービスのコンストラクターを更新します。public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private readonly IConfigurationRefresher _refresher; private readonly IVariantFeatureManager _featureManager; public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IVariantFeatureManager featureManager) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher)); _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager)); } // ... ... }
機能フラグの状態に応じてメッセージをログに記録するよう、
ExecuteAsync
メソッドを更新します。TryRefreshAsync
メソッドは、タスク実行が繰り返されるたびにその開始時に呼び出され、機能フラグを更新します。 更新間隔の時間枠に達していなければ、何も実行されません。await
演算子は使用されないため、タスク実行の現在の反復をブロックせず、機能フラグが更新されます。 その場合、タスク実行の後の反復で更新後の値が取得されます。protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // Intentionally not await TryRefreshAsync to avoid blocking the execution. _refresher.TryRefreshAsync(stoppingToken); if (_logger.IsEnabled(LogLevel.Information)) { if (await _featureManager.IsEnabledAsync("Beta")) { _logger.LogInformation("[{time}]: Worker is running with Beta feature.", DateTimeOffset.Now); } else { _logger.LogInformation("[{time}]: Worker is running.", DateTimeOffset.Now); } } await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } }
アプリをビルドしてローカルで実行する
次のコマンドを実行して、アプリをビルドします。
dotnet build
ビルドが正常に完了したら、次のコマンドを実行して、アプリをローカルで実行します。
dotnet run
コンソールに以下の出力が表示されます。
Azure portal にサインインします。 [すべてのリソース] を選択し、自分が前に作成した App Configuration ストアを選択します。
[機能マネージャー] を選択し、[Beta] 機能フラグを見つけます。 [有効] のチェック ボックスをオンにして、フラグを有効にします。
更新間隔の時間枠が経過するまでしばらく待ちます。 更新後のログ メッセージが表示されます。
リソースをクリーンアップする
この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。
重要
リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。
- Azure portal にサインインし、 [リソース グループ] を選択します。
- [名前でフィルター] ボックスにリソース グループの名前を入力します。
- 結果一覧でリソース グループ名を選択し、概要を表示します。
- [リソース グループの削除] を選択します。
- リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。
しばらくすると、リソース グループとそのすべてのリソースが削除されます。
次のステップ
このクイック スタートでは、機能フラグを作成し、バックグラウンド サービスで使用しました。
他の種類のアプリに対して機能管理機能を有効にするには、次のチュートリアルに進みます。
Azure App Configuration での機能フラグの管理の詳細については、次のチュートリアルに進んでください。
.NET 機能管理ライブラリの完全な機能の概要については、次のドキュメントに進んでください。