Amazon Web Services ブログ

AWS Toolkit for .NET Refactoring で.NET のモダナイゼーションを加速させる

本稿は Matt Cline による記事 Accelerate .NET modernizatioVisun with AWS Toolkit for .NET Refactoring を翻訳したものです。翻訳はソリューションアーキテクト 小杉 真一郎が担当しました。

2022 年 10 月 26 日、AWS は Visual Studio 2019 および 2022 用の拡張機能である、AWS Toolkit for .NET Refactoring の一般提供を開始することを発表しました。この拡張機能は、コスト削減、アップタイムの増加、スケーラビリティの向上といったクラウドのメリットを活用できるよう、レガシーな .NET Framework アプリケーションを最新のクラウドに最適化されたアーキテクチャに変換することを支援するものです。

企業は、クラウドを最大限に活用するために、レガシーアプリケーションをモダナイズしたいと考えています。しかし、モダナイゼーションは複雑なプロセスであり、モノリシックなアーキテクチャのリファクタリングや、Windows ワークロード固有の依存関係をクロスプラットフォームの環境に移植する方法の調査、コンテナまたはサーバーレス環境で実行するためのアプリケーション構成の更新などを伴います。さらにこのプロセス全体を通じて、開発者は継続的にテストを行い、変更点に問題が無いか検証する必要があります。

AWS Toolkit for .NET Refactoring を利用することにより、Visual Studio の中で、エンドツーエンドでモダナイゼーションの一連の作業を行うことが可能となります。この拡張機能は、レガシーな .NET Framework アプリケーションを最新の .NET (旧称:.NET Core) にリファクタリングするために、 .NET Framework アプリケーションの移植性を評価し、Linux やその他のオープンソーステクノロジー上で動作するように IIS および Active Directory 構成を変換し、アプリケーションをコンテナにパッケージ化します。また可能な場合は、NuGet パッケージを自動的にアップグレードし、IIS 固有の設定を更新して Kestrel や nginx で動作させることも出来ます。これらの機能により、レガシー .NET Framework アプリケーションのリファクタリングに必要な作業を削減することが出来ます。

さらにモダナイゼーションの各ステップにおいて、AWS 上でアプリケーションをテストし、変更を繰り返し検証することができます。アプリケーションをコンテナ化する場合は、AWS Fargate を使用してAmazon Elastic Container Service (Amazon ECS) 上で実行するためのアーティファクトを自動的に生成します。

AWS Toolkit for .NET Refactoring は、ASP.NET MVC、Web Forms、WCFをサポートし、アプケーションの評価および移植を行うことが出来ます。また TCP 接続を受け入れるすべての .NET アプリケーションは、AWS Toolkit for .NET Refactoring のテストデプロイメント機能を通じて、AWS のテスト環境にデプロイすることができます。

アーリーテストに参加して頂きました、Advanced AWS Consulting Partner である@kloia 社の Derya Sezen 氏は、次のように述べています。

“AWS Toolkit for .NET Refactoring は、リファクタリングとモダナイズの検証に役立つ情報とガイダンスを提供し、レガシーな .NETアプリケーションの刷新を目指す開発者の強い味方になっています。”

また、SourceFuse 社 のシニア・ソフトウェア・テクニカル・アーキテクトであるAnanth Deodhar 氏は、次のように語っています。

“AWS Toolkit for .NET Refactoring は、.NET ベースアプリケーションの移行やモダナイゼーションを行うツールとして、これまでの方法から大きくステップアップしています。開発者の学習コストや外部ツールへの依存はほぼなく、開発者はIDEを離れることなく問題解決に真に集中できるようになりました。”

AWS Toolkit for .NET Refactoring の使い方

AWS Toolkit for .NET Refactoring をインストールした後、Visual Studio 2019 または 2022 でプロジェクトを開きます。この拡張機能は、コンソールアプリ、Webアプリケーション、クラスライブラリなど、あらゆる種類のアプリケーションに対応しています。ここでは、標準的な ASP.NET (.NET Framework) MVC Web アプリケーションを開いています。

Visual Studio の [拡張機能] メニューで、[AWS Toolkit for .NET Refactoring] を選択し、[Get Started] を選択します。Getting Started 画面で、AWS の名前付きプロファイルか、既存のAWS CLI/SDK の資格情報を指定し、[Next] を選択します。

