.NET on AWS の 2022 年まとめ

2022.12.18

いわさです。

この記事は Japan AWS Ambassador Advent Calendar 2022」の 18 日目の記事となります。
APN Ambassadorって何?と言う方は「APN Ambassadorsってなんだ?2021年度版」をご参照ください。

AWS では .NET on AWS という .NET に関する技術領域を指すカテゴリーが存在します。
今年も .NET on AWS に関する様々アップデートやイベントセッションがありました。
また .NET 自身も 2022 年は色々とあった年だったのではないかなと感じています。

この記事では .NET に普段関わりの無い方が .NET を知り、そしてこの記事のみで今年の .NET on AWS をキャッチアップ出来ることを目指してまとめてみます。

.NET とは

用語が混乱しやすいので .NET の概念だけ少しおさらいします。
先にまとめると以下のような感じです。

  • .NET で C# や VB.NET で実装したアプリケーションを実行出来る
  • .NET と .NET Framework は別物
    • 昔は .NET Framework というランタイムを使っていた。これらは Windows でだけ実行可能。昔と言ってるけど今も使えるしメンテナンスは今後もされ続ける。
    • 今は .NET という別のものに進化し Linux や Mac OS などクロスプラットフォームで実行出来るようになってる。オープンソースにもなってる。今後、新しい機能は .NET にだけ追加される。
  • .NET と .NET Core は同じ
    • 当初は .NET Core という名称だったがあるバージョンから .NET と呼ぶことに

現在 .NET と呼ばれているものは様々な進化を経て今日の状態となっていますが、そのオリジナルは .NET Framework というものから来ています。

.NET Framework は Version 1.0 が 2002 年に登場し Windows 用のマネージドランタイム環境として C# や VB.NET などで実装したアプリケーションの実行ランタイムとして提供されています。

その後 2016 年に .NET Core 1.0 という新しいフレームワークが登場しました。
雑にいうと従来 Windows のみでクローズドだった .NET Framework をオープンソース化しさらに Windows 以外の環境でも動くようにさせようぜというものです。(Mono にも触れたくなってきましたが...この記事では割愛します)
当初は .NET Core と呼ばれていましたが、.NET Core の Version 5 からは「.NET」と呼ばれるようになりました。

.NET on AWS とは

.NET on AWS というのは AWS 上で .NET アプリケーションを設計・構築・運用するためのテクノロジー全般を指すカテゴリーです。

ちなみに .NET on AWS というのは私の造語ではなく AWS がそのように呼んでいて re:Post のカテゴリで使われていたりロゴや SNS 公式アカウントも存在します。

なお .NET on AWS は私が観測している範囲だとさらに大きく以下の 3 つに分類されます。

実行環境のサポート

.NET をマネージドでサポートする AWS サービスが存在しており .NET アプリケーションをデプロイして実行することが出来ます。例えば AWS Elastic Beanstalk や AWS Lambda などがあります。
また .NET のバージョンアップにあわせて様々な AWS サービス上で、最新のランタイムが利用出来るようにアップデートされています。

開発環境のサポート

.NET アプリケーションから AWS の各種機能を利用するための SDK やフレームワークが AWS より提供されています。これらを使って AWS クラウドネイティブな .NET アプリケーションを作成することが出来ます。

また .NET アプリケーションを作成する際にはいくつかの IDE (統合開発環境) を使って開発を行いますが、各 IDE 向けの拡張機能も AWS から提供されており、IDE 上から簡単に AWS リソース上へアプリケーションをデプロイすることが出来るようになっています。

さらに AWS のインフラをコード化するための AWS CDK でも C# がサポートされており、.NET エンジニアが利用しやすい環境が整っています。

移行ツールのサポート

新しく .NET アプリケーションを作成する際は最新の .NET を使うことが多いと思いますが、既存の .NET Framework 資産は Windows 上でのみ動作するので様々な理由からランタイムを .NET へ移行したり、コンテナ化したい場合があります。
AWS ではそれらをサポートするたくさんのツールが提供されています。

.NET にとっての 2022 年

前置きがだいぶ長くなってしまいました。
ここから 2022 年を振り返ります。
まずは .NET 自身にとってどういう年だったのかを確認してみます。

