次の方法で共有


.NET 構成プロバイダー

Microsoft.Extensions.Configuration.AzureAppConfiguration

Azure App Configuration は、開発者がアプリケーション構成を単純かつ安全に一元化するのに役立つマネージド サービスです。 .NET 構成プロバイダー ライブラリを使用すると、管理された方法で Azure App Configuration ストアから構成を読み込めます。 このクライアント ライブラリは、Azure SDK for .NET の上に 追加機能 を追加します。

構成の読み込み

Azure App Configuration .NET 構成プロバイダーは .NET 構成システムと統合されているため、Azure App Configuration ストアから構成値を簡単に読み込むことができます。 アプリケーションの起動時にプロバイダーを追加し、他の構成ソースと共に使用できます。

.NET 構成プロバイダーを使用するには、パッケージをインストールします。

dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration

AddAzureAppConfiguration IConfigurationBuilder拡張メソッドを呼び出して、アプリケーションの構成プロバイダーとして Azure App Configuration を追加します。

構成プロバイダー ライブラリは 、オプション パターンビルダー パターン を組み合わせて実装し、 AzureAppConfigurationOptionsを構成するためのクリーンで宣言型の方法を提供します。 AddAzureAppConfiguration メソッドは、fluent API を使用してプロバイダーを構成できるAction<AzureAppConfigurationOptions>デリゲート パラメーターを受け取ります。

Azure App Configuration ストアに接続するには、Connect インスタンスで AzureAppConfigurationOptions メソッドを呼び出します。このメソッドは、メソッドチェーンを有効にするために同じオプション オブジェクトを返します。

DefaultAzureCredentialまたはその他のトークン資格情報の実装を使用して、App Configuration ストアに対する認証を行うことができます。 手順に従い、あなたの資格情報にApp Configuration データリーダー役割を割り当ててください。

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
using Azure.Identity;

var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("AppConfigurationEndpoint");
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
    });

var config = builder.Build();
Console.WriteLine(config["TestApp:Settings:Message"] ?? "Hello world!");

ASP.NET Core アプリケーションまたはバックグラウンド サービスでは、AddAzureAppConfigurationbuilder.Configurationを呼び出す場合があります。

var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("Endpoint");
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
    });

構成の使用

Azure App Configuration プロバイダーを追加した後は、いくつかの方法で構成値にアクセスできます。

1. 直接アクセス

最も簡単な方法は、 IConfiguration インスタンスから値を直接取得することです。

// Directly get the configuration
string message = configuration["TestApp:Settings:Message"];

IConfigurationSection settingsSection = configuration.GetSection("TestApp:Settings");

2. IConfiguration を使用した依存関係の挿入

サービスまたはコントローラーでは、 IConfiguration インターフェイスを直接挿入して使用できます。

public class WeatherService
{
    private readonly IConfiguration _configuration;

    public WeatherService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public Task<WeatherForecast> GetForecastAsync()
    {
        // Access configuration values directly from the injected instance
        string apiEndpoint = _configuration["TestApp:Weather:ApiEndpoint"];

        ...

        return Task.FromResult(new WeatherForecast());
    }
}

3.厳密に型指定された構成のオプション パターン

// Define a strongly-typed settings class
public class Settings
{
    public string BackgroundColor { get; set; }
    public long FontSize { get; set; }
    public string FontColor { get; set; }
    public string Message { get; set; }
}

builder.Services.Configure<Settings>(builder.Configuration.GetSection("TestApp:Settings"));

.NET のオプション パターンの詳細については、 ドキュメントを参照してください

JSON コンテンツ タイプの処理

App Configuration で JSON キー値を作成できます。 コンテンツ タイプ "application/json" のキー値が読み取られた場合、構成プロバイダーは IConfiguration内の個々の設定にフラット化します。 詳細については、「 コンテンツ タイプを使用して JSON キー値を App Configuration に格納する」を参照してください。

セレクターを使用して特定のキー値を読み込む

既定では、構成プロバイダーは App Configuration からラベルのないすべてのキー値を読み込みます。 SelectAzureAppConfigurationOptions メソッドを呼び出すことで、App Configuration ストアからキー値を選択的に読み込むことができます。

