Amazon Web Services ブログ

AWS での .NET8 サポート

この記事は、James Eastham、Norm Johanson、Ulili Nhaga が寄稿しました。日本語訳はソリューションアーキテクトの遠藤宣嗣が翻訳しました。原文はこちらです。

はじめに

.NET 8 は、2023 年 11 月にリリースされたクロスプラットフォーム .NET の最新の長期サポート (LTS) バージョンです。.NET 8 にはパフォーマンスの改善、コンテナの拡張機能、C# 言語の簡略化された構文、フルスタック Web アプリケーションのための Blazor サポート、ネイティブ Ahead of Time コンパイル  (Native AOT) の ASP.NET Core での部分サポートが含まれています。この記事では、.NET 8 をサポートする AWS コンピューティングサービスとツールを確認し、開発者向けのリソースを紹介します。

.NET の古いバージョンを実行している場合、.NET 7 と .NET 6 の両方が 2024 年にサポート終了となることに注意してください。Microsoft の .NET サポートポリシー によると、.NET 7 のサポートは 2024 年 5 月 14 日に、.NET 6 のサポートは 2024 年 11 月 12 日に終了します。.NET 8 のサポートは 2026 年 11 月 10 日までです。

コンピューティング サービス

ワークロードがセルフマネージド型のもの、マネージドサービス上で実行されるもの、コンテナを使用するもの、サーバレスなものに関わらず、AWS 上で .NET 8 を使用できます。.NET 8 は現在、Amazon Elastic Compute Cloud (Amazon EC2)、AWS Elastic BeanstalkAmazon Elastic Container Service (Amazon ECS)、Amazon Elastic Kubernetes Service (Amazon EKS)、AWS App RunnerAWS Lambda 上で実行できます。

Amazon EC2

Amazon EC2 は、プロセッサ、ストレージ、ネットワーキングの選択してインフラストラクチャを細かく管理できる、広範囲で高度なコンピューティング機能を提供します。お客様は 400 を超える インスタンスタイプ で .NET 8 をインストールできます。

EC2 インスタンスに .NET 8 をインストールするには、インスタンスの起動時にユーザーデータコマンドを指定します。
次の例は、Amazon Linux 2023 インスタンスに .NET 8 をインストールする方法を示しています。

#!/bin/bash 
 sudo rpm  --import   https://packages.microsoft.com/keys/microsoft.asc 
 sudo wget  -O  /etc/yum.repos.d/microsoft-prod.repo https://packages.microsoft.com/config/fedora/37/prod.repo 
 sudo dnf install  -y dotnet-sdk-8.0 
 dotnet  --version  > /tmp/dotnet-version

Linux への.NET のインストール方法は、https://learn.microsoft.com/ja-jp/dotnet/core/install/linux#packages で確認できます。.NET のインストールスクリプトは、https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-scripted-manual#scripted-install で入手できます。

AWS Systems Manager サービスの自動化機能を使用して、オートメーションドキュメントを使って .NET ランタイムを自動的にインストールできます。また、 EC2 Image Builder サービスを使用して、.NET ランタイムがプリインストールされた EC2 イメージを事前に作成できます。

AWS Elastic Beanstalk

Elastic Beanstalk は、アプリケーションを実行するインフラストラクチャーを意識することなく、AWS クラウドでアプリケーションをすばやくデプロイおよび管理できるマネージドサービスです。EC2 リソースは AWS アカウントですべて表示され、それらにアクセスできます。

2023/12/05 のプラットフォームアップデートより、Elastic Beanstalk Windows が .NET 8 をサポートするようになりました。

Elastic Beanstalk Linux はこの記事を書いている時点で .NET 6 ランタイムをサポートしていますが、次のいずれかのオプションを使用して .NET 8 をデプロイできます: .NET Core on Linux プラットフォーム用のアプリケーションのバンドル (AWS) および .NET アプリケーションの発行の概要 (Microsoft) で説明されている自己完結型アプリケーションを提供できます。Elastic Beanstalk Linux で .NET 8 を使用するもう 1 つの方法は、Docker コンテナからのデプロイです。

AWS Lambda

