Amazon Web Services ブログ

AWSで.NET 5を利用する

元の記事:https://aws.amazon.com/jp/blogs/developer/net-5-on-aws/

本投稿は Josh Hurleyによる記事を翻訳したものです。

AWSには長い間.NETでの開発に携わってきた者が多数在籍しており、私たちは.NET 5がGAリリースされたことに大きな喜びを感じています。2020年夏に.NET Conf 2020で発表されたベンチマーク結果によると、旧バージョンの.NET Core 3.1に比べ特に性能改善に力が注がれたことがよく分かります。Linuxでのソケットパフォーマンスは30%、JSONのシリアル化では19%、gRPC処理では230%の性能改善が見られる等、テストされた23のフレームワークの中でも一つを除けば最も良い結果となりました。多くのお客様との会話の中で、皆様の.NET 5のランタイム性能とスケーラブルなモダン化された実装に対する期待を感じています。

この記事では、AWSが.NET 5での開発をサポートするためにどんなサービスやツールをご用意しているか、コンピューティング・ネットワーク・開発者ツール・データベースといった4つの領域に分けて解説していきたいと思います。これらの情報をもとに、皆様がAWS上で.NETを最大限活用いただければ幸いです。

1. コンピューティング

プロセッサーにおいては、AWS Graviton2プロセッサーといったAWSが独自に開発したハードウェアを選択することができます。現時点で、主要クラウドサービスの中でAWSのみがARM64アーキテクチャー上での.NET 5の利用を可能としています。AWS Graviton2で動作するAmazon EC2インスタンスは既存のx86ベースのインスタンスに比べ40%高い費用対性能を提供します。AWS Graviton2を利用すれば、.NET 5がサポートするすべてのLinuxディストリビューション(Alpine Linux、Debian、Ubuntu)において.NETとARM64の組み合わせによる性能改善を最大限享受することができます。

AWS管理コンソールからAWS Graviton2 EC2インスタンスをデプロイするためには、下記のスクリーンショットの通り「Select」の下のラジオボタンで64-bit(Arm)を選択してください。

Amazon Machine Image 64-bit (Arm) selection

AWSは様々なコンピューティングプラットフォームにおいて.NET 5をサポートしています。現在は275もの種類のEC2インスタンスタイプにおいて.NET 5ランタイムを実行することが可能で、この選択肢の多さはお客様のソリューションの柔軟性につながります。.NETはLinux・Windows両方において常に手厚くサポートされており、まもなく.NET 5ランタイムをEC2 Image Builderに組み込むことも可能になる予定です。それまでの間は、代わりにこちらのCloudFormationテンプレートのサンプルを活用しAmazonマシンイメージ(AMI)に.NET 5ランタイムをインストールする方式を利用できます。

また、近日中にAWS Elastic Beanstalkを利用してASP.NET Core 5のウェブアプリケーションを管理、デプロイすることでスケールアップ・スケールダウンが可能となります。Linuxインスタンス上に.NET 5アプリケーションをデプロイし、コストを削減するために共有ロードバランサーを利用することでモダン化することができます。 正式サポートまでの間は、代わりにAmazon Linux 2インスタンスが対象の場合は、自己完結型バンドルオプションを利用してデプロイすることができます。AWS Toolkit for Visual Studioの中で、「Container type」に64bit Amazon Linux 2を指定し、Applications Options画面で「Build self contained deployment bundle」オプションを選択します。

Elastic Beanstalk Publish Applicaiton Options

コンテナ上で.NET 5アプリケーションを稼働させたい場合は、Amazon Elastic Container Service(ECS)またはAmazon Elastic Kubernetes Service(EKS)の2つの選択肢があります。サーバーレスコンテナエンジンのAWS FargateはECS・EKS両方に対応しており、これを利用すれば直接サーバーをプロビジョンしたり管理する必要もありません。開発者は.NET 5アプリケーションのコンテナをAWS Toolkit for Visual Studioを通じて発行することができます。

サーバーレスコンピューティングサービスを検討されている場合は、カスタムランタイムを使って.NET 5ランタイムをターゲットにAWS Lambdaを実行することができます。AWS Toolkit for Visual Studio内の「Custom Runtime Function」ブループリントは.NET 5に対応できるように既に更新されています。

2. ネットワーク

