しばやん雑記

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

Azure App Service の .NET Core 3.1 対応と Azure Functions v3 が Go Live リリース

.NET Core 2.2 と 3.0 の EOL が近づいてきていますが、App Service と Azure Functions は無事に年内に LTS となる .NET Core 3.1 への対応が完了しました。

特に 2.2 の EOL は今年中なので、サクッと .NET Core 3.1 へのアップデートを行っておくと良いです。EOL になったからと言って即座にダメになるわけではないですが、数バージョン飛ばしのアップデートは検証が大変になるので定期的に行いましょう。

App Service の .NET Core 3.1 対応

今週中に App Service への .NET Core 3.1 デプロイが完了するという予定でしたが、順調に進んだからか今朝全てのリージョンへのデプロイが完了したらしいです。

例によって Azure Portal からは .NET Core 3.1 が選べないようですが、Windows 側にはインストールされているので問題なく利用できます。

.NET Core 3.0 の時と同様に SDK は含まれずランタイムだけデプロイされています。なので Kudu を使ったビルドでは .NET Core 3.x が使えないのはこれまで通りなので、Azure Pipelines などでビルドしたパッケージを Run From Package でデプロイというのが鉄板です。

f:id:shiba-yan:20191210153740p:plain

既に .NET Core 3.0 への移行を行っている場合は TFM を netcoreapp3.1 に変えれば大体問題ないですが、Cookie の SameSite 周りで 1 点だけ影響範囲の大きい Breaking change があったので、ドキュメントを読んでからの設定と動作確認は必須です。

それ以外は特に影響は無さそうなので、3.0 へのアップデートが終わっている環境であれば完了です。2.2 から 3.1 へのアップデートは 3.0 での Breaking changes の対応を行う必要があるので割とやることが多いです。

Azure Functions v3 (.NET Core 3.1) が Go Live

数日前に .NET Core 3.1 が使えるようになって嬉しさ爆発してたんですが、あっという間に Go Live で使えるランタイムがリリースされました。Go Live と言ってますが、残りはツール周りの整合性を取るぐらいらしいので、ランタイム自体は実質 GA 相当のようです。

実質 GA になっているので、何もしなくても Visual Studio から v3 向けプロジェクトが作成できます。あの裏技っぽい環境変数の設定は必要なくなっています。

f:id:shiba-yan:20191210124113p:plain

v3 の GA は来年の 1 月ぐらいになりそうです。v3 は高い後方互換性を持っているので移行は楽です。

この間書いたエントリがそのまま Go Live としてリリースされたランタイムを使っていたので、基本的な使い方はこっちを読んでおいてください。

v2 からの移行に関しては TFM と Function Version を変えて SDK をアップデートするぐらいです。

移行のドキュメントも公開されてますが、JavaScript はまあまあ Breaking changes があります。.NET Core に関しては普通に書いていれば問題ないレベルなので、特に気にしなくても良いです。

v2 から実装が変わった部分があるらしく、FUNCTIONS_V2_COMPATIBILITY_MODE という設定が追加されています。これに true をセットすると古い実装に戻るようですが、パッと見た感じでは使う必要なさそうです。

移行自体は楽ですが Entity Framework Core 3.1 が使えるようになったりするので、そういった部分の対応が必要となります。

その辺りはケースバイケースなので頑張るしかないですが、ASP.NET Core アプリと共有プロジェクトを持っている場合は、全てを .NET Standard 2.1 か .NET Core App 3.1 に統一できるので楽になるはずです。

ここまでは前回書いた内容とあまり違いはないですが、.NET Core 3.1 と対応した Azure Functions Runtime が App Service にデプロイされたので、Azure にデプロイして動かすことが出来るようになっています。

Azure Portal から Runtime Version が 3.0.12930 以降になっていれば使えます。

f:id:shiba-yan:20191210154106p:plain

適当に作成した v3 Function をデプロイすると、サクッと .NET Core 3.1 上で実行されます。

f:id:shiba-yan:20191210154215p:plain

動かしてみるとこれだけですが、Azure Functions v3 の魅力は .NET Core 3.x で追加された新しいライブラリや言語機能を使えるという点なので、積極的にアップデートしていきたいです。

Azure Pipelines の .NET Core 3.1 対応

App Service へデプロイするために重要なのが Azure Pipelines ですが、例によって .NET Core 3.1 SDK がインストールされた Hosted Agent の更新が遅れているようで、まだ手持ちの環境では入ってませんでした。

なので基本的には UseDotNet task を使ってバージョンを固定するのが良いです。

f:id:shiba-yan:20191210160922p:plain

一応、今月リリースされた Image には .NET Core 3.1 SDK が含まれていましたが、実際に使えるようになるのが何時なのかは不明です。今月中にデプロイが間に合わない可能性もあります。

Hosted Agent の更新タイミングによってアップデートが左右されるのはイマイチなので、バージョンは明示的に指定してインストールするようにしましょう。