次にダッシュボード画面で、Webアプリケーションの評価が完了しているか確認してください。完了していなければ、[Start assessment] を選択してアセスメントを開始します。AWS Toolkit for .NET Refactoring は、アプリケーションの、ターケットとなる .NETのバージョン (.Net Core 3.1、.NET5、.NET6)との互換性を評価し、NuGetパッケージとAPIの互換性を含む評価レポートを表示します。

アプリケーションをターゲットとなる .NET のバージョンに移植するには、[Port] を選択し、[Port Solution] を選択します。移植処理の実行後に表示されるダイアログで [すべてを再読み込み] を選択して、移植されたプロジェクトを読み込みます。

これでサンプルのWebアプリケーションは、.NET 6に移植されました。すべてのコントローラは、.NET 6 API を使用するように移植され、Global.ascx.csApp_Startフォルダ内のスタートアップコードがProgram.csStartup.cs に移植されました。Web.configappSettingsセクションの内容は、ASP.NET Core で使用される構成ファイルであるappsettings.json にコピーされています。

次にコンパイル時のエラーを検出するために、サンプルアプリケーションをビルドします。ここで発生したエラーは、手動で修正が必要です。ASP.NET の@Scripts.Render@Styles.Renderディレクティブを標準の HTML タグを使用するように変更し、Kestrel がデフォルトの ASP.NET Core の開発環境の証明書を使用するよう、appsettings.json から証明書の設定を削除するなど、アプリケーションにいくつかの変更を加えます。

またこれらの変更を行っているときに、Linuxのファイルシステムは大文字と小文字を区別するが、Windowsでは区別されないことを思い出し、hrefsrc 属性のパスがディスク上のパスと正確に一致し、正しい大文字と小文字が使われているか、再確認しました。すべてのビルドエラーが解消したら、次に進みます。

移植したアプリケーションを、AWS 上でテストする

前セクションでアプリケーションの移植が完了したので、次に移植後のアプリケーションが正しく動作するか、AWS 上でテストを行うことができます。初めてテストを行う際は、Setting up for testing on AWS の手順に従い、初回のセットアップを実施してください。

セットアップ手順の完了後、Visual Studio のソリューションエクスプローラで、プロジェクトを右クリックし、[Publish] を選択します。ターゲットとなるフォルダのプロファイルを作成し(または既存のものを使用し)、そのディレクトリにプロジェクトを公開します。

公開に成功したら、画面上の [Target location] のパスを控えてください、このパスは次のステップで使用します。

次にVisual Studioの [拡張機能] メニューで、[AWS Toolkit for .NET Refactoring] を選択し、[Run Test Deployment on AWS] を選択します。この新機能は、コンテナをサーバーレスで実行するサービスである、AWS Fargate および Amazon Elastic Container Service(AmazonECS)上で動作するLinux コンテナに、.NET アプリケーションをデプロイするものです。AWS Toolkit for .NET Refactoring は、アプリケーションをコンテナ化し、Amazon ECS 上で実行するために必要なすべてのアーティファクトを生成します。Dockerfile を作成したり、Docker をインストールする必要は全くありません(既存の Dockerfile を使用することも可能です)。

Test on AWSウィンドウの、[AWS profile to run test deployment]  で、AWS アカウントに Administrator レベルのアクセス権を持つ AWS プロファイルを選択します。[Published artifacts] で、前のセクションで控えた [Target location] のパスを貼り付けるか、公開されたアーティファクトを含むフォルダを指定してください。[Port number] フィールドに、アプリケーションがリッスンするポートを入力します。ASP.NET Core Webアプリケーションの場合、これは通常Kestrelのポートになります。

最後に、[Test on AWS] を選択してデプロイを開始します。Visual Studio 内からデプロイの進捗を確認することができます。デプロイが完了したら、[View now] を選択して Web ブラウザで AWS 上のアプリケーションを開きます。

後でデプロイの状況を確認するには、[拡張機能] メニューから [AWS Toolkit for .NET Refactoring] を選択し、[View Deployments Running on AWS] を選択します、[Endpoint URL]の下にある URL にアクセスして、デプロイされたアプリケーションにアクセスします。

Porting Assistant for .NET の更新

2020年、AWSは.NET Framework アプリケーションの互換性を分析し、最新の.NET(および.NET Core)に移植する際の作業コストを見積もるためのオープンソースツール Porting Assistant for .NET を発表しました。このツールを利用したことがある方は、AWS Toolkit for .NET Refactoring とどのような関係があるのか、疑問に感じるのではないでしょうか。