AWSが提供するWell-Architectedのアプローチに従ってAWS上で.NET 5のgRPCソリューションを設計することができます。新たに追加されたApplication Load BalancerのgRPCへの対応を活用すれば、gRPCの可能性を最大限引き出せます。現時点でgRPC通信におけるヘルスチェックと完全なステータスコードレポーティング機能を提供する主要クラウドサービスはAWSのみです。AWS上で.NET 5とgRPCを用いたアプリケーションを実装することによって、より高性能で運用しやすいマイクロサービスアーキテクチャーやモバイルデバイスとの通信が可能になります。

Application Load Balancer with gRPC Health Checks

上記の図で表しているように、Application Load BalancerはエンドツーエンドでのHTTP/2トラフィックをサポートしており、クライアントとEC2インスタンスがgRPCで通信することを可能にしています。

3. 開発者ツール

AWS SDK for .NETはすべてのAWSサービスに対して均一なコーディングパターンを利用できるように設計されており、NuGetによりライブラリが配布されています。最新バージョンのSDKライブラリは.NET 5と互換性のある.NET Standard 2.0を利用しています。AWS Tools for PowerShellは、ユーザーがコマンドラインやスクリプトを通じて各AWSサービスやリソースを操作できるように支援します。開発者向けには、.NET 5アプリケーションとAWSサービスのコマンドライン設定ツールとして.NET CLI拡張も利用可能です。既にAzure DevOpsを利用しているお客様の場合は、AWS Toolkit for Azure DevOpsを利用すれば.NET 5アプリケーションをAWSにデプロイする最終ステップが楽になります。いずれのツールにおいても、直近追加されたこれらの新機能を活用するためにはまず最新バージョンにアップデートしてください。

.NET 5アプリケーションコードの変更を自動的にビルド・テスト・デプロイするためには、柔軟なCI/CDワークフローのオーケストレーション機能を提供するAWS CodePipelineを利用することができます。ソースコード管理にはAWS CodeCommitまたはGitHubのようなサードパーティのソリューションを用いることができ、同じようにビルドとテストにもAWS CodeBuildまたはJenkinsのようなサードパーティのビルドサービスが利用可能です。AWS CodeBuildの.NET 5向けサポートも現在準備中です※。

※注:原文ブログ公開時の状況です。2021年1月21日の時点では、既にサポートが開始されています。

.NET 5アプリケーションが稼働しているWindowsまたはLinuxインスタンスにおいてはCloudWatch Application Insightsによる監視が可能です。AWS X-Rayの開発チームはAWS Distro for OpenTelemetry開発の一環としてOpenTelemetry .NETオープンソースプロジェクトに参加しており、現在計画されているOpenTelemetryとの統合の中で.NET 5アプリケーションの分散トレーシング機能も提供される予定です。

アプリケーションの内部では.NET 5と互換性のある様々なサービスを取り入れ、さらに開発スピードを加速させることもできます。機密データの保護にはAWS Systems ManagerパラメータストアAWS Secrets Managerが役立ちます。AWS Secrets Manager Caching Client for .NETは近日中に.NET 5をサポートする予定です。

4. データベース

.NET 5アプリケーションを開発している皆様は、ユースケースに沿ってAWSが提供するどのデータベースエンジン(リレーショナルまたは非リレーショナル)もご利用いただくことができます。高速で柔軟なNoSQLデータベースを利用するために、AWS SDK for .NETはAmazon DynamoDBへアクセスするための複数のプログラミングモデルを提供しています。Amazon Quantum Ledger Database(QLDB)は透過的でイミュータブル、かつ暗号的に検証可能なトランザクションログを提供するマネージド型台帳専用データベースで、アクセス用のクライアントは.NET 5と互換性があります。AWS上のリレーショナルデータベース内のデータにアクセスするには、Entity Framework(EF) Coreや他の好きな.NETデータアクセスライブラリを利用できます。EF Coreプロバイダーからはセルフホスト型のデータベース、またはAmazon AuroraAmazon RDS for SQL ServerといったAWSのマネージド型データベースエンジンどちらにもアクセスすることができます。Amazon ElastiCache内のRedisインメモリデータストアに対しても、好きなライブラリを利用できます。

物語はまだ始まったばかりです

今後もAWSのソリューションアーキテクト・デベロッパーアドボケイト・ソフトウェア開発者が、引き続き「なぜ.NET 5とAWSはモダンなアプリケーションの開発のために最適な組み合わせなのか」について、様々な情報を共有していきたいと思います。AWSでの.NET開発についてもっと詳しく知りたい方は、「Build Modern .NET Applications with AWS」をぜひご確認ください。

翻訳はソリューションアーキテクトRyan Choが担当しました。原文はこちらです。