プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

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の構成で

f:id:puni-o:20210326160814j:plain

こんな感じに設定しておけばログに設定値が出るはずですね

動かしてみる

Queueに何個か突っ込んでログを確認してみます

f:id:puni-o:20210326161001j:plain

App Insightsで見るとちゃんとログがでています

設定を変更しながら試してみる

  • Portalで設定変更
  • Functions再起動 (設定変更時に聞かれるので)
  • 間髪入れずに20個くらいQueueに入れる

をSETTING=1から順番に試してみます

設定が反映されない?

SETTINGを 2 -> 3 にして再起動した後試したところこうなりました

f:id:puni-o:20210326161912j:plain

ログは時刻で降順で、上のスクショでは一番下と下から二番目の間に設定変更と再起動が入っています

一つ目のログは3が出ていて予想通りだったのですが、その上が2となっていて変更前の値をログに出しています

ずっと変更前の値というわけではなく、しばらくすると3が出るようになります

f:id:puni-o:20210326162215j:plain

まとめ

ということで Functionsの構成で指定したアプリケーション設定は再起動したからと言って即時反映されるわけではないようです。多分設定をキャッシュしているのかな?(調べる元気はないです

接続文字列的なの変えて再起動して確認したのにちゃんと変わっていない?とか思ったら少し待つといいと思います

今は Azure App Configurationを使う(のかな?)ので関係ないのかもしれませんけど

docs.microsoft.com