Azure Functions の設定が変わったり変わらなかったりする件
Azure Portalの構成で設定値を変更しても、すぐにその設定でFunctionsが動くとは限らないよ、というお話です
準備
関数
[FunctionName("QueueFunction")] public static async Task Run([QueueTrigger("myqueue-items", Connection = "")]string myQueueItem, ExecutionContext context, ILogger log) { var config = new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddEnvironmentVariables() .Build(); var setting = config["SETTING"]; log.LogInformation($"Queue trigger function processed: {setting} ({context.InvocationId})"); var client = new HttpClient(); await client.GetAsync("https://localhost/heavyapi"); }
Visual StudioのテンプレートにQueueTriggerで動く関数を追加します
最後のclient.GetAsync()
は10秒応答を返さないWebAPI作ってそれを呼び出すようにしておきました (重い処理やっているつもり)
設定
PortalのFunctionsの構成で
こんな感じに設定しておけばログに設定値が出るはずですね
動かしてみる
Queueに何個か突っ込んでログを確認してみます
App Insightsで見るとちゃんとログがでています
設定を変更しながら試してみる
- Portalで設定変更
- Functions再起動 (設定変更時に聞かれるので)
- 間髪入れずに20個くらいQueueに入れる
をSETTING=1から順番に試してみます
設定が反映されない?
SETTINGを 2 -> 3 にして再起動した後試したところこうなりました
ログは時刻で降順で、上のスクショでは一番下と下から二番目の間に設定変更と再起動が入っています
一つ目のログは3
が出ていて予想通りだったのですが、その上が2
となっていて変更前の値をログに出しています
ずっと変更前の値というわけではなく、しばらくすると3
が出るようになります
まとめ
ということで Functionsの構成で指定したアプリケーション設定は再起動したからと言って即時反映されるわけではないようです。多分設定をキャッシュしているのかな?(調べる元気はないです
接続文字列的なの変えて再起動して確認したのにちゃんと変わっていない?とか思ったら少し待つといいと思います
今は Azure App Configurationを使う(のかな?)ので関係ないのかもしれませんけど