Porting Assistant for .NET が普及するにつれ、開発者のコミュニティより、主に2つのフィードバックがありました。1点目は、互換性評価はモダナイズの出発点に過ぎないということです。開発者は、最新化プロセスを完了するために、互換性評価だけでなく、反復的な展開やテストなど、より多くの機能を必要としているという点です。2点目は、Porting Assistant for .NET は利用する際に AWS アカウントの資格情報を提供する必要があるため、AWS への移行が決定していない段階での利用は難しい、という点です。

私たちは、この2点についてコミュニティのフィードバックに耳を傾け、AWS Toolkit for .NET Refactoring を開発しました。これによりモダナイゼーションのワークフローを、エンドツーエンドで簡素化することを目的とした、統合されたツールを開発者に提供します。AWS Toolkit for .NET Refactoring は AWS の資格情報を使用して、クラウドのデプロイメントなどのタスクを自動化します。同時に、Porting Assistant for .NETを、AWS の資格情報なしでも利用できるようアップデートしました。これにより、開発者はPorting Assistant for .NETを、AWS に依存することなく、あらゆるモダナイゼーションプロジェクトに使用することができるようになりました。

私たちは、今後も Porting Assistant for .NET の開発を続けていきます。私たちは、モダナイズの領域で様々な問題解決に貢献することが、コミュニティ全体の利益になると考えています。そのため、すべての.NETコミュニティのメンバーと開発者が、Porting Assistant for .NET を自由に使用出来るようにすることで、コミュニティに貢献し続けたいと考えています。

開発者は、.NET アプリケーションのモダナイズ作業の作業量を見積もり、内部の依存関係を可視化し、.NET Framework から最新の.NET(および.NET Core)への移植を実行したい場合に、引き続き、Porting Assistant for .NET を利用することが出来ます。

また、.NET Framework アプリケーションを、モダナイズしてAWS へ移行することを選択した場合や、移行のターゲットとして AWS を評価している場合、また AWS 上での実行方法について学習したい場合、AWS Toolkit for .NET Refactoring を使用することが出来ます。AWS Toolkit for .NET Refactoringは、Porting Assistant for .NET の機能を含み、AWS コンテナ上でのテストなどの新機能を追加したものです。私たちのビジョンは、AWS Toolkit for .NET Refactoring がさらなる進化と成長を続け、AWS上での.NETアプリケーションの、モダナイゼーションとマイグレーションのハブとなることです。

まとめ

2022 年 10 月 26 日より提供される、AWS Toolkit for .NET Refactoring 拡張機能は、開発者がクラウドのコスト効率、信頼性、拡張性の恩恵を十分に受けられるよう、レガシーな.NET Framework アプリケーションをモダナイズすることを支援するツールです。この拡張機能は、.NET Framework アプリケーションを最新の.NET(旧称:.NET Core)に移植するために必要な作業量を評価し、Windows 基盤固有の設定をオープンソース基盤の設定に変換し、AWSコンテナサービスをベースとしたテスト環境の作成とデプロイを自動化するものです。

AWS Toolkit for .NET Refactoringは、Visual Studio 2019およびVisual Studio 2022 で利用可能です。Porting Assistant for .NETは引き続きコミュニティが利用できるオープンソースツールであり、AWSアカウントなしで使用できるようになりました。


AWSは、貴社がクラウドを最大限に活用出来るよう、支援します。数百万のお客様の信頼を得ているAWS を利用して、貴社の重要なアプリケーションをクラウドに移行し、モダナイズすることができます。Windows Server または SQL Server の最新化に関する詳細は、Windows on AWS をご覧ください。アプリケーションのモダナイズのご検討の際は、当社にご連絡ください。

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

投稿者について

Matt Cline

Matt Cline は Amazon Web Services のシニアソリューションアーキテクトで、地元ペンシルベニア州ピッツバーグの顧客をサポートしています。フルスタック開発者とアーキテクトとしての経歴を持ち、顧客がAWS上で最高品質のアプリケーションを提供できるように支援することに情熱を注いでいます。仕事以外では、模型を作ったり、テーブルトップ・ロールプレイングゲームを友人と楽しんでいます。

翻訳者について

小杉 真一郎

小杉 真一郎は、マイクロソフトワークロードを専門としたAWSのソリューションアーキテクトであり、日本市場におけるクラウドプラットフォームの活用およびモダナイズを支援しています。