builder.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(endpoint), new DefaultAzureCredential())
        // Load configuration values with prefix "TestApp:" and no label
        .Select("App:Settings:*")
        // Load configuration values with prefix "TestApp:" and "Prod" label
        .Select("App:Settings:*", "Prod")
        // Load configuration values with prefix "TestApp:" and "Prod" label that have the tag "Group" with value "Contoso"
        .Select("App:Settings:*", "Prod", new[] { "Group=Contoso" })
});

Select メソッドは 3 つのパラメーターを受け取ります。 最初のパラメーターは、読み込むキーを指定するキー フィルターです。2 番目のパラメーターは、読み込む特定のラベルを持つキー値を指定するラベル フィルターです。3 番目のパラメーターは、読み込むキー値にすべて存在する必要があるタグ フィルターのコレクションを指定します。

複数の Select 呼び出しに重複するキーが含まれている場合は、後の呼び出しが以前の呼び出しよりも優先されます。

キー フィルター

キー フィルター パラメーターによって、含める構成キーが決まります。

  • 完全一致: 特定の文字列を使用すると、フィルターと完全に一致するキーのみが一致します。
  • プレフィックスの一致: 末尾にアスタリスク (*) を追加すると、プレフィックス フィルターが作成されます (たとえば、 App:Settings:* は "App:Settings:" で始まるすべてのキーを読み込みます)。
  • 複数のキーの選択: コンマ (,) を使用すると、複数の明示的なキー ( Key1,Key2,Key3 など) を選択できます。
  • 予約文字: アスタリスク (*)、コンマ (,)、円記号 (\) は予約されており、キー名で使用する場合はバックスラッシュでエスケープする必要があります (たとえば、キー フィルター a\\b\,\*c* は、キーが a\b,*cで始まるすべてのキー値を返します)。

同じ Select 呼び出しで、ワイルドカード プレフィックス照合とコンマ区切りフィルターを組み合わせることはできません。 たとえば、abc*,defはサポートされていませんが、Selectabc*で個別のdef呼び出しを行うことができます。

ラベル フィルター

ラベル フィルター パラメーターは、特定のラベルを持つキー値を選択します。 指定しない場合は、組み込みの LabelFilter.Null が使用されます。

ラベル フィルターでは、アスタリスク (*) とコンマ (,) はサポートされていません。 バックスラッシュ (\) 文字は予約されており、別のバックスラッシュ (\) を使用してエスケープする必要があります。

タグ フィルター

タグ フィルター パラメーターは、特定のタグを持つキー値を選択します。 キー値は、すべてのタグとそれに対応する値がフィルターで指定されている場合にのみ読み込まれます。 タグに null 値を指定するには、組み込みの TagValue.Null を使用できます。

アスタリスク (*)、コンマ (,)、および円記号 (\) は予約されており、タグ フィルターで使用する場合はバックスラッシュでエスケープする必要があります。

キーからプレフィックスをトリミングする

特定のプレフィックスを持つ構成値を読み込む場合は、 TrimKeyPrefix メソッドを使用して、構成のキーからこれらのプレフィックスを削除できます。 これにより、App Configuration ストアで組織を維持しながら、アプリケーションにクリーンな構成キーが作成されます。

builder.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(endpoint), new DefaultAzureCredential())
        // Load configuration values with prefix "TestApp:" and trim the prefix
        .Select("TestApp:*")
        .TrimKeyPrefix("TestApp:");
});

たとえば、App Configuration ストアに TestApp:Settings:Message という名前のキーが含まれている場合は、Settings:Message プレフィックスをトリミングした後、TestApp:としてアプリケーションでアクセスできます。

構成設定のマッピング

Azure App Configuration からキー値を読み込むときに、プロバイダーは、.NET 構成システムに追加する前に、最初にキー値を ConfigurationSetting オブジェクトとして取得します。 Map API を使用すると、このパイプライン中にこれらの設定を変換でき、アプリケーションでの構成の表示方法を制御できます。

Map メソッドは、ConfigurationSetting オブジェクトを受け取り、それを変更し、ValueTask<ConfigurationSetting>を返すデリゲート関数を受け取ります。 これは、キー名の変換や、実行時の条件に基づく値の書式設定に特に役立ちます。

