[レポート] .NET open source on AWS #reinvent #OPN207

2023.01.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

YouTube で公開されている AWS re:Invent 2022 Breakout Session の .NET open source on AWS (OPN207) のセッションレポートです。

本セッションは既に YouTube にてアーカイブ動画が公開されています。
本記事では見どころやポイントを紹介したいと思いますので、興味を持って頂けた方は本編のアーカイブ動画のほうもチェックしてみてください。

セッションレベルが 200 ということもあり技術の中身の話はそこまで無いので .NET 技術に深い知識がなくても理解しやすかったです。
AWS が .NET に対してオープンソースという側面で、これまでどういう取り組みをしてきたのか、今何に力を入れているのかがよくわかります。

.NET オープンソース開発者の方や .NET ユーザーグループの方に関連するプロモーションが含まれていたので、関係者の方は是非見て頂きたいところです。

セッション概要

.NET is the third most-used programming stack by AWS customers and is used by a dedicated community of over 10 million developers worldwide. Increasingly, the non-enterprise .NET open-source ecosystem has been neglected and often termed “third party,” which has been detrimental to the growth of the community. AWS is trying to change that. In this session, learn how AWS is making an impact in the .NET open-source community, and discover some of the long-term bets that AWS is investing in today. Walk away equipped with an understanding of the possibilities for .NET open source on AWS.

スピーカー

  • Saikat Banerjee, Software Development Manager, Amazon Web Services
  • Mayur Dewaikar, Sr. Manager, Product Management, AWS

レベル

-200 - Intermediate

セッション内容

前半は .NET on AWS の歴史と現時点でどういうラインナップになっているのかが紹介されています。
後半は .NET オープンソースに対して AWS が積極的に投資しているものの具体例が紹介されています。

.NET on AWS について

AWS は 2008 年から Windows と .NET のワークロードをホスティングする方法を提供しており、14 年間 .NET をサポートし続けています。
このスライドではこれまでにどういうサービス・ツールが提供されてきたのかが時系列でわかるようになっています。

こうしてみると AWS SDK for .NET や AWS Toolkit for Visual Studio あるいは Elastic Beanstalk といったサービスなどはかなり初期のころからサポートされていますね。
そしてここ数年で特定ユースケースに対して利用出来るツールが増えています。

直近数年では .NET Framework から .NET へのマイグレーションをサポートするものが多いですね。
さらに直前にはもう一段階進んでモダナイゼーションまでサポートするツールも登場しています。

このセッション内では、やはり Windows や SQL Server を前提としたレガシーアプリケーションでライセンスコストが課題となっており Linux への移行を重要視している点に触れられていました。

.NET をサポートする AWS サービス

こちらは本日時点で .NET ワークロードをサポートしている AWS サービスです。
俯瞰出来て良いですね。

直近では App Runner のマネージドランタイムとして .NET がサポートされたのは記憶に新しいです。
昨年は Fargate で Windows コンテナもサポートされました。

App Runner は裏側では Fargate タスクが実行されているとこちらのセッションレポートでも言及されていたので将来的に Windows コンテナが動くようになるとこのスライドも変わりそうです。

.NET on AWS の開発ツール

.NET on AWS はサービスとツールの両面でサポートされており、こちらはツールのサポート状況です。

こちらもひとつひとつの中身には触れていませんが、要するに AWS は既存の .NET 開発者体験を重要視しており、様々な開発環境に統合させることに投資しているという話がされていました。

こちらのスライドを見ていた気が付きましたが、AWS Toolkit for .NET Refactoring が含まれていないですね。
10 月後半にリリースされたのでスライドに間に合わなかったのかもしれないです。

新たな .NET ワークロード向けの開発ツール「AWS Toolkit for .NET Refactoring」が登場しました | DevelopersIO