大きなところだと .NET のバージョン終了・新バージョン登場が多かったことと、新しいプラットフォームが登場したという 2 点でしょうか。

.NET (.NET Core) のバージョン終了、新バージョンの登場

.NET ではランタイムバージョンのサポートライフサイクルが決まっています。
長期的なサポート (LTS) と 標準期間サポート (STS) の概念がまずあります。この LTS か STS かは AWS のサービスにも少し関連があるので意識しておきましょう。

LTS は最初のリリースから 3 年間サポートされ、STS はそれ以降の STS または LTS リリースから 6 か月間サポートされるということになっています。
そしてリリースは 12 か月ごとに行われるので、STS リリースのサポート期間はリリースから 18 か月となります。

以下は .NET and .NET Core official support policy より引用した release cadence です。

今年は以下のような感じで LTS と STS がそれぞれ入れ替わりました。

Version Type サポート開始 サポート終了
.NET Core 3.1 LTS 2019年12月3日 2022年12月13日
.NET 5 STS 2020年11月10日 2022年5月10日
.NET 6 LTS 2021年11月8日 2024年11月12日
.NET 7 STS 2022年11月8日 2024年5月14日

現在は LTS であれば .NET 6 を、STS であれば .NET 7 が利用出来ます。

.NET Framework

上記サポートライフサイクルには .NET Framework は含まれていません。
まず .NET Framework は今後もアップデートされます。

今後は .NET Framework 4.8 を最後のメジャーバージョンとしそれ以降はバグや信頼性・セキュリティ修正のためのパッチが提供される形のようです。
2022 年 8 月には最新の Version 4.8.1 がリリースされています。

.NET Framework のライフサイクルは Windows OS のライフサイクルポリシーと関連していて少し複雑なので詳細は以下をご確認ください。

.NET MAUI が General Availability

ここはクライアント実装寄りの話なのでさらっとだけ触れますが .NET Multi-platform App UI (.NET MAUI) が GA となりました。
それと同時に今後は Xamarin.Forms を .NET MAUI に移行する必要があるということでコミュニティで少し話題になりました。

.NET on AWS の 2022 年

さて、ここからはもう少し AWS に寄せた話になります。
.NET on AWS にフォーカスし今年 1 年がどのようなものだったのかを考察したいと思います。

.NET on AWS 関連の アップデート

DevelopersIO では .NET on AWS に関係したアップデートにあわせて以下の記事が作成されました。

時期 内容
3 月 AWS Lambdaで.NET 6が利用出来るようになりました
5 月 AWS Encryption SDK for .NET がGAになったので使ってみた
7 月 AWS .NET deployment tool でも新しくなったデプロイ機能が使えるようになったようなので使ってみた
7 月 .NET Framework から .NET への互換性評価と移植支援を行うツール「Porting Assistant for .NET」が VB.NET をサポートしました
7 月 AWS Toolkit for Visual Studio に CloudWatch Logs 統合機能が追加されました
7 月 AWS Toolkit for Visual Studio の「Publish to AWS」が刷新され、スケジュール実行されるコンソールアプリや Blazor WebAssembly などもデプロイ可能に
10 月 AWS App Runner でサポートされるマネージドランタイムが追加されたので .NET アプリケーションを実行してみる
11 月 新たな .NET ワークロード向けの開発ツール「AWS Toolkit for .NET Refactoring」が登場しました
12 月 .NET Annotations Lambda Framework を使って .NET 6 のサーバーレス API を作成する

新しい便利なツールが提供されるようになったり、IDE のユーザー体験が変わるような、.NET on AWS アプリケーションの開発観点でのアップデートが多かったですね。

アーキテクチャー周りでいうと Lambda の .NET 6 サポートと、App Runner の .NET サポートが追加されたことで、最新バージョンを幅広いアーキテクチャーに適用出来るようになっています。
昨年も ECS Fargate で Windows コンテナがサポートされるなどあり .NET Framework もまだまだ現役です。

他にも直接的ではないですが Graviton 周りのアップデートなど .NET にとって見逃せないアップデートがありました。
このあたりは後述の re:Invent 2022 セッションで取り上げられています。

AWS re:Invent 2022 セッションなど

