次の方法で共有


クイックスタート: .NET バックグラウンド サービスに機能フラグを追加する

このクイックスタートでは、Azure App Configuration の機能管理機能を .NET バックグラウンド サービスに組み込みます。 App Configuration を使用し、機能フラグを一元的に格納および管理します。

前提条件

機能管理のサポートにより、App Configuration の動的構成機能が拡張されます。 このクイックスタートの例は、動的構成チュートリアルで紹介された .NET バックグラウンド サービス アプリ上で構築されています。 続行する前に、動的構成を使用して .NET バックグラウンド サービス アプリを作成する次のチュートリアルをまず完了してください。

機能フラグを追加する

Beta という機能フラグを App Configuration ストアに追加し、[ラベル][説明] を既定値のままにします。 Azure portal または CLI を使用してストアに機能フラグを追加する方法の詳細については、「機能フラグを作成する」を参照してください。

Beta という名前の機能フラグを有効にするフィールドのスクリーンショット。

機能フラグを使用する

  1. 次のコマンドを実行して、Microsoft.FeatureManagement NuGet パッケージへの参照を追加します。

    dotnet add package Microsoft.FeatureManagement
    
  2. 次のコマンドを実行して、プロジェクトのパッケージを復元します。

    dotnet restore
    
  3. Program.cs を開き、次のステートメントを追加します。

    using Microsoft.FeatureManagement;
    
  4. AddAzureAppConfiguration 呼び出し内に UseFeatureFlags メソッドの呼び出しを追加し、機能管理サービスを登録します。

    // Existing code in Program.cs
    // ... ...
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        options.Connect(Environment.GetEnvironmentVariable("ConnectionString"));
    
        // 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);
    });
    
  5. Worker.cs を開き、次のステートメントを追加します。

    using Microsoft.FeatureManagement;
    
  6. 依存関係の挿入によって、IConfigurationRefresher および IFeatureManager のインスタンスを取得するための Worker サービスのコンストラクターを更新します。

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfigurationRefresher _refresher;
        private readonly IFeatureManager _featureManager;
    
        public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IFeatureManager featureManager)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
            _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager));
        }
    
        // ... ...
    }
    
  7. 機能フラグの状態に応じてメッセージをログに記録するよう、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);
        }
    }
    

アプリをビルドしてローカルで実行する

  1. 次のコマンドを実行して、アプリをビルドします。

    dotnet build
    
  2. ビルドが正常に完了したら、次のコマンドを実行して、アプリをローカルで実行します。

    dotnet run
    
  3. コンソールに以下の出力が表示されます。

    バックグラウンド サービスが実行されているコンソールのスクリーンショット。機能フラグが無効になっています。

  4. Azure portal にサインインします。 [すべてのリソース] を選択し、自分が前に作成した App Configuration ストアを選択します。

  5. [機能マネージャー] を選択し、[Beta] 機能フラグを見つけます。 [有効] のチェック ボックスをオンにして、フラグを有効にします。

  6. 更新間隔の時間枠が経過するまでしばらく待ちます。 更新後のログ メッセージが表示されます。

    バックグラウンド サービスが実行されているコンソールのスクリーンショット。機能フラグが有効になっています。

リソースをクリーンアップする

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次のステップ

このクイック スタートでは、機能フラグを作成し、バックグラウンド サービスで使用しました。

他の種類のアプリに対して機能管理機能を有効にするには、次のチュートリアルに進みます。

Azure App Configuration での機能フラグの管理の詳細については、次のチュートリアルに進んでください。

.NET 機能管理ライブラリの完全な機能の概要については、次のドキュメントに進んでください。