Azure Functions の AZURE_FUNCTIONS_ENVIRONMENT でローカルと本番の実行を見分けるメモ

Azure Functions の AZURE_FUNCTIONS_ENVIRONMENT でローカルと本番の実行を見分けるメモです。

最近、自分の身の回りのデータ取得ツールをいくつか Azure Functions に寄せようとしていて、作り込んでいくうちに npm run startfunc start のコマンドでローカル実行するときと、 func azure functionapp publish <appname> で本番環境にデプロイした後の本番実行したときで、挙動を分岐させたいシーンが出てきました。

AZURE_FUNCTIONS_ENVIRONMENT という値がまさにそれだった

もちろん、実行フォルダが 'D:\\Program Files\\ だったら、みたいな判定の仕方はあるのですが、公式のしっかりした判定値はないのかなと探していたところ、AZURE_FUNCTIONS_ENVIRONMENT という値がまさにそれでした。

Azure Functions のアプリケーション設定のリファレンス | Microsoft Docs

ローカル コンピューターで実行している場合は、Azure Functions Core Tools により AZURE_FUNCTIONS_ENVIRONMENT が Development に設定されます。

とのことで、これで判定してみます。

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    context.log(process.env['AZURE_FUNCTIONS_ENVIRONMENT']);

    let responseMessage;
    if( process.env['AZURE_FUNCTIONS_ENVIRONMENT'] == 'Development' ){
      responseMessage = 'This is development mode.';
    } else {
      responseMessage = 'This is production mode.';
    }
    
    context.res = {
        body: responseMessage
    };
}

このような Azure Functions のプログラムを書きました。

  • func -v は 4.0.3971
  • node -v は v14.17.5

です。

動かしてみる

こちらの関数を npm run startfunc start のコマンドでローカル実行してみたところ、This is development mode. 応答し、本番環境では This is production mode. で応答しました!

私の場合、どこからか自動で来る Webhook のデータを想定してローカル実行時だけ、本番で来るようなデータに差し替えてテストするみたいなことをしたいときは多いので重宝しそうです!