次の例では、 Map API を使用して、構成キーの二重アンダースコア (__) をコロン (:) に置き換える方法を示します。 この変換は、キーが App Configuration で代替文字を使用する必要がある場合に、.NET 構成で期待される階層構造を保持します。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())
        .Map((setting) =>
        {
            // Transform keys from format "App__Settings__Message" to "App:Settings:Message"
            setting.Key = setting.Key.Replace("__", ":");
            
            return new ValueTask<ConfigurationSetting>(setting);
        });
});

ヒント

Map操作は、App Configuration から取得したすべての構成設定に適用されるため、変換ロジックで使用可能なすべてのキー形式が正しく処理されるようにします。

構成の更新

更新を構成すると、アプリケーションは再起動することなく App Configuration ストアから最新の値をプルできます。 ConfigureRefresh メソッドを呼び出して、キーと値の更新を構成できます。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())
        // Load all keys that start with `TestApp:` and have no label
        .Select(keyFilter: "TestApp:*", labelFilter: LabelFilter.Null)
        .ConfigureRefresh(refreshOptions => {
            // Trigger full configuration refresh when any selected key changes.
            refreshOptions.RegisterAll()
            // Check for changes no more often than every 60 seconds
                .SetRefreshInterval(TimeSpan.FromSeconds(60));
        });
});

ConfigureRefresh メソッド内で、RegisterAll メソッドを呼び出して、選択したキー値 (TestApp で始まりラベルのない値) の変更が検出されるたびに構成を再読み込みするように App Configuration プロバイダーに指示します。

SetRefreshInterval メソッドの呼び出しを追加して、構成の更新間隔の最小時間を指定できます。 設定されていない場合、既定の更新間隔は 30 秒です。

トリガーの更新

更新をトリガーするには、TryRefreshAsyncIConfigurationRefresher メソッドを呼び出す必要があります。 Azure App Configuration には、アプリケーション アーキテクチャに応じて実装するためのパターンがいくつか用意されています。

1. 依存関係の挿入

依存関係の挿入 (ASP.NET Core およびバックグラウンド サービスを含む) を使用するアプリケーションの場合は、refresher サービスを登録します。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())            
           .ConfigureRefresh(refreshOptions =>
           {
                refreshOptions.RegisterAll()
                    .SetRefreshInterval(TimeSpan.FromSeconds(60));
           })
});

// Register refresher service with the DI container
builder.Services.AddAzureAppConfiguration();

builder.Services.AddAzureAppConfiguration() は、 IConfigurationRefreshProvider サービスを DI コンテナーに追加します。これによって、アプリケーションの構成内のすべての Azure App Configuration ソースのリフレッシャーにアクセスできます。

ASP.NET Core アプリケーション

ASP.NET Core アプリケーションの場合は、 Microsoft.Azure.AppConfiguration.AspNetCore パッケージを使用して、組み込みのミドルウェアを使用して 要求ドリブン構成の更新 を実現できます。

dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore

サービスを登録したら、 UseAzureAppConfiguration を呼び出してアプリケーション パイプラインに AzureAppConfigurationRefreshMiddleware を追加し、受信要求の構成を自動的に更新します。

...

// Call the AddAzureAppConfiguration to add refresher service to the DI container
builder.Services.AddAzureAppConfiguration();

var app = builder.Build();

// Call the app.UseAzureAppConfiguration() method as early as appropriate in your request pipeline so another middleware doesn't skip it
app.UseAzureAppConfiguration();

// Continue with other middleware registration
app.UseRouting();
...

AzureAppConfigurationRefreshMiddlewareは、構成された更新間隔で構成の変更を自動的にチェックします。 この方法は、HTTP 要求が受信され、更新間隔が経過した両方の条件が満たされた場合にのみ更新されるため、効率的です。

バックグラウンド サービス

バックグラウンド サービスの場合は、 IConfigurationRefresherProvider サービスを挿入し、登録されている各リフレッシャーを手動で更新できます。

public class Worker : BackgroundService
{
    private readonly IConfiguration _configuration;
    private readonly IEnumerable<IConfigurationRefresher> _refreshers;

    public Worker(IConfiguration configuration, IConfigurationRefresherProvider refresherProvider)
    {
        _configuration = configuration;
        _refreshers = refresherProvider.Refreshers;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        foreach (IConfigurationRefresher refresher in _refreshers)
        {
            refresher.TryRefreshAsync();
        }

        ...
    }
}