2022 年 1 Q のプログラミング言語コミュニティの規模で .NET (C#) が 5 位

以下のスライドは SlashData 社の State of the Developer Nation survey Q1 2022 という資料から引用されたものです。

.NET が AWS にとってどれだけ重要な言語なのかについて触れられています。
AWS で 3 番目に人気のあるフレームワークとのこと。3 番目...良いのか?

Porting Assistant for .NET

ここからは具体的にどういったプロジェクトに対して投資が行われているのか述べられています。
Porting Assistant for .NET は前述の AWS Toolkit for .NET Refactoring が登場したことで AWS から切り離されたツールになったものですね。
.NET Framework を .NET へ移行するためにコードのアセスメントから推奨事項を提示して、移行の自動処理まで行ってくれるものです。

このセッションでは具体的なツールの使い方などには触れられていません。ツールがどういうものなのか気になる方は以下なども参考にしてください。

また、Porting Assistant for .NET では Web Forms を Blazor Server へ変換する機能があります。
以前 DevlopersIO 内でも試したことがあります。

その時は手動での修正が必要で苦労した記憶があります。
本セッションでは「現状は完全にはほど遠い」というような表現がされていたので、今後より品質が向上される可能性がありそうです。期待したいところです。

セッション内では Blazor 以外の JavaScript フロントフレームワークについても移行先として言及されていたので、今後 Blazor 以外の選択肢も出てくるかもしれません。

Core WCF へのコントリビュート

Microsoft が開始した WCF の .NET Core 対応である Core WCF プロジェクトというものがあります。
実はこちらのプロジェクトでは Microsoft に次いで AWS がコントリビュートしている割合が大きいプロジェクトらしいです。

Microsoft と AWS が双方コントリビューションに関与した最初の .NET プロジェクトとして以下の記事でも紹介されていました。これはなかなか熱いですね。

gMSA for Linux Container

gMSA (Group Managed Service Accounts) は Active Directory の機能で、複数のサーバーで同じプリンシパルを使用するための機能です。

ネットワーク負荷分散ソリューションなど、サーバー ファームにホストされているサービスに接続されると、相互認証をサポートする認証プロトコルでは、サービスのすべてのインスタンスが同じプリンシパルを使用する必要があります。 gMSA をサービス プリンシパルとして使用すると、Windows オペレーティング システムでアカウントのパスワードが管理され、管理者がパスワードを管理することはなくなります。

Group Managed Service Accounts Overview | Microsoft Learn より

現状標準では Windows でのみサポートされているこの機能ですが、Credentials Fetcherというものを AWS は OSS で提供しており、こちらを使って Linux コンテナの .NET Core アプリケーションから Windows 認証経由で SQL Server へ接続するようなシナリオをサポートさせたいようです。

こちらは ECS の Linux コンテナでプレビューサポートされていて、将来的には Fedra や Amazon Linux 2022 でもサポートされる予定とのことです。

Native AOT の Lambda サポート

.NET 7 の重要な機能のひとつです。
ただし、現状は ASP.NET Core ではサポートされておらずコンソールアプリのみでサポートされています。

そこで AWS ではツール(.NET CLI or SAM CLI)を使うことで Lambda へいち早く Native AOT を対応させました。
これによってコールドスタートの遅延や実行速度を大幅に改善出来る可能性があります。

これについては他の .NET on AWS の re:Invent 2022 セッションで何度も登場しました。

AWS Deploy Tool for .NET

セッション前半で開発者体験について少し触れていました。
AWS Deploy Tool for .NET はどの AWS サービスへデプロイする場合でも統一されたツールでデプロイ出来るようにするという思想のツールです。

実際に MacOS 環境から App Runner や ECS へデプロイしてみましたが、AWS サービスをあまり意識せずにアプリケーション実装に集中出来るような、非常に使いやすく良い体験でした。

.NET OSS への貢献

まず .NET on AWS チームは .NET オープンソースへ貢献するためにいくつかのプロジェクトへ資金面での支援をしているそうです。
これまで 10 のプロジェクトへアプローチを行い、以下の 9 はもう済んでいるとか。

  • Moq
  • FluentValidation
  • FluentAssertions
  • Autofac
  • Buildalyzer
  • AutoMapper
  • ImageSharp
  • RestSharp
  • Swashbuckle

さらに .NET OSS の作成者に AWS クレジットを提供するプログラムもあるようです。
こちらは .NET OSS の作成者であれば誰でも申し込みが可能とのことで、リポジトリに OSS のコードさえあれば審査対象となるようです。

以下からリクエストが可能です。
.NET OSS を作成している方は是非申し込んでみては如何でしょうか。

.NET on AWS - Request Credits for Open Source Projects

そして .NET ユーザーグループのサポートも行っているそうで、.NET on AWS チームのメンバーに登壇を依頼したり、ユーザーグループに対して運営費用を支援したり AWS SWAG を提供したりしてくれるらしいです。

このあたりも知らなかったですがおもしろい取り組みですね。

さいごに

前半で .NET on AWS の全体を復習することが出来ました。
.NET on AWS を追いかけていない方にとっても全体を俯瞰出来てとても良かったのではないでしょうか。

また、後半の特に「.NET OSS への貢献」あたりは非常におもしろい取り組みが多く .NET OSS 作成者の方や .NET ユーザーグループの方はリクエストしてみては如何でしょうか。