しばやん雑記

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

Azure Functions の .NET In-Process 向け .NET 8 サポートがリリースされました

公式ブログで予告されてからかなり時間がかかっていましたが、ようやく Azure Functions の .NET In-Process Model での .NET 8 対応がリリースされました。

大々的なリリースは行われておらず、GitHub の Issue とドキュメント更新に留まっているのは開発チーム的には .NET In-Process ではなく .NET Isolated に移行してもらいたい意志の表れでしょう。

既に Windows 向けには全てのパブリックリージョンに対して展開が完了しているらしく、Linux や ASE はこれからというステータスのようです。

Windows 環境においては Azure Functions が Site Extension として実装されているのは有名ですが、今回のリリースに伴って 3 つの Site Extension が用意されるようになりました。ディレクトリ名から用途は分かるので説明は省略しますが、Azure Functions のメインストリームから In-Process は完全に分離されたことになります。

Azure Functions Runtime が .NET In-Process の .NET 6/8 とそれ以外に分離されましたが、どの Runtime が使われるのかは設定によって自動的に切り替わるので、利用者側で特に何かする必要はありません。これまでイレギュラーな設定でたまたま動いていたようなケースでは問題となっている可能性はあります。

分離された事でバージョンの規約に少し変更が入りました。基本的には In-Process 向けが増えたので、以下のようにマイナー部分に対応する .NET のバージョンが含まれるようになりました。

  • .NET Isolated / その他の言語向け
    • 4.xx.xx.xxxxx (例 : 4.34.2.22820)
  • .NET 6 In-Process 向け
    • 4.6xx.x.xxxxx (例 : 4.634.2.22872)
  • .NET 8 In-Process 向け
    • 4.8xx.x.xxxxx (例 : 4.834.2.22872)

恐らく今後は .NET Isolated / その他の言語向けの更新がメインになり、In-Process 向けの更新は不具合対応ぐらいになると思われるので、バージョンはそれぞれで大きく変わってくるでしょう。

Azure Portal から確認できるバージョンにももちろん影響するため、急にバージョンが変わったからといって慌てないようにしましょう。

既存の Azure Functions の移行

.NET In-Process で動いている Azure Functions の .NET 8 への移行方法はドキュメントに記載されているので、基本はこの手順に従えば問題なく移行が可能なはずです。

一番簡単な .NET 8 への移行方法は、ドキュメントにも書かれているように Azure Functions の .NET バージョンを 8 に変更して、App Settings に FUNCTIONS_INPROC_NET8_ENABLED を追加するだけで .NET 8 への移行自体は完了します。

この方法では Azure Functions の再デプロイは必要ないので、以下のように Azure CLI でコマンドを打ち込めば完了するメリットが大きいです。

az functionapp config set -g <groupName> -n <appName> --net-framework-version v8.0
az functionapp config appsettings set -g <groupName> -n <appName> --settings FUNCTIONS_INPROC_NET8_ENABLED=1

Azure Functions で .NET 8 や Entity Framework Core 8 で追加された新機能やライブラリを使う必要がある場合には、プロジェクトを .NET 8 向けに変更して再デプロイが必要になります。この辺りは .NET 6 対応の時に行なった内容とほぼ同じになります。

再デプロイが必要にはなりますが、.NET 8 で追加された新機能を全て利用できるのでメリットはあります。将来的に .NET Isolated への移行が決まっているプロジェクトの場合はここまで対応しておくのが理想でしょう。

Visual Studio を利用したデプロイ時には、既存のプロファイルにターゲットフレームワークの設定が含まれているので、.NET 8 化を行なった後のデプロイでは修正する必要があります。

ちなみに Visual Studio や Visual Studio Code では .NET In-Process な Azure Functions プロジェクトの新規作成にも対応しています。最新版の拡張機能やテンプレートがインストールされていれば、以下のように新規作成時に .NET 8 が選べるようになっています。

もちろん以下のようにローカルでのデバッグ実行も問題なく行えるため、あまり推奨はされませんが新規に .NET 8 で In-Process なプロジェクトを作成することが可能です。

現時点で確認した限りではローカル向けでは無条件で .NET 8 向けのランタイムが使われているようでした。互換性は高いため問題はなさそうですが、少し気になる挙動です。

これでようやく Azure Functions を含んだプロジェクトを全て .NET 8 にアップグレード出来るようになりました。次の .NET 10 LTS までには .NET Isolated への移行が必要になりますが、それまでに .NET Isolated の完成度が上がることに期待しています。