2. 直接アクセス

依存関係の挿入を使用していないアプリケーションの場合は、オプションから直接リフレッシャーを取得できます。

IConfigurationRefresher refresher = null;
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())            
           .ConfigureRefresh(refreshOptions =>
           {
               refreshOptions.RegisterAll();
           });

    // Store the refresher for later use
    refresher = options.GetRefresher();
});

IConfiguration config = builder.Build();

// Later in your code, trigger refresh when needed
if (refresher != null)
{
    await refresher.TryRefreshAsync()
}

Console.WriteLine(config["TestApp:Settings:Message"]);

何らかの理由で更新呼び出しが失敗した場合でも、アプリケーションはキャッシュされた構成を引き続き使用します。 アプリケーションのアクティビティに基づいて、短期間後にもう 1 回試行されます。 更新の呼び出しは、構成された更新間隔が経過する前の no-op であるため、頻繁に呼び出される場合でもパフォーマンスへの影響は最小限です。

Sentinel キーの更新

''センチネル キー'' は、他のすべてのキーの変更を完了した後に更新するキーです。 構成プロバイダーは、選択したすべてのキー値ではなく、Sentinel キーを監視します。 変更が検出されると、アプリによって構成の値がすべて更新されます。

この方法は、複数のキー値を更新する場合に便利です。 他のすべての構成変更が完了した後にのみ Sentinel キーを更新することで、アプリケーションで構成が 1 回だけ再読み込みされ、一貫性が維持されます。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())
        // Load all keys that start with `TestApp:` and have no label
        .Select(keyFilter: "TestApp:*", labelFilter: LabelFilter.Null)
        .ConfigureRefresh(refreshOptions => {
            // Trigger full configuration refresh only if the `SentinelKey` changes.
            refreshOptions.Register("SentinelKey", refreshAll: true);
        });
});

Von Bedeutung

キー値は、更新監視用に自動的に登録されません。 ConfigureRefreshを明示的に呼び出し、(読み込まれたすべてのキーを監視するために) RegisterAll メソッドまたは Register メソッド (個々のキーを監視する) を使用してキーを登録する必要があります。

更新構成の詳細については、「 チュートリアル: ASP.NET Core アプリで動的構成を使用する」を参照してください。

機能フラグ

Azure App Configuration の機能フラグは、アプリケーションの機能の可用性を制御する最新の方法を提供します。 通常の構成値とは異なり、 UseFeatureFlags メソッドを使用して機能フラグを明示的に読み込む必要があります。 セレクターを使用して特定の機能フラグを読み込み、機能フラグの更新間隔を設定するように、 FeatureFlagOptions で構成できます。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())
        .UseFeatureFlags(featureFlagOptions => {
            // Load feature flags with prefix "TestApp:" and "dev" label
            featureFlagOptions.Select("TestApp:*", "dev")
            // Check for changes no more often than every 60 seconds
                .SetRefreshInterval(TimeSpan.FromSeconds(60));
        });
});

UseFeatureFlags メソッド内で、Select メソッドを呼び出して、機能フラグを選択的に読み込みます。 キー フィルターラベル フィルタータグ フィルターを使用して、読み込む機能フラグを選択できます。 Select メソッドが呼び出されない場合、UseFeatureFlagsは既定でラベルのないすべての機能フラグを読み込みます。

キー値とは異なり、明示的な ConfigureRefresh 呼び出しを必要とせずに、機能フラグが更新用に自動的に登録されます。 SetRefreshIntervalメソッドを使用して、機能フラグの更新の最小間隔を指定できます。 既定の更新間隔は 30 秒です。

機能の管理

機能管理ライブラリは、機能フラグに基づいてアプリケーション機能を開発および公開する方法を提供します。 機能管理ライブラリは、構成プロバイダー ライブラリと組み合わせて動作するように設計されています。 Microsoft.FeatureManagement パッケージのインストール:

dotnet add package Microsoft.FeatureManagement

AddFeatureManagementを呼び出して、DI コンテナーにIVariantFeatureManagerおよび関連サービスを登録できます。 この登録により、依存関係の挿入によって、アプリケーション全体で機能フラグ機能を使用できるようになります。

using Microsoft.FeatureManagement;

...

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential());
    // Use feature flags
    options.UseFeatureFlags();
});

