Azure クラウドと Windows コンテナーで既存の .NET アプリケーションを最新式にする

「.NET アプリケーションの最新化」ガイドの表紙画像。

EDITION v6.0

書籍の更新とコミュニティへの投稿については、「changelog」を参照してください。

発行者: Microsoft Press and Microsoft DevDiv Divisions of Microsoft Corporation One Microsoft Way Redmond, Washington 98052-6399

Copyright © 2022 by Microsoft Corporation

All rights reserved. 本書のいかなる部分も、書面による発行者の許可なしに、いかなる形式または方法によっても、複製することを禁じます。

このブックは、電子書籍の形式で、https://dot.net/architecture などのマイクロソフトの複数のチャネルを介して利用できます。

この書籍に関する質問がある場合は、dotnet-architecture-ebooks-feedback@service.microsoft.com にメールでお問い合わせください。

本書は "現状有姿" で提供され、著者の見解と意見を表しています。 URL および他の参照されているインターネットの Web サイトをはじめ、本書に記載されている見解、意見、および情報は、通知なく変更されることがあります。

ここに記載したいくつかの例は、説明のためだけに提供された架空のものです。 実在のものとの関連性または関係性は一切ありません。

https://www.microsoft.com の "商標" Web ページに記載されている Microsoft および商標は、Microsoft グループの商標です。 その他のすべてのマークは、該当する各社が所有しています。

作成者:

Cesar de la Torre、Microsoft Corp.、.NET 製品チーム、シニア PM

参加者とレビュー担当者:

Scott Hunter(Microsoft、.NET チーム、パートナー ディレクター)、Paul Yuknewicz (Microsoft、Visual Studio Tools チーム、主席 PM マネージャー)、Lisa Guthrie (Microsoft、Visual Studio Tools チーム、上級 PM)、Ankit Asthana (Microsoft、.NET チーム、主席 PM マネージャー)、Unai Zorrilla (Plain Concepts、開発リーダー)、Javier Valero (Grupo Solutio、チーフ オペレーション担当者)、Steve Smith (NimblePros、アーキテクト)

はじめに

Web アプリケーションまたはサービスを最新化し、クラウドに移動すると決定した場合は、アプリを完全に再構築する必要があるとは限りません。 マイクロサービスのような高度なアプローチを使用したアプリケーションの再構築は、コストと時間の制約があるため必ずしも選択肢となりません。 アプリケーションの種類に応じて、アプリの再構築も必要ない場合があります。 組織のクラウドの移行戦略のコスト効率を最適化するには、ビジネスのニーズとアプリの要件を考慮することが重要です。 次のことを決定する必要があります。

  • どのアプリの変換と再設計が必要か。

  • どのアプリの部分的な再構築のみが必要か。

  • どのアプリをクラウドに直接 "リフト アンド シフト" することができるか。

このガイドについて

このガイドでは、主に既存の Microsoft .NET Framework Web またはサービス指向アプリケーションの最初の最新化に焦点を当てています。つまり、アプリケーションのコードと基本的なアーキテクチャを大幅に変更することなく、ワークロードをより新しい、または現代的な環境に移行します。

また、このガイドでは、Windows コンテナーや、Windows コンテナーをサポートする Azure 内の関連するコンピューティング プラットフォームなど、特定の一連の新しいテクノロジとアプローチを使用して、アプリをクラウドに移行し、アプリを部分的に最新化する利点についても説明します。

既存の .NET アプリケーションのクラウドへのパス

組織は、通常のアプリケーションで得ることができる機敏性と速度のために、クラウドへの移行を選択します。 オンプレミス サーバーのセットアップには一般的に数週間かかるのと比べて、クラウドでは数千のサーバー (VM) を数分でセットアップできます。

