

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ASP.NET ウェブフォームアプリケーションを AWS で最新化
<a name="modernize-asp-net-web-forms-applications-on-aws"></a>

*Amazon Web Services、Vijai Anand Ramalingam、Sreelaxmi Pai*

## 概要
<a name="modernize-asp-net-web-forms-applications-on-aws-summary"></a>

このパターンでは、従来のモノリス型の ASP.NET Web フォームアプリケーションを AWS の ASP.NET Core に移行してモダナイズする手順を説明しています。

ASP.NET ウェブフォームアプリケーションを ASP.NET Core に移行すると、Linux のパフォーマンスの利点、コスト削減、Linuxの強固なエコシステムを活用できます。ただし、これは手作業による多大な労力がかかる可能性があります。このパターンでは、レガシーアプリケーションは段階的なアプローチを使用して段階的に最新化され、その後 AWS クラウドにコンテナ化されます。

ショッピングカートのレガシー全体のアプリケーションを検討します。ASP.NET Web フォームアプリケーションとして作成され、コードビハインド (`aspx.cs`) ファイルを含む［.aspx］ページで構成されていると仮定してみましょう。最新化プロセスには、3 つのステップがあります。

1. 適切な分解パターンを使用して、モノリスをマイクロサービスに分割します。詳細については、AWS 規範ガイダンスのウェブサイトにある「[モノリスをマイクロサービスに分解する](https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-decomposing-monoliths/)」ガイドを参照してください。

1. レガシー ASP.NET ウェブフォーム (.NET フレームワーク) アプリケーションを.NET 5 以降の ASP.NET Core に移行します。このパターンでは、Porting Assistant for .NET でASP.NET Web フォームアプリケーションをスキャンし、ASP.NET Core との非互換性を確認します。これにより、手動での移行作業が軽減されます。

