xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Azure Functions SDK の更新に伴う FunctionsStartup の書き方の変更

2020/9/16 に Microsoft.Azure.Functions.Extensions パッケージが v1.1.0 がリリースされました。これに伴い、Azure Functions で DI を利用するときに書くことになる FunctionsStartup にアプリケーションの構成情報ソースをカスタマイズするためのオーバーライド (ConfigureAppConfiguration) が追加されました。

実装サンプル

最近は Azure App Configuration が便利過ぎるのでよく利用するのですが、そういうのを読み込み元として追加するときに利用できるでしょう。実装イメージはこんな感じ。

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;

[assembly: FunctionsStartup(typeof(AzureFunctionsSample.Startup))]

namespace AzureFunctionsSample
{
    internal class Startup : FunctionsStartup
    {
        // 新たに追加されたオーバーライド
        public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
        {
            // 既定の構成を取得
            base.ConfigureAppConfiguration(builder);
            var defaultConfig = builder.ConfigurationBuilder.Build();

            // App Configuration を読み込む
            builder.ConfigurationBuilder.AddAzureAppConfiguration(o =>
            {
                var connectionString = defaultConfig["AppConfig:ConnectionString"];
                o.Connect(connectionString);
                o.Select("*");
            });
        }

        // 前からあったオーバーライド
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var services = builder.Services;
            var config = builder.GetContext().Configuration;
            // DI 登録とかとか
        }
    }
}

これまでは Configure メソッドだけですべてやる必要があったのですが、タイミングを切り離すことができるようになった感じでしょうか。

呼び出し順序

試してみたところ、以下の順で呼び出されました。

  1. ConfigureAppConfiguration
  2. Configure

注意事項

Consumption Plan か Premium Plan の場合、スケールコントローラーの関係でアプリケーション構成の値が変更は許可されていない旨の記述がありました。実行時エラーになりそうなので、気を付ける必要がありそうです。