Amazon Web Services は、.NET アプリケーションを Linux に移植するためのツールを作成することで、より多くの開発者を自社のクラウドに引き込もうとしていますが、現状では期待したほどの有用性はないようです。
Porting Assistant for .NET は、Windows 専用の .NET Framework アプリケーション (通常は IIS Web サーバー上で実行される) を Linux 上で実行し、AWS クラウドへの容易な移行を可能にする .NET Core アプリケーションに変換するユーザーを支援するものです。Amazon ではこの変換アシスタントによって、.NET Framework アプリケーションを Linux 上で実行し、AWS クラウドへの容易な移行を実現することを期待しています。
6年前、Microsoftは.NETプラットフォームをフォークし、.NET FrameworkをWindows専用として、Windows、Linux、Macでクロスプラットフォームに対応するオープンソースの.NET Coreを開発しました。.NET Frameworkのバージョンが残されるのは避けられず、Microsoftは昨年、「.NET Framework 4.8が最後のメジャーバージョンとなる」と発表しました。
このツールは、プロジェクト内のNuGetパッケージの互換性について良い情報や悪い情報を提供し、アップグレード(場合によってはアルファ版)を推奨します。クリックして拡大
通常、.NET Core 上で実行すると、パフォーマンスが向上するだけでなく、展開の柔軟性も向上し、アプリケーションを実行するために Windows Server のライセンスを取得する必要がなくなります。
しかし、.NET Frameworkからの移植は困難を極める可能性があります。特に、Webアプリケーションで広く使用されているフレームワークであるASP.NET Web Formsが.NET Coreに実装されていないためです。.NET Framework Webアプリケーションを使用している企業は、パブリッククラウド上のWindows Serverに移行することも可能ですが、大きな負担やリスクなしに移行できるのであれば、.NET Coreへの移行の方がより優れたソリューションと言えるでしょう。
AWSは、より多くのアプリケーションがAWSのクラウドプラットフォームに導入されることを期待して、顧客の移行を強く望んでいます。そして、その実現を支援するPorting Assistant for .NETをリリースしました。Microsoftも、プロジェクトまたはソリューション全体を.NET SDKに変換できるtry-convertなどの移植ツールを提供していますが、「.NET Coreと互換性のない多くのプロジェクトタイプを拒否する」など、多くの警告が表示されています。
AWS Porting Assistant を見て私たちが最初に思ったのは、なぜ Microsoft が最初にこれを開発しなかったのかということでした。
残念ながら、このツールは現時点ではかなり制限されています。Porting Assistantをダウンロードし、インストールプロセスを実行しましたが、AWSコマンドラインインターフェースでも使用されているAWSプロファイルが必要でした。ログインが必要な理由は、ツールがS3に保存されているデータにアクセスする必要があるためです。GitHubリポジトリによると、このS3は「nuget.orgで利用可能なすべてのNuGetパッケージ(21万1千個の個別パッケージ、250万個のパッケージバージョン)の互換性情報」のデータベースです。ただし、このリポジトリにはデータもアプリケーションのコードも含まれておらず、データの場所のみが記載されていることに注意してください。確かに、これは小さなリポジトリです。
インストールと設定が完了したら、.NETソリューションファイルを選択するだけでツールが動作します。ただし、適切なターゲットアプリケーションが見つかることが条件となります。サポートされるプロジェクトは、「Windows Server 2016以降で稼働するIISにデプロイされたC# ASP.NETアプリケーション」です。.NET Frameworkのバージョンは3.5以降である必要があります。
このツールをVisual Studioソリューションファイルに指定すると、NuGetパッケージが分析され、互換性があるか互換性がないかがマークされ、可能な場合は代替パッケージが提案されます。また、互換性のない.NET API呼び出しもリスト表示されます。このツールはLinux上の.NET Coreのみを対象としています。クロスプラットフォームであるにもかかわらず、AWSはWindowsよりもLinuxの方が適していると主張しているようです。
「プロジェクトの移植」という楽観的なボタンがあり、これをクリックすると対象の.NETバージョンを選択して新しいプロジェクトを作成できます。しかし、あまり役に立たないかもしれません。AWSは次のように警告しています。「ソリューションを移植しても、コードはリファクタリングされません。パッケージは最新の互換バージョンにアップグレードされ、関連するプロジェクト参照ファイルは.NET Coreと互換性のある形式に更新されます。追加のソースコード変更が必要になる場合があります。コード変更を必要とする未解決の非互換性がさらに存在する場合、移植後にプロジェクトがビルドされない可能性があります。」
言い換えれば、ここには魔法はなく、また、ツールがアルファというラベルが付いたアップグレードを喜んで推奨しているように見えることから、すべてのパッケージの「最新の互換性のあるバージョン」に自動的に移行することは必ずしも良い考えではないことも示唆しています。
移植アシスタントの一番の魅力は、「プロジェクト参照」をクリックしたときに表示される美しいグラフです。ソリューション内の各プロジェクトとその依存関係がグラフィカルに表示されます。Visual Studioでプロジェクトを検査するよりも便利なのでしょうか?必ずしもそうではありませんが、視覚的に分かりやすいのは確かです。
クリックして拡大
AWS が .NET Framework から .NET Core へのプロジェクト移植の価値を強調するのは賢明であり、そのプラットフォームを Windows プラットフォーム アプリケーションの最適なホームとして提示するという戦略にも合致しています。
最近のもう 1 つの動きは、.NET および Java アプリケーションをコンテナ化する AWS App2Container です。これは実際には IIS にデプロイされた .NET Framework ASP.NET アプリケーションで動作するため、.NET Core に移植する必要はありません。
また、Linux 上の .NET Core 用 Elastic Beanstalk も関連しています。これには .NET Core ポートが必要ですが、これにより顧客は Elastic Beanstalk サービスの便利なスケーリング機能を使用できるようになります。
しかし、移植アシスタント自体は、実現できること以上のものを約束しています。移植作業の大部分は依然として開発者に委ねられており、その仕組みを詳しく調べても特に賢いわけではありません。
AWSが広報活動でツールのデモに選んだプロジェクトがオープンソースのnopCommerceだったことに驚きました。nopCommerceは実際には既に.NET Core向けにアップデートされており、WindowsとLinuxで動作するため、AWSは古いバージョンを採用したのです。しかし、視覚化には問題なく動作しました。®