Amazon Web Services ブログ

AWS で Windows コンテナを使用して Microsoft Windows Server 2012 をアップグレードおよびモダナイズする方法

このブログ記事は、Windows Server 2012 と 2012 R2 のアップグレード方法に関する 4 部構成のシリーズの第 3 部です。

このシリーズでは、2023年10月に予定されているサポート終了イベントに対応するための選択肢についてご説明します。第 1 部では、サポート終了のジレンマと、インプレースでの手動アップグレードの実行方法と、Windows Server 向けサポート終了移行プログラム (EMP) の概要を説明しました。第 2 部では、Amazon Systems Manager (SSM) を使用してアップグレードを自動化する方法について説明しました。 第 3 部では、AWS App2Container などのモダナイゼーションツールを活用してアップグレードする方法を説明します。第 4 部では、AWS Application Migration Service を使用して Microsoft Windows Server 2012 をアップグレードする方法を説明します。

はじめに

Windows Server のサポート終了 (End of Support、EOS) への対応ブログシリーズの第 3 部へようこそ。Windows コンテナを使用した EOS のモダナイゼーション方法について順を追って説明します。

早速見ていきましょう。

レガシーな ASP.NET Web アプリケーションを Windows コンテナにリプラットフォーム

お客様の EOS の課題解決を支援する中で、レガシーアプリケーションやモノリシックアプリケーションの管理を容易にする目的で Windows コンテナを使用する案件が増えているようです (図 1 を参照) 。ASP.NET Web アプリケーションでは、Windows コンテナが最適な実行方法です。コンテナはもともとポータブルで、スケーラブルで、信頼性があります。ASP.NET Web アプリケーションを Windows コンテナで実行することで、ソースコードの再設計やリファクタリングについて心配する必要がなくなります。EOS となるWindows OS に対応すること以外にも、Windows コンテナにリプラットフォームすることでアプリケーションのモダナイズを開始 (または継続) できます。

A flow chart diagram showing the various migration and modernization approaches for a .NET web application.

図 1. マイグレーションとモダナイゼーションのアプローチ:リホスト、リプラットフォーム、リファクタリング

App2Container による.NET Framework アプリケーションのモダナイゼーション

前提条件

これらの前提条件の詳細については、こちらのドキュメントをご覧ください。

  1. アプリケーションに、新しいOSへの移行を妨げるような、OSとの依存関係や Windows API (例:COM 相互運用) が使われていないか確認します。
  2. 組織の要件に基づいてターゲット Windows OS を設定します。
    • 注意Amazon Elastic Container Service (Amazon ECS) と Amazon Elastic Kubernetes Service (Amazon EKS) は、Windows コンテナを実行するためにサポートされている 2 つのオーケストレーションプラットフォームです。Windows Server 2022 にアップグレードすることをお勧めしますが、一般的なコンピューティングオプションでは Windows Server 2019 と 2022 がサポートされます。Windows Server 2016 は ECS の Amazon Elastic Cloud Compute (Amazon EC2) 起動タイプでのみサポートされています。
  3. アプリケーションが App2Container (A2C) でサポートされていることを確認してください。
  4. どのオーケストレーションプラットフォームを使用するか決めてください。Amazon ECS と Amazon EKS は Windows コンテナと App2Container の成果物をサポートしているプラットフォームです。
  5. 手順に従って、移行先の OS バージョン (Windows Server 2019 または 2022) を実行し、移行元のWindow Server 2012 のアプリケーションサーバーからアプリケーションの成果物を抽出するリモートワーカーマシンをセットアップします。

手順については、「Modernize with AWS App2Container Workshop」をご覧ください。その結果、図 2 に示すように、.NET ウェブアプリケーションを AWS でモダナイズします。

A diagram displaying how a .NET modernized web application is hosted on the AWS Cloud.

図 2. .NET の AWS へのモダナイゼーションの例

  1. アプリケーションを発見して分析する。
    • アプリケーションサーバー上で実行されているすべてのインターネット インフォメーション サーバー (IIS) の Web サイトと Windows サービスを記録する App2Container の分析コマンドを実行します。
    • 分析出力ファイルを確認し、必要に応じて、コンテナのベースイメージを所望の移行先 OS になるように調整します。(例:mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2022 — .NET Framework 4.8 Windows Server Core 2022 イメージ)。これは IIS と OS の構成の分析に基づいて自動的に設定されるはずです。
  2. アプリケーションを抽出してコンテナ化する。
    • リモートワーカーマシンで extract コマンドを実行して、指定したアプリケーションのアプリケーションアーカイブを生成します。このアーカイブをワーカーマシンにコピーするか、Amazon S3 プレフィックスを指定することができます。
    • containerize コマンドを実行して Dockerfile を作成します。
  3. コンテナ化されたアプリケーションをデプロイする。
    • Amazon ECS または Amazon EKS のアーティファクトを含むようにデプロイ設定を調整してください。次に、アプリケーションデプロイを実行してコンテナイメージを Amazon Elastic Container Registry (Amazon ECR) にプッシュし、アプリケーションを Amazon ECS または Amazon EKS にデプロイします。
    • アプリケーションが正常にコンテナ化され、パブリックアクセス向けに保護されたら、本番環境へのデプロイを計画する準備が整います。App2Containerは、アプリケーションのデプロイを容易にする継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインの作成をサポートします。App2Container は、CodePipeline、Jenkins、Microsoft Azure DevOps など、いくつかの CI/CD ツールをサポートしています。App2Container を使用した CI/CD パイプラインの段階的なデプロイについては、ブログ記事「AWS App2Container を使用してコンテナ化された ASP.NET アプリケーション用の CI/CD パイプラインの生成 (英文)」を参照してください。
  4. 本番環境にプッシュする。
    • Windows Server 2012 で実行されているレガシーアプリケーションから、デプロイしたコンテナ化されたアプリケーションの前段にある新しいロードバランサーへのパブリック URL のカットオーバーを計画します。
    • アプリケーションに OS の依存関係がない場合は、最新の Windows OS を使用して新しいビルドサーバーをデプロイし、アプリの Dockerfile の FROM 行を変更し (図 3 参照)、新しいコンテナイメージを構築し (図 4 参照)、ローリング更新を行うだけで、今後の OS バージョンのアップグレードは簡単にできます。