// Register feature management services
builder.Services.AddFeatureManagement();

依存関係の挿入を通じてフィーチャ マネージャー サービスを使用する方法を示す次の例を示します。

public class WeatherForecastController : ControllerBase
{
    private readonly IFeatureManager _featureManager;

    public WeatherForecastController(IVariantFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }

    [HttpGet]
    public async Task<IActionResult> Get()
    {
        // Check if a feature flag is enabled
        if (await _featureManager.IsEnabledAsync("WeatherForecast"))
        {
            var forecast = GenerateWeatherForecast();
            return Ok(forecast);
        }
        
        return NotFound("Weather forecast feature is not available");
    }
}

機能管理ライブラリの使用方法の詳細については、 機能フラグのクイック スタートを参照してください。

Key Vault の参照

Azure App Configuration は、Azure Key Vault に格納されているシークレットの参照をサポートします。 App Configuration では、Key Vault に格納されているシークレットにマップされるキーを作成できます。 シークレットは Key Vault に安全に格納されますが、読み込まれた他の構成と同様にアクセスできます。

構成プロバイダー ライブラリは、App Configuration に格納されている他のキーの場合と同様に、Key Vault 参照を取得します。 クライアントはキーを Key Vault 参照として認識するため、一意のコンテンツ タイプを持ち、クライアントは Key Vault に接続してアプリケーションの値を取得します。

Key Vault に接続する

Key Vault への接続方法を構成するには、 ConfigureKeyVault メソッドを呼び出す必要があります。 Azure App Configuration プロバイダーには、Key Vault シークレットを認証してアクセスするための複数の方法が用意されています。

1. SecretClient インスタンスを登録する

指定した SecretClient インスタンスを登録することで、関連付けられた Key Vault からのシークレットの参照を解決するために使用できます。

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

...

var secretClient = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential());

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())  
        .ConfigureKeyVault(kv =>
        {
            // Register a SecretClient instance
            kv.Register(secretClient);
        });
});

2.資格情報を使用する

SecretClientが登録されていないキーボールトへの認証に使用する資格情報を設定できます。

using Azure.Identity;

...

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())  
        .ConfigureKeyVault(kv =>
        {
            // Use DefaultAzureCredential to access all Key Vaults
            kv.SetCredential(new DefaultAzureCredential());
        });
});

3. カスタム シークレット リゾルバーを使用する

SetSecretResolverを呼び出してカスタム シークレット リゾルバーを追加することもできます。これは、登録されたSecretClientが使用できない場合や、指定された資格情報が Key Vault に対する認証に失敗した場合に使用されます。 このメソッドは、Key Vault URI をシークレット値に解決するデリゲート関数を受け入れます。 次の例では、開発中の環境変数からシークレットを取得し、Key Vault からシークレットを取得できない場合にフォールバック値を使用するシークレット リゾルバーの使用を示します。

var secretClient = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential());

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())  
        .ConfigureKeyVault(kv =>
        {
            // Add a custom secret resolver function
            kv.SetSecretResolver(async (Uri secretUri) =>
            {                
                if (builder.Environment.IsDevelopment())
                {
                    return Environment.GetEnvironmentVariable("FALLBACK_SECRET_VALUE");
                }

                try 
                {
                    var secret = await secretClient.GetSecretAsync(secretName);
                    return secret.Value;
                }
                catch (Exception ex)
                {
                    logger.LogWarning($"Failed to retrieve secret from {secretUri}: {ex.Message}");
                    
                    return Environment.GetEnvironmentVariable("FALLBACK_SECRET_VALUE");
                }
            });
        });
});

Key Vault 参照を解決する場合、プロバイダーは次の順序に従います。

  1. 登録済み SecretClient インスタンス
  2. 既定の資格情報
  3. カスタム シークレット リゾルバー

Von Bedeutung

アプリケーションが適切な Key Vault 構成なしで Key Vault 参照を含むキー値を読み込む場合、起動時に 例外 がスローされます。 Key Vault アクセスまたはシークレット リゾルバーが正しく構成されていることを確認します。

ヒント

カスタム シークレット リゾルバーを使用して、Key Vault 参照が誤って App Configuration ストアに追加されるケースを処理できます。 リゾルバーは、フォールバック値を提供したり、警告をログに記録したり、Key Vault にアクセスするための適切な資格情報がない場合に、例外をスローすることなく適切に処理したりできます。