アプリケーションをクラウドに移行するための 1 つの万能型の戦略はありません。 右側の移行の戦略は、組織のニーズと優先度、および移行するアプリケーションの種類によって異なります。 すべてのアプリケーションがサービスとしてのプラットフォーム (PaaS) モデルへの移行やクラウド ネイティブ アプリケーション モデルの開発の投資を保証するわけではありません。 多くの場合は、ビジネス ニーズに基づいて、資産をクラウドに移行する際に段階的なまたは増分アプローチで投資を実行できます。

最適な長期的機敏性と組織のための価値を持つ最新のアプリケーションの場合、クラウドネイティブ のアプリケーション アーキテクチャに投資するとメリットが得られることがあります。 ただし、既存のアプリケーションまたは従来の資産にとって重要なのは、クラウドに移行するときにかかる時間とコストを最小限に抑えながら (再設計やコード変更なしで)、大きなメリットを実現することです。

図 1-1 は、既存の .NET アプリケーションを段階的なフェーズでクラウドに移動する場合に実行できる可能性のあるパスを示しています。

既存の .NET アプリケーションとサービスの最新化パス

(図 1-1) 。 既存の .NET アプリケーションとサービスの最新化パス

各移行アプローチには、さまざまな利点とそれを使用する理由があります。 アプリをクラウドに移行するときには単一のアプローチを選択することも、複数のアプローチから特定のコンポーネントを選択することもできます。 個々 のアプリケーションは、1 つのアプローチまたは成熟度の状態に制限されません。 たとえば、一般的なハイブリッド アプローチには、オンプレミスのコンポーネントに加えてその他のコンポーネントがクラウドにあります。

各アプリケーションの成熟度レベルの定義と簡単な説明を次に示します。

レベル 1:クラウド インフラストラクチャ対応 アプリケーション:この移行アプローチでは、単に現在のオンプレミス アプリケーションをサービスとしてのインフラストラクチャ (IaaS) プラットフォームに移行または再ホストします。 アプリの構成は前とほとんど変わりませんが、クラウド内の VM に展開します。 このシンプルな種類の移行は、通常、業界では "リフト アンド シフト" と呼ばれます。

レベル 2:クラウド向けに最適化された アプリケーション:このレベルでは、重要なコードを再設計または変更することなく、コンテナーや追加のクラウドマネージド サービスなどの最新のテクノロジを使用し、クラウドでアプリを実行することによって、さらにメリットを得ることができます。 エンタープライズ開発操作 (DevOps) プロセスが調整され、すばやく出荷するためのアプリケーションの機敏性が向上します。 この機能を実現するには、Docker エンジンに基づく Windows コンテナーなどのテクノロジを使用します。 コンテナーは、複数の段階的で展開するときに、アプリケーションの依存関係によって引き起こされる摩擦を取り除きます。 この成熟度モデルでは、IaaS または PaaS にコンテナーをデプロイし、さらにデータベース、サービスとしてのキャッシュ、監視、継続的インテグレーション/継続的デプロイ (CI/CD) パイプラインに関連する追加のクラウド管理サービスを使用することができます。

3 番目の成熟度レベルは、クラウドの最終的な目標ですが、多くのアプリでは省略可能であり、このガイドの主な焦点ではありません。

レベル 3:クラウドネイティブ アプリケーション:この移行アプローチは、一般的にビジネス ニーズによって推進され、ミッション クリティカルなアプリケーションの刷新を目標とします。 このレベルでは、PaaS サービスを使用してアプリを PaaS コンピューティング インフラストラクチャに移行します。 クラウド ネイティブ アプリケーションおよびマイクロサービス アーキテクチャを実装して長期的な機敏性を持つようにアプリケーションを発展させ、新しい制限にスケールを設定します。 このタイプの最新化は、通常、クラウド用の特別な構築が必要です。 多くの場合、新しいコードを書き込まれなければなりません、特にクラウド ネイティブ アプリケーションとマイクロ サービスに基づくモデルに移動する場合に必要です。 このアプローチは、モノリシックなオンプレミス アプリケーション環境では実現することが困難なメリットを得ることができます。

表 1-1 は、各移行または最新化アプローチを選択する理由との主な利点を説明しています。