1. React を使用して Web Forms UI layer を再開発します。このパターンには UI の再開発が含まれていません。手順については、「React のドキュメント」の「[React アプリを作成](https://reactjs.org/docs/create-a-new-react-app.html)」を参照してください。

1. ウェブフォームのコードビハインドファイル (ビジネスインターフェイス) を ASP.NET Core web API として再開発します。このパターンでは、NDepend レポートで必要なファイルと依存関係を識別しやすくなります。

1. Porting Assistant for .NET で、レガシーアプリケーション内のビジネスロジックやデータアクセスなどの共有プロジェクトや共通プロジェクトを .NET 5 以降にアップグレードします。 

1. AWS サービスを追加してアプリケーションを補完します。例えば、「[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)」を使用して、アプリケーションのログのモニタリング、保存、アクセスを行うことができます。また、「[AWS Systems Manager](https://aws.amazon.com/systems-manager/)」を使用して、アプリケーションの設定を保存できます。

1. 最新のASP.NET Core Applicationsをコンテナ化します。このパターンでは、Visual Studio の Linux を対象とする Docker ファイルを作成し、Docker Desktop でローカルでテストします。このステップは、レガシーアプリケーションがオンプレミスまたは Amazon Elastic Compute Cloud (Amazon EC2) Windows インスタンスで既に実行されていることを前提としています。詳細については、「[Amazon EC2 Linux インスタンスで ASP.NET Core web API Docker コンテナを実行する」というパターン](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)」を参照してください。

1. 最新の ASP.NET Core アプリケーションを、Amazon Elastic Container Service (Amazon ECS) にデプロイします。このパターンはデプロイステップには適用されません。手順については、「[Amazon ECS Workshop](https://ecsworkshop.com/)」を参照してください。

**注記**  
このパターンには、UI 開発、データベースの近代化、コンテナデプロイのステップは含まれていません。

## 前提条件と制限事項
<a name="modernize-asp-net-web-forms-applications-on-aws-prereqs"></a>

**前提条件**
+ 「[Visual Studio](https://visualstudio.microsoft.com/downloads/)」または「[Visual Studio Code](https://code.visualstudio.com/download)」をダウンロードし、インストールします。
+ AWS マネジメントコンソールと AWS コマンドラインインターフェイス (AWS CLI) バージョン 2 で AWS アカウントにアクセスします。(「[AWS CLI の設定手順](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。)
+ AWS Toolkit for Visual Studio (「[セットアップ手順](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html)」をを参照)。
+ 「[ダウンロード済み](https://www.docker.com/products/docker-desktop)」でインストール済みのDocker デスクトップ。
+ 「[ダウンロード済み](https://download.visualstudio.microsoft.com/download/pr/4263dc3b-dc67-4f11-8d46-cc0ae86a232e/66782bbd04c53651f730b2e30a873f18/dotnet-sdk-5.0.203-win-x64.exe)」でインストール済みの .NET SDK、。
+ 「[ダウンロード済み](https://www.ndepend.com/download)」でインストール済みの NDepend ツール。Visual Studio 用の NDepend 拡張機能をインストールするには、`NDepend.VisualStudioExtension.Installer` を実行します ([手順を参照](https://www.ndepend.com/docs/getting-started-with-ndepend#Part1))。ご要件に応じて、Visual Studio 2019 または 2022 を選択できます。 
+ 「[ ダウンロード済みでインストール済み ](https://aws.amazon.com/porting-assistant-dotnet/)」の Porting Assistant for .NET。

## アーキテクチャ
<a name="modernize-asp-net-web-forms-applications-on-aws-architecture"></a>

ショッピングカートアプリケーションの最新化

次の図は、従来の ASP.NET ショッピングカートアプリケーションの最新化プロセスを示しています。

![\[レガシーショッピングカートアプリケーションの最新化\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/36cda8e6-f2cb-4f1a-b37f-fa3045cc5ba1/images/4367e259-9bb3-4eb6-a54d-1c1e2dece7d4.png)


**ターゲットアーキテクチャ**

次の図は、AWS の最新のショッピングカートアプリケーションのアーキテクチャを示しています。ASP.NET Core Web API は、Amazon ECS クラスターにデプロイされます。記録と設定サービスは Amazon CloudWatch Logs と AWS Systems Manager により、提供されています。

![\[AWS 上の ASP.NET ウェブフォームアプリケーションのターゲットアーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/36cda8e6-f2cb-4f1a-b37f-fa3045cc5ba1/images/ed6d65ec-0dc9-43ab-ac07-1f172e089399.png)


## ツール
<a name="modernize-asp-net-web-forms-applications-on-aws-tools"></a>

**AWS サービス**
+ 「[Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」— Amazon Elastic Container Service (Amazon ECS) は、クラスターでコンテナの実行、停止、管理に使用される、高度にスケーラブルで高速のコンテナ管理サービスです。AWS Fargate が管理するサーバーレスインフラ上でタスクやサービスを実行できます。または、インフラストラクチャをより詳細に制御するために、管理する EC2 インスタンスのクラスターでタスクとサービスを実行できます。
+ 「[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)」— Amazon CloudWatch Logs により、使用中のすべてのシステム、アプリケーション、AWS のサービスからのログを、一元管理することができます。ログを表示したり、特定のエラーコードやパターンを検索したり、特定のフィールドに基づいてフィルタリングしたり、将来の分析のために安全にアーカイブしたりできます。
+ 「[AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)」— AWS Systems Manager は、AWS でインフラストラクチャの表示と制御に使用できる AWS サービスです。Systems Manager コンソールを使用すると、複数の AWS サービスからの運用データを表示し、AWS リソース全体の運用タスクを自動化できます。Systems Manager は、マネージドインスタンスをスキャンし、検出されるポリシー違反を報告（または是正措置を講じる）して、セキュリティとコンプライアンスを維持できます。

**ツール**
+ 「[Visual Studio](https://visualstudio.microsoft.com/)」または「[Visual Studio Code](https://code.visualstudio.com/)」— .NET アプリケーション、ウェブ APIおよびその他のプログラムを構築するためのツール。
+ 「[AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)」— AWS サービスを使用する .NET アプリケーションの開発、デバッグ、デプロイに役立つ Visual Studio の拡張機能。
+ 「[Docker Desktop](https://www.docker.com/products/docker-desktop)」— コンテナ化されたアプリケーションの構築とデプロイを簡単にするツール。
+ 「[NDepend](https://www.ndepend.com/features/)」— .NET コードの依存関係、品質問題、コード変更をモニタリングするアナライザー。
+ 「[Porting Assistant for .NET](https://aws.amazon.com/porting-assistant-dotnet/)」— .NET コードをスキャンして.NET Core との非互換性を特定し、移行作業を見積もる分析ツール。

## エピック
<a name="modernize-asp-net-web-forms-applications-on-aws-epics"></a>

### レガシーアプリケーションを .NET 5 以降のバージョンに移行
<a name="port-your-legacy-application-to-net-5-or-later-version"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| .NET Framework のレガシーアプリケーションを.NET 5 にアップグレードします。 | Porting Assistant for .NET で、従来の ASP.NET Web フォームアプリケーションを.NET 5 以降に変換できます。「[Porting Assistant for .NET のドキュメント](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-getting-started.html)」の指示に従ってください。 | アプリ開発者 | 
| NDepend レポートを生成します。 | ASP.NET Web フォームアプリケーションをマイクロサービスに分解して最新化すると、レガシーアプリケーションのすべての［.cs］ファイルが必要なくなる場合があります。NDepend を使用すると、任意のコードビハインド (.cs) ファイルのレポートを生成して、すべての呼び出し元と呼び出し先を取得できます。このレポートは、マイクロサービス内の必要なファイルのみを特定して使用するのに役立ちます。NDepend をインストールしたら (「[前提条件](#modernize-asp-net-web-forms-applications-on-aws-prereqs)」セクションを参照)、Visual Studio でレガシーアプリケーションのソリューション (.sln ファイル) を開き、次の手順に従います。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)このプロセスにより、すべての呼び出し元と呼び出し先を一覧表示するコードビハインドファイルのレポートが生成されます。ディペンデンシーグラフについて、詳細は、「[NDepend のドキュメント](https://www.ndepend.com/docs/visual-studio-dependency-graph)」を参照してください。 | アプリ開発者 | 
| 新しい .NET 5 ソリューションを作成します。 | 最新の ASP.NET Core web API 用の新しい .NET 5 (またはそれ以降) 構造を作成するには:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)プロジェクトとソリューションの作成について、詳細は、「[Visual Studio のドキュメント](https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects)」を参照してください。ソリューションを構築して機能を検証する際、NDepend が特定したファイルに加えて、ソリューションに追加するファイルをいくつか特定する場合があります。 | アプリ開発者 | 

### アプリケーションコードを更新します。
<a name="update-your-application-code"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ASP.NET Core でウェブ API を実装します。 | 従来のモノリスショッピングカートアプリケーションで特定したマイクロサービスの 1 つが*製品*だと仮定しましょう。前のエピックで*製品*用の ASP.NET Core Web API プロジェクトを新規作成しました。このステップでは、*製品*に関連するすべての Web フォーム (.aspx ページ) を識別してモダナイズします。前述の「[アーキテクチャ](#modernize-asp-net-web-forms-applications-on-aws-architecture)」セクションで説明したように、*製品*が 4 つのウェブフォームで構成されていると仮定します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)各 ウェブフォームを分析し、何らかのロジックを実行するためにデータベースに送信されるすべてのリクエストを識別し、応答を取得する必要があります。各リクエストをウェブ API エンドポイントとして実装できます。ウェブフォームを考慮すると、*製品*には以下のエンドポイントを設定できます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)前述のように、ビジネスロジック、データアクセス、共有/共通プロジェクトなど、.NET 5 にアップグレードした他のすべてのプロジェクトを再利用できます。 | アプリ開発者 | 
| Amazon CloudWatch Logs を設定します。 | 「[Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)」を使用して、アプリケーションのログのモニタリング、保存、アクセスを行うことができます。AWS SDK で Amazon CloudWatch Logs にデータを記録できます。また、「[NLog](https://www.nuget.org/packages/AWS.Logger.NLog/)」、「[Log4Net](https://www.nuget.org/packages/AWS.Logger.Log4net/)」、「[ASP.NET Core ロギングフレームワーク](https://www.nuget.org/packages/AWS.Logger.AspNetCore/)」など一般的な.NET ロギングフレームワークを使用して、.NET アプリケーションを CloudWatch Logs と統合することもできます。このステップの詳細については、ブログ記事の「[Amazon CloudWatch Logs と.NET ロギングフレームワーク](https://aws.amazon.com/blogs/developer/amazon-cloudwatch-logs-and-net-logging-frameworks/)」を参照してください。 | アプリ開発者 | 
| AWS Systems Manager Parameter Store を設定します。 | 「[AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html)」で、接続文字列などのアプリケーション設定をアプリケーションコードとは別に保存できます。NuGet パッケージ「[Amazon.Extensions.Configuration.SystemsManager](https://www.nuget.org/packages/Amazon.Extensions.Configuration.SystemsManager/)」を使用すると、アプリケーションがこれらの設定を AWS Systems Manager Parameter Store から .NET Core 設定システムにロードする方法が簡単になります。 このステップの詳細については、ブログ記事の「[AWS Systems Manager向けの.NET Core 設定](https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/)」を参照してください。 | アプリ開発者 | 

### 認証と認可の追加
<a name="add-authentication-and-authorization"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 認証には共有 Cookie を使用してください。 | 従来のモノリスアプリケーションの最新化は反復的なプロセスであり、モノリスと最新化されたバージョンが共存する必要があります。共有 Cookie を使用すると、2 つのバージョン間でシームレスな認証を実現できます。最新の ASP.NET Core アプリケーションが Cookie を検証している間、従来の ASP.NET アプリケーションは引き続きユーザーの認証情報を検証して Cookie を発行します。 手順とサンプルコードについては、「[サンプル GitHub プロジェクト](https://github.com/aws-samples/dotnet-share-auth-cookie-between-monolith-and-modernized-apps)」を参照してください。 | アプリ開発者 | 

### コンテナをローカルで構築して実行
<a name="build-and-run-the-container-locally"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Visual Studio を使用して Docker イメージを作成します。 | このステップでは、Visual Studio for .NET Core web API を使用して Docker ファイルを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)Visual Studio はお客様のプロジェクト用の Docker ファイルを作成します。サンプル Docker ファイルについては、Microsoft のウェブサイトで「[Docker 用 Visual Studio Container Tools](https://docs.microsoft.com/en-us/visualstudio/containers/overview)」を参照してください。 | アプリ開発者 | 
| Docker Desktop を使用してコンテナを構築して実行します。 | これで Docker Desktop でコンテナを構築、作成、実行できるようになりました。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html) | アプリ開発者 | 

## 関連リソース
<a name="modernize-asp-net-web-forms-applications-on-aws-resources"></a>
+ 「[Amazon EC2 Linux インスタンスで ASP.NET Core web API Docker コンテナを実行する](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)」(AWS 規範ガイダンス)
+ 「[Amazon ECS Workshop](https://ecsworkshop.com/)」
+ 「[AWS CloudFormation を使用したCodeDeploy による ECS ブルー/グリーンデプロイの実行](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)」(AWS CloudFormationドキュメント)
+ 「[NDepend で使用開始](https://www.ndepend.com/docs/getting-started-with-ndepend)」(NDepend のドキュメント)
+ 「[Porting Assistant for .NET](https://aws.amazon.com/porting-assistant-dotnet/)」

## 追加情報
<a name="modernize-asp-net-web-forms-applications-on-aws-additional"></a>

次の表は、従来のショッピングカートアプリケーションのサンプルプロジェクトと、最新の ASP.NET Core アプリケーションの同等のプロジェクトの例を示します。

レガシーソリューション：


| 
| 
| [Project name] (プロジェクト名) | プロジェクトテンプレート | Target framework | 
| --- |--- |--- |
| ビジネスインターフェイス  | クラスライブラリ  | 特定のランタイムライブラリまたは .NET Framework の最小バージョンが必要です。 | 
| BusinessLogic  | クラスライブラリ  | 特定のランタイムライブラリまたは .NET Framework の最小バージョンが必要です。 | 
| WebApplication  | ASP.NET フレームワークアプリケーション  | 特定のランタイムライブラリまたは .NET Framework の最小バージョンが必要です。 | 
| UnitTests  | NUnit Test Project  | 特定のランタイムライブラリまたは .NET Framework の最小バージョンが必要です。 | 
| 共有 -> 共通  | クラスライブラリ  | 特定のランタイムライブラリまたは .NET Framework の最小バージョンが必要です。 | 
| 共有-> フレームワーク  | クラスライブラリ  | 特定のランタイムライブラリまたは .NET Framework の最小バージョンが必要です。 | 

新しいソリューション：


| 
| 
| [Project name] (プロジェクト名) | プロジェクトテンプレート | Target framework | 
| --- |--- |--- |
| BusinessLogic  | クラスライブラリ  | .NET 5.0  | 
| <WebAPI>  | ASP.NET Core Web API  | .NET 5.0  | 
| <WebAPI>.UnitTests  | NUnit 3 Test Project  | .NET 5.0  | 
| 共有 -> 共通  | クラスライブラリ  | .NET 5.0  | 
| 共有-> フレームワーク  | クラスライブラリ  | .NET 5.0  | 