鍵庫のシークレットの更新

Azure App Configuration を使用すると、構成の更新サイクルとは別にシークレットの更新間隔を構成できます。 これは、App Configuration の Key Vault 参照 URI は変更されませんが、セキュリティ プラクティスの一環として Key Vault の基になるシークレットがローテーションされる可能性があるため、セキュリティにとって非常に重要です。

アプリケーションで常に最新のシークレット値が使用されるようにするには、 SetSecretRefreshInterval メソッドを構成します。 これにより、次の場合にプロバイダーは Key Vault から新しいシークレット値を取得するように強制されます。

  • アプリケーションで IConfigurationRefresher.TryRefreshAsync が呼び出されます
  • シークレットの構成済みの更新間隔が経過しました

このメカニズムは、App Configuration ストアで変更が検出されない場合でも機能し、ローテーションされたシークレットとアプリケーションの同期を維持します。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())
        .ConfigureKeyVault(kv =>
        {
            kv.SetCredential(new DefaultAzureCredential());

            // Option 1: Set refresh interval for specific secrets
            kv.SetSecretRefreshInterval("ApiKey", TimeSpan.FromHours(12)); 
            
            // Option 2: Set a global refresh interval for all secrets with no refresh interval specified
            kv.SetSecretRefreshInterval(TimeSpan.FromHours(24));
        })
        .ConfigureRefresh(refreshOptions => refreshOptions.RegisterAll());
});

Key Vault リファレンスの使用方法の詳細については、「 チュートリアル: ASP.NET Core アプリで Key Vault 参照を使用する」を参照してください。

スナップショット

スナップショット は、App Configuration ストアのキー値の名前付き不変サブセットです。 スナップショットを構成する Key-Value は、作成時にキー フィルターとラベル フィルターを使用して選択されます。 スナップショットが作成されると、その中の Key-Value は変更されないことが保証されます。

SelectSnapshotを呼び出して、スナップショットからキー値を読み込むことができます。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential());
    // Select an existing snapshot by name. This adds all of the key-values and feature flags from the snapshot to this application's configuration.
    options.SelectSnapshot("SnapshotName");
});

スナップショットの使用については、「スナップショットの 作成と使用」を参照してください

スタートアップの再試行

構成の読み込みは、アプリケーションの起動時にクリティカル パス操作です。 信頼性を確保するために、Azure App Configuration プロバイダーは、初期構成の読み込み中に堅牢な再試行メカニズムを実装します。 これにより、起動の成功を妨げる可能性がある一時的なネットワークの問題からアプリケーションを保護できます。

この動作は、 ConfigureStartupOptions メソッドを使用してカスタマイズできます。

builder.Configuration.AddAzureAppConfiguration(options =>
{
    options.Connect(new Uri(appConfigEndpoint), new DefaultAzureCredential())
        .ConfigureStartupOptions(startupOptions =>
        {
            // Set the time-out for the initial configuration load
            startupOptions.Timeout = TimeSpan.FromSeconds(60);
        });
});

ジオレプリケーション

geo レプリケーションの使用については、「geo レプリケーションを 有効にする」を参照してください。

分散トレース

Azure App Configuration .NET プロバイダーには、分散トレースのサポートが組み込まれており、アプリケーション全体の構成操作を監視およびトラブルシューティングできます。 プロバイダーは、構成の読み込みや構成の更新などの主要な操作の ActivitySource を開始する "Microsoft.Extensions.Configuration.AzureAppConfiguration" という名前の Activity を公開します。

次の例では、構成プロバイダーによって生成された分散トレースをキャプチャおよび監視するように OpenTelemetry を構成する方法を示します。

List<Activity> exportedActivities = new();
builder.Services.AddOpenTelemetry()
    .WithTracing(traceBuilder => {
        traceBuilder.AddSource(["Microsoft.Extensions.Configuration.AzureAppConfiguration"]);
            .AddInMemoryExporter(exportedActivities)
    });

.NET での OpenTelemetry の詳細については、 OpenTelemetry .NET のドキュメントを参照してください

次のステップ

.NET 構成プロバイダーの使用方法については、次のチュートリアルに進んでください。