注意:本番環境に実装する前に、基盤となるOSに大幅な変更がないことを確認するための適切なテストが必要です。

EOS OS:

A command that shows EOS OS Container Base image in DockerFile

図 3. EOS OS コンテナベースイメージ

New OS:

A command that shows New OS Container Base image in DockerFile

図 4. Dockerfile の新しい OS コンテナベースイメージ

App2Container の使用手順を詳しく理解するには、App2Container の公開ドキュメントを参照してください。Amazon Relational Database Service (Amazon RDS) for SQL Server にデータベースを移行するユースケースをさらに詳しく知りたい場合は、AWS App2Container によるモダナイズワークショップを参照してください。

リファクタリング — .NET Framework を最新バージョンの .NET へ

組織で.NET Framework コードを最新バージョンの .NET にリファクタリングする準備ができている場合は、Porting Assistant for .NETAWS Toolkit for .NET Refactoring を利用できます。.NET 6 もしくはそれ以降のバージョンに移行することで、.NET コードを Linux コンテナで実行できるようになります。

クリーンアップ

このブログ記事は手順の説明を目的としており、クリーンアップについては省略しています。アップグレードの進め方をステップバイステップの手順で示しています。

まとめ

このブログ記事では、AWS App2Container を活用して .NET ウェブアプリケーションをアップグレードおよびモダナイズする方法について説明しました。このブログシリーズの次のブログ記事では、AWS Application Migration Service を使用して Windows OS をアップグレードする方法を紹介します。

この 4 部構成のブログシリーズでは、EOS に対処するためのさまざまな選択肢と、AWS のテクノロジー、ツール、エキスパートがこれらの問題への対処にどのように役立つか説明したことを覚えておいてください。

アップグレードについてご支援が必要な場合は、こちらから AWS にお問い合わせください。お客様の EOS の状況やニーズへの対応を支援いたします。


AWS は、お客様がクラウドを最大限に活用する方法を評価するご支援をします。AWS は数百万のお客様からご信頼いただき、最も重要なアプリケーションをクラウドに移行しモダナイズするためにご利用いただいています。ぜひ、これらお客様の仲間入りしてください。Windows Server または SQL Server のモダナイゼーションの詳細については、 Windows on AWS をご覧ください。今すぐ移行を開始するには、こちらからお問い合わせください。

Mike Adams

Mike Adams

Mike Adams は AWS の世界的な市場開拓スペシャリストです。マイクロソフトのワークロードを AWS に移行し、運用効率とコスト効率を向上させる方法を顧客に示すことを主な活動としています。AWS に入社する前は、Mike は Ivanti、VMware、Symantec、VERITAS Software で製品マーケティングの役職を歴任していました。Mike のキャリアは、ギガ・インフォメーション・グループ (現在はフォレスター・リサーチのグループ) で業界アナリストとしてスタートしました。

Bill Pfeiffer

Bill Pfeiffer

Bill Pfeiffer は、アマゾン ウェブ サービスのシニアソリューションアーキテクトです。Bill は、お客様が安全でコストを最適化したインフラストラクチャを設計、実装、発展できるよう支援することを主な活動としています。Bill は、お客様がビジネス上の課題を技術的ソリューションで解決できるよう支援することに情熱を注いでいます。仕事以外では、ビルは家族と一緒にRV車に乗ってアメリカを旅行したり、ウルトラマラソン距離のスパルタンレースに出場したりすることを楽しんでいます。

Gianpaolo Albanese

Gianpaolo Albanese

GianPaolo Albanese は、ニューヨーク地域に拠点を置くアマゾン ウェブ サービスのマイクロソフトスペシャリストソリューションアーキテクトです。GP は、お客様の Windows アーキテクチャ、AWS クラウドへの移行、最適化を支援することを主な活動としています。GP は、フィンテック業界で 30 年以上の経験を持つ IT プロフェッショナルであり、大規模インフラストラクチャ、移行、およびモダナイゼーション活動のマネジメントを専門としています。過去 2 年間、GP はお客様がサポート終了の課題に対処できるよう支援することに全力を注いできました。

この記事の翻訳はソリューションアーキテクトの平良允俊が担当しました。原文はこちらです。