クラウド インフラストラクチャの準備完了
リフト アンド シフト
クラウド最適化
最新化
クラウドネイティブ
最新化、再設計、再生成
アプリケーションの計算対象
Azure の VM にデプロイされたアプリケーション Azure App Service、Azure Container Instance (ACI)、コンテナーを使用した VM、または AKS (Azure Kubernetes Service) にデプロイされたモノリシックまたは N 層アプリ Azure Kubernetes Service (AKS) 上のコンテナー化されたマイクロサービス、または Azure Functions に基づくサーバーレス マイクロサービス。
データの対象
SQL または VM 上の任意のリレーショナル データベース Azure SQL Database Managed Instance またはクラウド内の別のマネージド データベース。 クラウド内の Azure SQL Database、Azure Cosmos DB、または別のマネージド データベースに基づいた、マイクロサービスごとの細粒度のデータベース
長所
  • 再設計なし、新しいコードなし
  • 最小限の労力による迅速な移行
  • Azure でサポートされる最小公倍数
  • 基本的な可用性の保証
  • クラウドへの移行後にする方が簡単な最新化
  • 再設計なし
  • 最小限のコード/構成の変更
  • コンテナーに展開とリリースのための DevOps の機敏性の改善
  • 密度の増大と展開コストの削減
  • アプリとの依存関係の移植性
  • ホスト ターゲットの柔軟性:PaaS アプローチまたは IaaS
  • クラウドの設計者はクラウドから最高のメリットを得られますが、新しいコードが必要です。
  • マイクロサービス クラウドネイティブ アプローチ
  • クラウドの回復性と高度なスケーラビリティを備えた最新のミッションクリティカル アプリケーション
  • フル マネージド サービス
  • スケールに最適化
  • サブシステムによる自律的な機敏性に最適化
  • 展開と DevOps 上の構築
  • 課題
  • 運用費のシフトまたはデータセンターの閉鎖以外の小さなクラウドの価値
  • ほとんど管理されていない:OS またはミドルウェアの修正プログラムはありません。Terraform、Spinnaker、Puppet などのインフラストラクチャ ソリューションを使用する場合があります
  • コンテナー化は、開発者や IT 運用向けの学習曲線における追加の手順です
  • このアプローチでは、通常、DevOps と CI/CD パイプラインが ’必須’ です。 これが現在の組織のカルチャに存在していない場合は、追加の課題になる可能性があります。
  • クラウドネイティブ アプリとマイクロサービス アーキテクチャの再設計が必要です。また、通常、最新化を行うときに大幅なコードのリファクタリングまたは書き換えが必要になります (時間と予算の増加)
  • 表 1-1 既存の .NET アプリケーションとサービスの最新化パスのメリットと課題

    成熟度レベル別の主要なテクノロジおよびアーキテクチャ

    .NET Framework アプリケーションは、2001 年後半にリリースされた .NET Framework バージョン 1.0 から始まりました。 その後企業は新しいバージョン (2.0、3.5、.NET Framework 4.x など) に移行しました。 それらのアプリケーションのほとんどは、Windows サーバーとインターネット インフォメーション サーバー (IIS) 上で実行され、SQL Server、Oracle、MySQL などのリレーショナル データベース、またはその他の任意の RDBMS を使用しました。

    ほとんどの既存の .NET アプリケーションは現在、.NET Framework 4.x または .NET Framework 3.5 を基にし、ASP.NET MVC、ASP.NET Web Forms、ASP.NET Web API、Windows Communication Foundation (WCF)、ASP.NET SignalR、ASP.NET Web ページなどの Web フレームワークを使用しています。 これらの確立された .NET Framework テクノロジは Windows に依存しています。 レガシ アプリケーションを移行するだけで、アプリケーションのインフラストラクチャの変更を最小限にする場合は、その依存関係を考慮することが重要です。

    図 1-2 は、3 つの各クラウド成熟度レベルで使用する主要なテクノロジとアーキテクチャ スタイルを示しています。

    既存の .NET Web アプリケーションの最新化のための成熟度レベルごとの主要なテクノロジ

    図 1-2 既存の .NET Web アプリケーションの最新化のための成熟度レベルごとの主要なテクノロジ

    図 1-2 では、最も一般的なシナリオが強調表示されていますが、アーキテクチャについては多くハイブリッドと混在のバリエーションが使用可能です。 たとえば、成熟度モデルは、既存の Web アプリのモノリシック アーキテクチャだけでなく、サービス指向、N 層、およびその他のアーキテクチャのスタイルのバリエーションにも適用されます。 1 つまたは別のアーキテクチャの種類と関連するテクノロジへの高い集中度または割合によって、アプリケーションの全体的な成熟度レベルが決まります。

    最新化プロセス内の各成熟度レベルは、次の主要なテクノロジおよびアプローチに関連付けられています。

    • クラウド インフラストラクチャ対応 (再ホストまたは基本的なリフト アンド シフト):多くの組織では、最初の手順としてクラウド移行戦略を迅速に実行するだけです。 この場合、アプリケーションは再ホストされます。 Azure Site RecoveryAzure Database Migration Service などのクラウドツールを基にした Azure への移行を支援するために必要なガイダンス、洞察、メカニズムを提供するサービスである Azure Migrate を使用することで、ほとんどの再ホストは自動化することができます。 レガシ アプリケーションをクラウドに移動するときに、資産についてインフラストラクチャの詳細を確認することができるように、再ホストを手動で変更を設定することもできます。 たとえば、ほとんど変更せずに (おそらく少しの構成変更だけで) Azure の VM にアプリケーションを移動することができます。 特に Azure で仮想ネットワークを作成する場合、このケースでのネットワークは、オンプレミス環境に似ています。

    • クラウド最適化 (マネージド サービスおよび Windows コンテナー):このモデルでは、アプリケーションの主要なアーキテクチャを変更することなく、クラウドからのいくつかの重要な利点を取得するために、いくつかの重要な展開の最適化を行います。 ここでの基本的な手順は、Windows コンテナー サポートを既存の .NET Framework アプリケーションに追加することです。 この重要な手順 (コンテナー化) は、コードを操作しないので、全体的なリフト アンド シフトの作業が少なくなります。 Image2Docker や Visual Studio などのツールと、Docker 用のツールを使用できます。 Visual Studio は、ASP.NET アプリケーションおよび Windows コンテナー イメージ用のスマート有効な既定値を自動的に選択します。 これらのツールは、迅速な内側のループと Azure へのコンテナーを取得する高速なパスの両方を提供します。 複数の環境に展開するときの機敏性が向上します。 これで、運用環境に移行すると、Azure Web App for ContainersAzure Container Instances (ACI) と、IaaS アプローチが好みの場合は Windows Server 2016 とコンテナーを備えた Azure VM に Windows コンテナーをデプロイできるようになります。 より複雑なマルチコンテナー アプリケーションの場合は、Azure Kubernetes Service (AKS/ACS) などのオーケストレーター使用することを検討してください。

    この初期最新化中に、Azure Application Insights などのツールによる監視、Azure DevOps Services を使用したアプリ ライフサイクルの CI/CD パイプライン、および Azure で使用可能な多数のデータ リソース サービスなどのクラウドの資産を追加することもできます。 たとえば、従来の ASP.NET Web FormsASP.NET MVC を使用して最初に開発され、しかし現在は Windows コンテナーを使用して展開されるモノリシック Web アプリを変更することができます。 Windows コンテナーを使用するときには、データも Azure SQL Database Managed Instance のデータベースに移行する必要があります。アプリケーションの主要なアーキテクチャを変更せずにすべてを移行できます。

    • クラウドネイティブ:紹介したように、自律的に開発およびデプロイできるさまざまなマイクロサービスに取り組む複数の独立した開発チームを擁して、大規模で複雑なアプリケーションを対象としている場合は、クラウドネイティブ アプリケーションの設計を検討する必要があります。 また、マイクロサービスごとの細粒度で独立したスケーラビリティのためでもあります。 これらのアーキテクチャのアプローチでは、非常に重要な課題と複雑さに直面しますが、クラウド PaaS や、サーバーレス アプローチの Azure Kubernetes Service (AKS/ACS) (マネージド Kubernetes)、Azure Functions のようなオーケストレーターを使用することで、大幅に簡素化できます。 これらのすべてのアプローチ (マイクロサービスとサーバーレスなど) は、一般的に、クラウドに合わせて設計し、新しいコードを作成する必要があります。つまり、特定の PaaS プラットフォームに適応したコード、またはマイクロサービスなどの特定のアーキテクチャに適応したコードです。

    図 1-3 は、成熟度レベルごとに使用できる内部のテクノロジを示しています。

    各最新化成熟度レベルの内部のテクノロジ

    図 1-3 各最新化成熟度レベルの内部のテクノロジ

    リフト アンド シフトのシナリオ

    リフト アンド シフトの移行では、アプリケーションのシナリオでリフト アンド シフトの多くの異なるバリエーションを使用できることに注意してください。 アプリケーションの再ホストのみを行う場合は、図 1-4 に示すようなシナリオを使用することがあります。この場合、アプリケーションおよびデータベース サーバー用にのみクラウドで VM を使用します。

    クラウドの純粋な IaaS シナリオの例

    図 1-4 クラウドの純粋な IaaS シナリオの例

    最新化のシナリオ

    最新化のシナリオでは、その成熟度レベルの要素のみを使用する純粋なクラウド最適化アプリケーションが存在する可能性があります。 また、図 1-5 のようにクラウド インフラストラクチャ準備完了からのいくつかの要素、およびクラウド最適化からの他の要素を含む中間的な状態のアプリケーションもあります ("選択" または混在モデル)。

    IaaS 上のデータベース、DevOps、およびコンテナー化資産を含む "選択" シナリオの例

    図 1-5 IaaS 上のデータベース、DevOps、およびコンテナー化資産を含む "選択" シナリオの例

    次に、多くの既存の .NET Framework アプリケーションの移行の理想的なのシナリオとして、クラウド最適化アプリケーションに移行して、少ない作業で大きなメリットを得ることができる可能性があります。 このアプローチでは、将来的な進化としてクラウドネイティブも想定できます。 図 1-6 に例を示します。

    Windows コンテナーとマネージド サービスを使用したクラウド最適化アプリのシナリオ例

    図 1-6 Windows コンテナーとマネージド サービスを使用したクラウド最適化アプリのシナリオ例

    さらに進んで、特定のシナリオ用のいくつかのマイクロサービスを追加することで、既存のクラウド最適化アプリケーションを拡張することができます。 このアプローチにより、クラウドネイティブ モデルのレベルへと部分的に移行されます。これは、このガイダンスの主な目的ではありません。

    このガイドに含まれないもの

    このガイドでは、図 1-7 に示すように、サンプル シナリオの特定のサブセットについて説明します。 このガイドでは、リフト アンド シフトのシナリオおよび最終的にクラウド最適化モデルにのみ焦点を当てています。 クラウド最適化モデルでは、Windows コンテナーと、監視や CI/CD パイプラインなどの追加のコンポーネントを使用して .NET Framework アプリケーションを最新化します。 各コンポーネントは、クラウドに迅速かつ機敏に展開するための基礎です。

    クラウドネイティブについては、このガイドでは説明しません

    図 1-7 クラウドネイティブについては、このガイドでは説明しません

    このガイドの目的は固有です。 再設計とコードの変更を行わずに既存の .NET アプリケーションのリフト アンド シフトを達成するために実行できるパスを示します。 最終的には、アプリケーションをクラウド最適化にする方法について説明します。

    このガイドでは、マイクロサービス アーキテクチャに発展させる方法など、クラウドネイティブ アプリケーションを作成する方法については説明しません。 アプリケーションを再設計したり、マイクロサービスに基づく新しいアプリケーションを作成したりするには、電子書籍「.NET マイクロサービス:コンテナー化された .NET アプリケーションのアーキテクチャ」を参照してください。

    その他の技術情報

    • Microsoft プラットフォームとツールでコンテナー化された Docker アプリケーションのライフサイクル (ダウンロード可能な電子書籍)
      https://aka.ms/dockerlifecycleebook

    • .NET マイクロサービス: コンテナー化された .NET アプリケーションのアーキテクチャ (ダウンロード可能な電子書籍)
      https://aka.ms/microservicesebook

    • ASP.NET Core と Azure を使用した最新の Web アプリケーションの設計 (ダウンロード可能な電子書籍)
      https://aka.ms/webappebook

    対象読者

    このガイドは、アプリケーションの出荷とリリースの機敏性を向上させるために既存の .NET Framework に基づく ASP.NET Web アプリケーションまたは WCF サービスを最新化したい開発者およびソリューション アーキテクトを対象としています。

    Microsoft Azure を使用するときに Windows コンテナーを使用し、クラウドに展開することによって得られるメリットの概要が知りたいだけのエンタープライズ アーキテクトや開発担当者などの技術的な意思決定者の場合にもこのガイドが役に立つことがあります。

    このガイドの使用方法

    このガイドでは、既存のアプリケーションを最新化する必要がある "理由"、およびアプリをクラウドに移行するときに Windows コンテナーを使用することによって得られる具体的なメリットについて説明します。 このガイドの最初のいくつかの章の内容は、概要を知る必要はあっても、実装および技術的な詳細手順を知る必要はないアーキテクトおよび技術的意思決定者向けに設計されています。

    このガイドの最後の章では、特定の展開シナリオにフォーカスを当てた複数のチュートリアルを紹介します。 このガイドでは、シナリオの概要とその利点を中心に説明したチュートリアルの短いバージョンを提供します。 完全なチュートリアルでは、セットアップおよび実装の詳細にドリル ダウンし、関連のサンプル アプリが置かれている (次のセクションで説明します) 同じ公開されている GitHub リポジトリ 内の wiki 投稿のセットとして公開されています。 最後の章および GitHub のステップ バイ ステップの wiki のチュートリアルは、実装の詳細に重点を置く必要がある開発者とアーキテクトにとってより興味深い内容になっています。

    レガシ アプリケーションの最新化のためのアプリのサンプル: eShopModernizing

    GitHub の EShopModernizing リポジトリは、レガシ モノリシックな Web アプリケーションをシミュレートする 2 つのサンプル アプリケーションを提供します。 1 つの Web アプリは、ASP.NET MVC を使用して開発されています。2 つ目の Web アプリは ASP.NET Web Forms を使用して開発されています。3 つ目のアプリは、WinForms クライアント デスクトップ アプリで WCF サービス バックエンドが使用される N 層アプリです。 これらのすべてのアプリは、従来の .NET Framework に基づいています。 これらのサンプル アプリでは .NET Core、.NET 6 または ASP.NET Core は使用しません。これは、これらが最新化される既存またはレガシの .NET Framework アプリケーションと見なされるためです。

    これらのサンプル アプリで、最新化されたコードを持つ、単純な 2 つ目のバージョンを使用します。 アプリのバージョン間で最も重要な違いは、2 つ目のバージョンでは Windows コンテナーを展開の選択肢として使用することです。 2 つ目のバージョンには、イメージ管理のための Azure Storage Blobs、セキュリティ管理のための Azure Active Directory、アプリケーションの監視と監査のための Azure Application Insights などのいくつかの追加機能もあります。

    フィードバックの送信

    このガイドは、既存の .NET Web アプリケーションの改善と最新化のオプションについて理解できるように設計されています。 ガイドと関連するサンプル アプリケーションは進化しています。 皆様からのご意見をお待ちしております。 このガイドを改善する方法についてご意見があれば、dotnet-architecture-ebooks-feedback@service.microsoft.com に送信してください。