re:Invent 2022 でも .NET に関する様々なセッションやチョークトークが用意されていました。
それらの多くは昨年と類似しつつも、AWS や .NET の進化にあわせてしっかりアップデートされており見応えのあるものでした。

セッション番号 セッション名 種類 レポート
XNT301 Refactoring strategies for .NET applications as you migrate to the cloud Breakout Session DevelopersIO
XNT302 Build, test, and deploy your .NET applications on AWS Breakout Session DevelopersIO
XNT303 Building AI-enriched applications with .NET on AWS Breakout Session DevelopersIO
XNT304 Purpose-built databases for modern .NET applications on AWS Chalk Talk DevelopersIO
XNT305 Modernize .NET Framework applications with AWS tools Workshop ---
XNT401 Boosting .NET application performance with Arm64 and AWS Graviton3 Breakout Session DevelopersIO
XNT402 Cloud-native .NET applications on AWS Breakout Session DevelopersIO
XNT403 Optimizing performance for .NET on AWS Lambda Breakout Session DevelopersIO
XNT404 Scaling .NET applications with asynchronous workflows Breakout Session DevelopersIO
XNT405 Don’t overthink it: Identifying services for modernized .NET workloads Chalk Talk ---
XNT406 Designing cloud-native .NET applications Chalk Talk ---
OPN207 .NET open source on AWS Breakout Session ---

セッションレベルが 300 - Advanced か 400 - Expert のセッションで構成されています。

まだ全てに参加・アーカイブ視聴出来ていないのですが全体の傾向をまとめると、まず最近は RyuJIT の Arm64 サポートが進み Graviton 環境で非常に高いパフォーマンスを得られるようになっています。
そして Graviton の文脈ではよくコストパフォーマンスが語られると思いますが、今回の Graviton 3 の登場とあわせて Graviton x .NET で高いコストパフォーマンスを発揮出来るというストーリーが多く紹介されていました。
キーノートでは Java の SnapStart によるコールドスタート改善が注目を集めていましたが .NET では .NET 7 の Native AOT 機能を使うことで Lambda のコールドスタートを改善するというアプローチが紹介されており非常に見応えがありました。

このように最新の STS である .NET 7 ではさらなる改善がされており、Graviton 3 x .NET 7 が注目されているという印象でした。
ただ、注意点もあって、Amazon Linux 2 だと GLIBC のバージョンの関係で .NET 7 の実行要件を満たしておらずエラーとなるようです。上記セッションでは EC2 の場合は Ubuntu が使われており、Lambda は STS である .NET 7 をマネージドランタイムとしては採用しないので Amazon Linux 2 のカスタムランタイムを作成する必要があり ARM での実行が出来ません。

Amazon Linux 2022 (2023 か?)を待ちたいところですね。

あとは .NET 7 の Native AOT については複数のセッションで取り上げられていました。
特にサーバーレス構成での Native AOT 採用は今まで JIT 系のランタイムが Lambda だと実行速度やコールドスタートの兼ね合いなどで採用見送りになる傾向が多かったと思いますが .NET 周りの状況がガラっと変わるかもしれません。
今後が楽しみです。

AWS Summit Online 2022

2022 年の AWS Summit Online では .NET を想定した Windows Server アプリケーションの移行について広くカバーされたセッションが公開されていました。
こちらは日本語かつセッションレベルが 200 なので .NET アプリケーションを AWS に移行するかもしれないがどうしよう...という方は必ず見たほうが良いかなと思います。

Web Forms だとどうする?SignalR は?などターゲット別に触れられている部分もありかなりオススメです。 アーカイブ公開されていますのでぜひご覧ください。

なお、こちらセッションレポートを作成させて頂いております。

まとめ

では 2022 年の .NET on AWS をまとめます。

.NET on AWS 単体において革新的な新サービスはありませんでしたが、Graviton 3 や Lambda, App Runner など .NET の最新バージョンに対応しつつ高いコストパフォーマンスを発揮するような、AWS 環境への移行モチベーションが上がるようなアップデートが多かったです。

また昨年と変わらずツールの機能追加が進んでおり、様々なイベントでも積極的に取り上げられていて.NET on AWS は去年と変わらない感じの力の入れようという印象でした。

なお、re:Invent 2022 では .NET on AWS の EXPO 専用ブースがいくつか設けられていました。
来年も楽しみですね!