.NET アプリケーションの移行 - AWS 規範ガイダンス

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

.NET アプリケーションの移行

.NET アプリケーションを に移行 AWS することで、エラスティックスケーリング機能を備えた高可用性ワークロードを作成し、運用オーバーヘッドを削減し、差別化する価値に焦点を当てることでビジネスの俊敏性を向上させることができます。

このセクションでは、 で .NET アプリケーションをホストするためのさまざまなオプションに焦点を当てます AWS。VM を使用するか、 などのマネージドソリューションを使用するAWS Elastic Beanstalkか、コードをコンテナ化するか、コードをマイクロサービスベースまたはサーバーレスベースのアーキテクチャにリファクタリングするかを選択できます。

評価

.NET ワークロードの移行パスの選択は、次の重要な要素に依存します。

  • 使用されている .NET バージョンを確認する — Microsoft がサポートしている.NET 実装には、.NET Framework (1.0—4.8) と .NET (.NET Core 1.0—3.1 と .NET 5 以降) の 2 種類があります。どちらも同じコンポーネントの多くを共有しており、異なる .NET プログラミング言語 (C#、F#、VB.NET など) を使用して記述されたアプリケーションコードを実行できます。.NET Framework は Windows 上で実行されますが、新しい .NET はマルチプラットフォームであるため、移行戦略とホスティングサービスの選択は、使用されるランタイムによって異なります。.NET Framework では、Windows OS でホストすることも、新しい.NET を使用するようにコードをリファクタリングすることもできます。新しい.NET は、Linux OS ベースのサービスでもホストできます。.NET Framework ベースのワークロードをモダナイズする場合、Porting Assistant for .NET または AWS Toolkit for .NET リファクタリングを使用してコードをスキャンし、互換性評価レポートを生成できます。プロジェクトで参照されている互換性のない .NET Framework API があるかどうかを確認することで、移行プロジェクトの複雑性を計画し、新しいランタイムを使用するようにコードをリファクタリングするかどうか、いつリファクタリングするかを決定できます。

  • 現在のデプロイの確認 — 現在移行されているワークロードに、同じワークロードをクラウドにデプロイするように更新できる既存の CI/CD パイプラインがあるかどうかを確認します。既存のビルドおよびデプロイパイプラインを使用すると、ワークロードの構築、構成、デプロイに必要な手順が自動化され、アプリケーションをクラウドにデプロイするのにかかる時間を短縮できます。

  • ロードマップの見直し — プロジェクトの現在の状態によっては、アプリケーションのリアーキテクトや再設計をすでに計画している場合があります。モダナイズを行う際には、製品ロードマップを考慮に入れる必要があります。たとえば、既存のコードをコンテナ化したり、モノリシックアーキテクチャをマイクロサービスにリファクタリングしたりすることは、製品ロードマップの一部であり、他の開発努力と連動するのが理想的です。

準備

.NET ワークロードを移行する際に考慮すべき移行パスは 3 つあります AWS。既存のコードベースの複雑さ、移行に割り当てられる時間、移行作業をサポートするために割り当てられたチームの規模に応じて、さまざまなオプションを選択できます。モダナイゼーションを移行の一環として検討する場合、製品のロードマップに合わせることがベストプラクティスです。

  • リホスト (リフトアンドシフト) – 移行が速く、変更がほとんどまたはまったくない場合 AWS 、このアプローチを選択できます。ASP.NET ベースのウェブサイトを Amazon EC2 インスタンスで実行されているインターネットインフォメーションサービス (IIS) にリホストできます。デスクトップベースのアプリケーション (Windows Presentation Foundation、Web Forms、.NET MAUI など) を、Amazon AppStream 2.0Amazon WorkSpaces などのエンドユーザー コンピューティング プラットフォームの 1 つにリホストできます。

  • リプラットフォーム — リプラットフォームが最適であるケースは、コードを変更せずにマネージドサービスを使用してアプリケーションをホストしたいが、インストール、パッチ適用、アップグレード、インスタンス管理などの差別化されていない面倒な作業をオフロードすることで運用上のオーバーヘッドを削減したい場合です。この戦略は、コンテナベースのワークロードに移行したいチームにも適しています。既存のアプリケーションを Elastic Beanstalk にリプラットフォームすることも、Amazon ECSAmazon EKS、または でホストされている Docker コンテナを使用することもできますAWS App Runner

  • リファクタリング — AWS クラウドネイティブサービスを使用して、運用オーバーヘッドを削減し、スケーリング、高可用性、ディザスタリカバリを向上させるコードとアーキテクチャの変更に時間と労力を費やすことができる場合は、このアプローチを選択します。リファクタリングでは、既存の .NET フレームワークアプリケーションを .NET (以前の.NET Core) に移植したり、既存のコードベースをモダナイズしてクラウドでの動作を向上したりして、コードベースをモダナイズする必要があります。を使用してAWS SDK for .NET、.NET コード内から多くの AWS クラウドサービスを呼び出すことができます。Porting Assistant for .NET や などのツールを使用して、コードベースを .NET Framework から .NET に移植し、モノリシックアプリケーションをマイクロサービスに分割AWS Microservice Extractor for .NETできます。既存の .NET ワークロードを で実行するようにリファクタリングすることでAWS Lambda、サーバーレスコンピューティングを使用してインフラストラクチャのプロビジョニングと管理を回避できます。

移行

.NET ワークロードの移行手順は、評価段階で選択した移行パスとアプリケーションの種類によって異なります。

.NET アプリケーションをリホストする

コードを変更せずにアプリケーションを移行したいが、クラウドでの自動スケーリング、負荷分散、伸縮性のメリットを利用したい場合は、この移行パスを選択してください。Windows ベースのウェブサイトの場合、リホストは通常、インターネットインフォメーションサービス (IIS) でそれらを実行することを意味します AWS。デスクトップベースのアプリケーションでは、アプリケーションをインストールして、ユーザーが外部からアプリケーションに接続できるようにする必要があります。

でのインターネットインフォメーションサービス AWS

Internet Information Services (IIS) は、Windows オペレーティングシステム上で動作する Microsoft Web サーバーで、Web サイトや Web サービスのホストに使用されます。IIS は、Windows Server を実行している任意の Amazon EC2 インスタンスにインストールできます。IIS を有効にして設定したら、オンプレミス環境と同じデプロイメカニズムを使用して ASP.NET ウェブサイトとサービスをデプロイできます。

EC2 Windows インスタンスで IIS をホストする場合は、ワークロードと HADR のニーズに応じて、ロードバランシング、Auto Scaling グループ、マルチ AZ 配置を使用して AWS Well-Architected フレームワークに従うことが重要です。IIS リソースを実行する Windows Server ワークロードのサイズ設定、設定、デプロイをガイドAWS Launch Wizardするため、 を使用することをお勧めします AWS。Launch Wizard は、新しく作成された VPC または既存の VPC に必要なコンピューティング、ネットワーク、ストレージコンポーネントを備えた 2 つのアベイラビリティーゾーンにまたがる高可用性アーキテクチャをデプロイします。

でのデスクトップアプリケーションのホスティング AWS

多くのクライアントは、Windows ベースのシッククライアントアプリケーションにアクセスする必要があります。次の 3 つのプラットフォームから選択できます。

  • Amazon EC2 — ユーザーが Microsoft リモートデスクトップを使用して Windows サーバーベースの環境に接続できるようにする場合、このオプションを選択します。このオプションでは、オペレーティングシステムにパッチを適用し、メンテナンスを行う必要があります。また、ユーザー用のリモートデスクトップサービスクライアントアクセスライセンス (RDS CAL) と有効なソフトウェアアシュアランス (SA) を追加購入する必要があります。詳細については、 AWS ドキュメントの Microsoft Licensing on AWS を参照してください。

  • Amazon WorkSpaces — ユーザー向けにフルマネージド型の仮想デスクトップインフラストラクチャ (VDI) が必要な場合は、このオプションを選択してください。WorkSpaces を使用すると、ユーザーに永続的な Windows デスクトップエクスペリエンスを提供できます。また、カスタムイメージを使用して WorkSpaces 環境をカスタマイズしたり、 を使用して .NET アプリケーションを WorkSpaces 環境にAWS Systems Manager配信したりすることもできます。ユーザーは、ブラウザまたは Amazon WorkSpaces クライアントを使用して接続できます。

  • Amazon AppStream 2.0 — 任意の場所からアプリケーションおよび非永続デスクトップへの安全で信頼性が高く、スケーラブルなアクセスを提供するには、このオプションを選択します。AppStream 2.0 を使用すると、ユーザーがウェブから .NET アプリケーションにアクセスできるようになります。既存の RDS CAL とアクティブな SA がすでにある場合は、ライセンスモビリティを使用することで AppStream 2.0 でそれらのライセンスを使用できます。

リプラットフォーム

リプラットフォームでは、コードをほとんどまたはまったく変更せずにホスティング環境を変更します。運用上のオーバーヘッドを減らし、クラウドの機能とサービスを活用するには、この戦略を選択します。

AWS Elastic Beanstalk

AWS Elastic Beanstalk を使用して、.NET Framework ワークロードを再プラットフォームできます。ASP.NET ベースまたは ASP.NET Core ベースのアプリケーションをパッケージ化すると、それらのアプリケーションを実行するインフラストラクチャについて知る AWS ことなく、 でアプリケーションをすばやくデプロイおよび管理できます。これによって、選択肢やコントロールを制限することなく、複雑さを緩和できます。アプリケーションをアップロードするだけで、Elastic Beanstalk は容量のプロビジョニング、ロードバランシング、スケーリング、およびアプリケーション状態モニタリングといった詳細を自動的に処理します。

詳細については、以下のリソースを参照してください。

既存のアプリケーションをコンテナ化する

Amazon ECS または Amazon EKS を使用して、Docker ベースのコンテナ化されたアプリケーションをホストできます。 は両方のサービス AWS を管理します。この 2 つのどちらを選択するかは、既存の知識と好みによります。どちらのオプションも、Linux ベースのコンテナまたは Windows ベースのコンテナのどちらでも実行できます。

詳細については、以下のリソースを参照してください。

.NET ベースのアプリケーションのコンテナ化は、使用する .NET ランタイムによって異なります。以下の点を考慮してください。

  • .NET Framework ベースのアプリケーションを Windows コンテナ上で実行 — 既存のアプリケーションに Docker サポートを追加するには、アプリケーションをコンテナ化する方法の概要を記述した Docker ファイルを作成します。を使用してAWS App2Container、既存の .NET Framework ベースのアプリケーションを簡単にコンテナ化して に移行できます AWS。App2Container は IIS サーバーをスキャンして必要なファイルを特定し、ターゲットアプリケーションを抽出して Docker イメージを作成します。App2Container を使用して、 でアプリケーションをホストするために必要なデプロイアーティファクトを作成することもできます AWS クラウド。

  • .NET または .NET Core – Amazon ECS または Amazon EKS で新しい .NET ベースのウェブアプリケーションを実行するだけでなく、 を使用することもできますAWS App Runner。App Runner は、コードまたはコンテナー イメージを実行し、負荷分散、自動スケーリング、ログ、証明書、およびネットワークを管理する、サーバーレスのフルマネージドソリューションです。

既存のコードのリファクタリング/リアーキテクト

アプリケーションの現在の環境で達成が難しい機能、スケール、またはパフォーマンスを追加する必要がある強力なビジネスニーズがある場合は、このオプションを選択します。アプリケーションのロードマップに応じて、最新のフレームワークやクラウドネイティブサービスを使用するようにコードを変更するか、クラウドでより適切に実行できるようにコードを再構築するかを選択できます。

最初に利用できるリファクタリングのオプションは、既存の.NET Framework アプリケーションを.NET に移行することです。.NET に移行すると、Windows ではなく Linux で実行できるというメリットが得られます。これにより、総ライセンスコストが削減され、最新のフレームワークや、.NET プログラミング言語の最新バージョンを利用できるようになります。

AWS SDK for .NET

AWS SDK for .NET は、.NET 開発者にとって一貫性があり使い慣れたライブラリのセット AWS のサービス を提供することで、 の使用を簡素化します。 AWS SDK はクロスプラットフォームサポートを提供し、NuGet を使用して配布されます。開発者は AWS SDK を使用して .NET コードからクラウドサービスを簡単に呼び出し、アプリケーションのストレージ、キューイング、認証、および設定の要件を満たすことができます。

.NET Framework アプリケーションをモダナイズする

Porting Assistant for .NET を使用すると、.NET Framework から移行できます。Porting Assistant for .NET はコードファイルをスキャンし、アプリケーションポートフォリオの移行ロードマップの計画に役立つレポートを作成します。Porting Assistant for .NET は、互換性のない .NET Core APIs とパッケージを識別し、既知の置き換えを見つけることで、移植のオーバーヘッドを減らすこともできます。AWS Toolkit for .NET リファクタリングは、開発者がレガシー .NET アプリケーションをクラウドベースの代替手段にリファクタリングするために必要な時間と労力を削減する Visual Studio 拡張機能です AWS。アプリケーションのソースコードを評価して、.NET Core への移植などのモダナイゼーションパスを推奨し、Windows 固有の IIS および Active Directory の依存関係設定を識別し、可能であればコード変更を実行して Linux との互換性を有効にし、リファクタリングされたアプリケーションの検証を支援します AWS のサービス。.NET Framework アプリケーションを .NET に移行すると、ARM64 ベースの Graviton プロセッサ上で実行できるようになり、費用対性能比も向上します。詳細については、GitHub の Graviton 上の .NETGraviton2および Workshop Studio ドキュメントの「Graviton ベースのサービスによるコストの最適化」のコンテナを参照してください。 AWS AWS

モノリスからマイクロサービスへ

多くの開発チームは、既存のモノリシックアプリケーションをマイクロサービスに再構築したいと考えています。マイクロサービスベースのアーキテクチャに移行することで、開発チームは開発の俊敏性を高め、コンピューティングコストを削減し、サービスを個別にスケールして、デプロイ時間を短縮できます。 は、古いモノリシックアプリケーションをマイクロサービスベースのアーキテクチャにリファクタリングするプロセスAWS Microservice Extractor for .NETを簡素化します。コンポーネントを特定し、機能をグループ化することにより、開発チームは、.NET Framework モノリシックアプリケーションから機能を .NET サービスに段階的に抽出できます。

サーバーレスアプリケーションへのリファクタリング

AWS Lambda は、サーバーレスのイベント駆動型コンピューティングサービスであり、サーバーのプロビジョニングや管理を行わずに、実質的にあらゆるタイプのアプリケーションやバックエンドサービスに対してコードを実行できます。.NET と Lambda を使用して、既存のアプリケーションからロジックを抽出し、必要に応じて自動的にスケーリングするイベントベースのサーバーレスワークフローを作成できます。Lambda の一般的な使用例には、ファイル処理、分析、ウェブサイト、モバイルアプリケーションなど、さまざまなスケーリングニーズで数秒または数分間実行されるイベント駆動型ワークロードがあります。詳細については、Lambda ドキュメントの「C# を使用した Lambda 関数の構築」を参照してください。

追加リソース