次の方法で共有


クイック スタート:Azure Functions アプリに機能フラグを追加する

このクイック スタートでは、Azure Functions アプリを作成し、その中で機能フラグを使用します。 Azure App Configuration の機能管理を使用して、すべての機能フラグを 1 か所に保存し、それらの状態を制御します。

前提条件

機能フラグを追加する

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

Beta という名前の機能フラグを有効にする

関数アプリを作成する

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 ストアに接続できます。

  1. プロジェクトを右クリックし、[NuGet パッケージの管理] を選択します。 [ 参照 ] タブで、次の NuGet パッケージの最新の安定バージョンを検索してプロジェクトに追加します。

    • Microsoft.Azure.AppConfiguration.Functions.Worker
    • Microsoft.FeatureManagement
    • Azure.Identity
  2. 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 ストアにラベルのないすべての構成キー値が読み込まれます。

  3. 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();
    
  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 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>'
    
  2. F5 キーを押して関数をテストします。 メッセージが表示されたら、Visual Studio からの要求に同意し、Azure Functions Core (CLI) ツールをダウンロードしてインストールします。 また、ツールで HTTP 要求を処理できるように、ファイアウォールの例外を有効にすることが必要になる場合もあります。

  3. Azure Functions のランタイムの出力から、関数の URL をコピーします。

    クイック スタート: VS での関数のデバッグ

  4. HTTP 要求の URL をブラウザーのアドレス バーに貼り付けます。 次の画像のように、機能フラグ Beta が無効であることを示す応答が表示されます。

    クイックスタート: 関数の機能フラグが無効

  5. Azure portal で、App Configuration ストアに移動します。 [操作][機能マネージャー] を選択し、ベータ機能フラグを見つけて、[有効] トグルを [オン] に設定します。

  6. ブラウザーを数回更新します。 更新間隔の時間枠が経過すると、ページが変更され、図に示すように、 機能フラグ Beta がオンになっていることを示します。

    クイックスタート: 関数の機能フラグが有効

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

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

重要

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

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

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

次のステップ

このクイック スタートでは、機能フラグを作成し、Azure Functions アプリで使用しました。

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

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