AWS Lambda は .NET 8 ランタイムをサポートしています。AWS Lambda コンソールには、図 1 に示すように、.NET 8 (C#/F#/PowerShell) のランタイムオプションがあります。.NET 8 の Lambda 関数の作成と更新、およびネイティブ AOT の使用の詳細については、AWS Lambda の .NET 8 ランタイムのご紹介(英文)を参照してください。AWS Lambda で .NET 8 アプリケーションを実行するその他の方法もあります。カスタムランタイムを作成したり、コンテナーをデプロイしたり、.NET 8 のネイティブ AOT コンパイルを使用してネイティブコードを Lambda に公開することができます。

.NET 8 option in AWS Lambda console

図1: AWS Lambda コンソールの .NET 8 オプション

ビデオ: .NET 8 ネイティブ AOT Lambda 関数を構築する最もシンプルな方法

ブログ: .NET 7 を使用して AWS Lambda でサーバーレスの .NET アプリケーションを構築する

AWS .NET Lambda パッケージが .NET 8 をターゲットに更新され、ネイティブ AOT の警告に対処するようになりました。これにより、ネイティブ AOT Lambda 関数でそれらをより簡単かつ安全に使用できるようになります。

.NET Lambda アノテーション フレームワークは、プログラミング モデルを簡素化し、C# でより自然に .NET Lambda 関数を記述できるようにします。カスタム ランタイムやネイティブ Ahead of Time コンパイル (Native AOT) を使用する場合、このフレームワークにより、 Lambda ランタイムを手動でブートストラップする必要がなくなり、Main メソッドを自動生成できます。詳細は、.NET Lambda アノテーション設計 – Main の自動生成 を参照してください。

コンテナ

Windows または Linux コンテナ上で実行される .NET アプリケーションを、Amazon Elastic Container Service (ECS) または Amazon Elastic Kubernetes Service (EKS) にデプロイできます。AWS Fargateは、コンテナインフラストラクチャを自分で管理する必要なく、ECS および EKS コンテナのライフサイクルを実行および管理するために使用できるサービスです。

AWS App Runner は、コンテナ化された Web アプリケーションや API をすぐにデプロイできる、フルマネージドなサービスです。トラフィックのニーズに応じて自動的にスケールアップ/ダウンします。.NET 8 アプリケーションで使用するには、.NET 8 アプリケーションのイメージを Amazon Elastic Container Registry (ECR) にアップロードし、ソースイメージ のサポートを利用して、AWS App Runner がアプリケーションの起動、実行、スケール、ロードバランシングを設定します。

.NET 8 アプリケーションをコンテナ内に Elastic Beanstalk にデプロイできます。詳細は、Docker コンテナからの Elastic Beanstalk アプリケーションのデプロイを参照してください。

セキュリティと診断

AWS X-Ray

AWS X-Rayは、マイクロサービスアーキテクチャを使用して構築された分散アプリケーションなどを分析およびデバッグするのに役立ちます。.NET 8 アプリケーションは、.NET 用 AWS X-Ray SDKOpenTelemetry .NET 用 AWS ディストリビューションを使用して、AWS X-Ray と統合できます。 現時点では、ネイティブ AOT .NET アプリケーションで AWS X-Ray を使用することはおすすめしません。

ツール、ライブラリ、SDK

AWS で古いバージョンの .NET を使用していた場合は、開発マシンにインストールされている AWS ツールを更新することをおすすめします。

.NET 用 AWS SDK

AWS SDK for .NET を使用すると、.NET 開発者は AWS サービスをアプリケーションコードに親しみやすく一貫した方法で統合できます。バージョン 3.7.300 から、SDK に .NET 8 ターゲットフレームワークが追加され、すべてのトリミング警告に対処することでネイティブ AOT との互換性が実現しました。このライブラリは NuGet から利用できます。開発者ーガイドの AWS SDK for .NET の使用方法をご覧ください。

AWS CodeBuild

AWS CodeBuild は、開発者がソースコードから自動的にアプリケーションをビルドできるように支援する、フルマネージドなサービスです。CodeBuild サービスでは、ビルドしているアプリケーションのニーズに合わせて、ビルド環境をカスタマイズできます。これには、追加の .NET ランタイムをインストールする機能が含まれます。アプリケーションの buildspec.yml ファイルに次のスニペットを追加することで、.NET 8 アプリケーションのビルドをサポートできます。

  install:
    commands:
      - curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel 8.0 

これにより、CodeBuild のインストールフェーズの一部として、.NET 8 SDK が自動的にダウンロードおよびインストールされます。

AWS Deploy Tool for .NET

AWS Deploy Tool for .NET コマンドラインインターフェース (CLI) は、.NET アプリケーションのコンピューティング推奨事項を提供し、数ステップで AWS にデプロイする対話型アシスタントです。Deploy Tool は、Amazon ECS や AWS App Runner などのコンテナベースのサービス用にコンテナイメージを作成したり、Elastic Beanstalk で .NET の自己完結型パブリッシングを使用することにより、.NET 8 アプリケーションをサポートします。

AWS Toolkit for Visual Studio

AWS Toolkit for Visual Studio は、Windows の Microsoft Visual Studio 向けの拡張機能で、開発者が Amazon Web Services を使用して .NET アプリケーションをより簡単に開発、デバッグ、デプロイできるようにします。Visual Studio 2022 は .NET 8 開発をサポートしています。

.NET 8 project in Visual Studio

図2: Visual Studio の .NET 8プロジェクト

Toolkit の Publish to AWS 機能は、.NET 用の AWS Deploy Tool と統合されており、Visual Studio からさまざまな AWS サービスに .NET 8 プロジェクトをデプロイできます。ASP.NET Core プロジェクトを Amazon ECS、AWS App Runner、Elastic Beanstalk Windows、Elastic Beanstalk Linux、または Amazon Elastic Container Registry (Amazon ECR) にデプロイできます。

Publishing a .NET 8 Core project to AWS with the Toolkit for Visual Studio

図3: Toolkit for Visual Studio を使用した .NET 8 ASP.NET Core プロジェクトの AWS への公開

Visual Studio 2022 用の AWS Toolkit は、Visual Studio Marketplace からダウンロードできます。 すでに Visual Studio 用の AWS Toolkit を使用している場合は、Visual Studio の 拡張機能の管理 > 更新の確認 から最新バージョンにアップグレードすることをおすすめします。

.NET モダナイゼーションツール

AWS は、アーキテクト、開発者、IT プロフェッショナルが .NET ワークロードをモダナイズするのに役立つ支援ツールを提供しています。現在、次の AWS モダナイゼーションツールが .NET 8 をサポートしています:

AWS App2Container (A2C) は、アプリケーションをコンテナ化するコマンドラインツールです。 正しい依存関係、ネットワーク構成、Amazon ECS または Amazon EKS のデプロイ手順を使用して構成されたコンテナイメージを自動的に生成します。 A2C は現在 .NET 8 ランタイムバージョンを検出できるようになり、対応するランタイムベースイメージを使用してアプリケーションをコンテナ化できます。

AWS Microservice Extractor for .NET は、人工知能とヒューリスティックを使用してモノリシックコードを評価、可視化し、マイクロサービスの候補を推奨するアドバイザーとして機能する支援ツールです。また、マイクロサービスの抽出を簡素化するロボットビルダーとしても機能します。Microservice Extractor は現在、.NET 8 アプリケーションの解析、グルーピング、抽出をサポートしています。統合されたストラングラーフィグポーティング機能により、数百のプロジェクトと数千のクラスで構成される大規模な .NET Framework ベースのアプリケーションを管理可能なグループに分割し、それらを直接 .NET 8 に移植することもできます。

Migration Hub Strategy Recommendations (MHSR) は、アプリケーションの実行可能なトランスフォーメーションパスの戦略的な推奨を提供することで、移行とモダナイゼーションの取り組みの計画を支援します。MHSR は現在 .NET 8 アプリケーションを検出し、推奨を提供できるようになりました。

AWS Toolkit for .NET Refactoring は、レガシーな .NET アプリケーションを AWS 上のクラウドベースの代替手段にリファクタリングするのに役立つ Visual Studio 拡張機能です。
互換性アセスメントレポートを提供し、コードの移植を支援します。.NET Refactoring Toolkit は現在、アセスメント、移植、テストデプロイの対象として .NET 8 をターゲットにできます。

AWS で .NET ワークロードの計画、移行、モダナイゼーションを行う際、これらの支援ツールを使用することで .NET 8 を最大限活用できます。.NET のモダナイゼーションのユースケースとツールの詳細は、AWS 上の .NET 開発者センターの「AWS で .NET ワークロードをモダナイズ」をご覧ください。

まとめ

AWS のさまざまなコンピューティングサービス上で、今すぐ .NET 8 ワークロードを実行できます。.NET 用 SDK、複数の開発者向けツール、複数の .NET モダナイゼーションツールも .NET 8 をサポートしています。.NET 6 または .NET 7 上で既存の AWS ワークロードがある場合は、サポート終了に至る前に .NET 8 へのアップグレードを積極的に行うことをおすすめします。AWS の .NET 関連の最新情報については、AWS の .NET デベロッパーセンターをご覧ください。

投稿者について

David Pallmann

David Pallmann AWS の EC2 チームのシニアプロダクトマネージャーです。彼のミッションは、AWS を .NET 開発者にとってワールドクラスのエクスペリエンスにすることです。David は以前、エンジニアリング、コンサルティング、プロダクト、テクニカルマネージャの役割を担っていました。彼は WCF に取り組み、後に最初の .NET ベースのエンタープライズサービスバスである Neuron ESB を開発しました。X では @davidpallmann でフォローしてください。