しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

2020 年 10 月に既存の Azure Functions v2 は v3 (.NET Core 3.1) に更新されます

Azure Functions v2 もサポートが継続されるみたいな話を見た気がしますが、既存の Function v2 は使用している .NET Core バージョンの EOL に伴って v3 にアップグレードされるようです。

今年の 10 月に行われる予定のようですが、例によってリージョンによって多少の差が出るはずです。

自動的に FUNCTIONS_EXTENSION_VERSION~3 に変更されるのかと思いましたが、実体は異なっているようだったので概要をまとめました。

  • Azure Functions Runtime が v3 (.NET Core 3.1) にアップグレードされる
    • v2 は .NET Core 2.2 がターゲット (既に EOL)
  • ただし FUNCTIONS_EXTENSION_VERSION~2 のまま
    • ~2.0 を指定すると固定可能なようなので、恐らく 2.1 のような扱い
  • FUNCTIONS_V2_COMPATIBILITY_MODE = true が自動で設定される
    • そこまで大きな差はない (レスポンス書き込み時の同期 IO が許可されるぐらい)

v2 の互換性モードが有効になることで変更になる動作はきっちりとまとめられていないので、Azure Function Runtime のコードを読むしかないです。以下の部分が該当します。

開発チーム曰く、.NET Core 2.2 から .NET Core 3.1 の間で変更された API を使っていない限りはシームレスに移行が行われるようです。

つまり v3 へのアップグレードには手間がかからないということでもあるので、現在 v2 で運用している Azure Functions はさっさと v3 にアップグレードした方が良いでしょう。

以前書いたように、大体は SDK と TFM の更新ぐらいで終わります。マイグレーションのドキュメントも用意されていますが、JavaScript の方が破壊的変更が多いので少し心配です。

アップグレード後はテストが必要になりますが、それは放置していても同じなのでしつこいようですが、早めに v3 へのアップグレードを終わらせておいた方が良いです。

今回のアップグレードをオプトアウトしたい場合には FUNCTIONS_EXTENSION_VERSION~2.0 に設定します。恐らく実質的にはサポート終了扱いになるので、あまり推奨はしません。

If you do not upgrade your app to Azure Functions runtime v3, you may “pin” your app to Azure Functions v2.

To pin your app to Azure Functions v2, update the application setting FUNCTIONS_EXTENSION_VERSION to ~2.0.

Platform upgrade from Azure Functions runtime v2 to v3 · Azure/azure-functions-host Wiki · GitHub

de:code 夏祭り #2 で Azure Functions は v3 しか使っちゃダメとは言いましたが、思ったより早く v2 がリタイアになったなという印象は持ちました。

ただし直近で v2 Runtime が削除されることはないので、2.0 に固定していても動作し続けるというのが良くない点です。後で慌てないためにも 10 月までに v3 へのアップグレードを終わらせておきましょう。