次の方法で共有


ASP.NET アプリのコンテナ化と Azure Kubernetes Service への移行

この記事では、Azure Migrate: App Containerization ツールを使用して、ASP.NET アプリケーションをコンテナー化し、それらを Azure Kubernetes Service (AKS) に移行する方法について説明します。 このコンテナ化プロセスでは、コードベースへのアクセスは不要で、既存のアプリケーションを簡単な方法でコンテナ化できます。 このツールは、サーバー上のアプリケーションの実行状態を使用して動作し、アプリケーション コンポーネントを判別し、それらをコンテナー イメージにパッケージ化できるように支援します。 コンテナー化されたアプリケーションは、Azure Kubernetes Service (AKS) にデプロイできます。

Azure Migrate: App Containerization ツールは、現時点で以下をサポートしています。

Azure Migrate: App Containerization ツールを使用すると、以下を行うことができます。

  • アプリケーションを検出する: このツールは、ASP.NET アプリケーションを実行しているアプリケーション サーバーにリモート接続し、アプリケーション コンポーネントを検出します。 このツールにより、アプリケーションのコンテナー イメージを作成するために使用できる Dockerfile が作成されます。
  • コンテナー イメージをビルドする: Dockerfile を検査し、アプリケーションの要件に従ってさらにカスタマイズし、それを使用してアプリケーション コンテナー イメージをビルドできます。 アプリケーション コンテナー イメージは、指定した Azure Container Registry にプッシュされます。
  • Azure Kubernetes Service へのデプロイ: その後で、このツールはコンテナー化されたアプリケーションを Azure Kubernetes Service クラスターにデプロイするために必要な Kubernetes リソース定義の YAML ファイルを生成します。 YAML ファイルをカスタマイズし、それらを使用して AKS にアプリケーションをデプロイできます。

注意

Azure Migrate: App Containerization ツールを使用すると、アプリケーション サーバー上の特定のアプリケーションの種類 (ASP.NET と Apache Tomcat 上の Java Web アプリ) とそのコンポーネントを検出できます。 オンプレミスのマシンで実行されているサーバーと、アプリ、ロール、機能のインベントリを検出するには、Azure Migrate: 検出および評価機能を使用します。 詳細情報

どのアプリケーションも大幅な再設計なしでコンテナーに直接シフトしてもメリットを得られませんが、既存のアプリを再記述せずにコンテナーに移動した場合、次のようなメリットがあります。

  • インフラストラクチャ使用率の向上 - コンテナーを使用すると、複数のアプリケーションがリソースを共有でき、それらのアプリケーションを同じインフラストラクチャでホストできます。 これにより、インフラストラクチャを統合し、使用率を向上させることができます。
  • 簡略化された管理 - AKS や App Service などの最新のマネージド プラットフォームでアプリケーションをホストすることにより、管理作業を簡略化できます。 所有するインフラストラクチャでこれまで実行していた、インフラストラクチャの保守および管理のプロセスを廃止または削減することで、これを実現できます。
  • アプリケーションの移植性 - コンテナー仕様の形式およびプラットフォームの導入と標準化が改善されたため、アプリケーションの移植性は問題になりません。
  • DevOps を使用した最新の管理の導入 - 管理とセキュリティおよび DevOps への移行のための最新の手法を導入し、それらに基づいて標準化できます。

このチュートリアルで学習する内容は次のとおりです。

  • Azure アカウントを設定します。
  • Azure Migrate: App Containerization ツールをインストールします。
  • ASP.NET アプリケーションを検出します。
  • コンテナー イメージをビルドします。
  • コンテナー化されたアプリケーションを AKS にデプロイします。

Note

チュートリアルでは、概念実証をすばやく設定できるように、シナリオの最も簡単なデプロイ パスを示します。 チュートリアルではできるだけ既定のオプションを使用しており、使用可能な設定とパスをすべて示しているわけではありません。

前提条件

このチュートリアルを始める前に、次の準備が必要です。

要件 詳細
ツールをインストールするコンピューターを特定する Azure Migrate: App Containerization ツールをインストールして実行する Windows コンピューター。 Windows コンピューターとして、サーバー (Windows Server 2016 以降) またはクライアント (Windows 10) オペレーティング システムを使用できます。これは、このツールをデスクトップでも実行できることを意味します。

ツールを実行する Windows コンピューターには、コンテナー化する ASP.NET アプリケーションをホストするサーバーまたは仮想マシンへのネットワーク接続が必要です。

アプリケーション アーティファクトを保存するために、Azure Migrate: App Containerization ツールを実行する Windows コンピューターで 6 GB の領域が使用可能であることを確認します。

Windows コンピューターは、直接またはプロキシ経由でインターネットにアクセスできる必要があります。

App Containerization ヘルパー ツールとアプリケーション サーバーを実行するコンピューターに Microsoft Web Deploy ツールをインストールします (まだインストールされていない場合)。 このツールは、こちらからダウンロードできます。
アプリケーション サーバー アプリケーション サーバーで PowerShell リモート処理を有効にする: アプリケーション サーバーにサインインし、PowerShell リモート処理を有効にするこちらの手順に従います。

PowerShell 5.1 がアプリケーション サーバーにインストールされていることを確認します。 「WMF 5.1 のインストールと構成」の手順に従って、PowerShell 5.1 をダウンロードし、アプリケーション サーバーにインストールします。

App Containerization ヘルパー ツールとアプリケーション サーバーを実行するコンピューターに Microsoft Web Deploy ツールをインストールします (まだインストールされていない場合)。 このツールは、こちらからダウンロードできます。
ASP.NET アプリケーション このツールでは現在、次のものがサポートされています。
- Microsoft .NET Framework 3.5 以降を使用する ASP.NET アプリケーション。
- Windows Server 2012 R2 以降が実行されるアプリケーション サーバー (アプリケーション サーバーで、PowerShell バージョン 5.1 が実行されている必要があります)。
- インターネット インフォメーション サービス (IIS) 7.5 以降で実行されるアプリケーション。

このツールでは現在、次のものはサポートされていません。
- Windows 認証が必要なアプリケーション (現在、App Containerization ツールは gMSA をサポートしていません)。
- IIS の外部でホストされる他の Windows サービスに依存するアプリケーション。

Azure ユーザー アカウントを準備する

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

サブスクリプションがセットアップされたら、以下を備えた Azure ユーザー アカウントが必要になります。

  • Azure サブスクリプションの所有者アクセス許可。
  • Microsoft Entra アプリを登録できるアクセス許可。

無料の Azure アカウントを作成したばかりであれば、自分のサブスクリプションの所有者になっています。 サブスクリプションの所有者でない場合は、所有者と協力して、次のようにアクセス許可を割り当てます。

  1. Azure portal で "サブスクリプション" を検索し、 [サービス][サブスクリプション] を選択します。

    Azure サブスクリプションを検索するための検索ボックスのスクリーンショット。

  2. [サブスクリプション] ページで、Azure Migrate プロジェクトを作成するサブスクリプションを選択します。

  3. [アクセス制御 (IAM)] を選択します。

  4. [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  5. 次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

    設定 Value
    Role 所有者
    アクセスの割り当て先 User
    メンバー azmigrateuser (この例では)

    Azure portal の [ロールの割り当てを追加] ページのスクリーンショット。

  6. Azure アカウントには、Microsoft Entra アプリを登録できるアクセス許可も必要です。

  7. Azure portal で、[Microsoft Entra ID]>[ユーザー]>[ユーザー設定] に移動します。

  8. [ユーザー設定] で、Microsoft Entra ユーザーがアプリケーションを登録できることを確認します (既定で [はい] に設定されています)。

    [ユーザー設定] でユーザーが Active Directory アプリを登録できるか確認するスクリーンショット。

  9. [アプリの登録] 設定が [いいえ] に設定されている場合は、テナントまたはグローバル管理者に、必要なアクセス許可を割り当てるよう依頼してください。 テナントおよび全体管理者は、Microsoft Entra アプリの登録を許可する目的でアプリケーション開発者ロールをアカウントに割り当てることもできます。 詳細情報 を参照してください。

Azure Migrate: App Containerization ツールをダウンロードしてインストールする

  1. Windows コンピューターで Azure Migrate: App Containerization のインストーラーをダウンロードします。

  2. 管理者モードで PowerShell を起動し、PowerShell ディレクトリをインストーラーが格納されているフォルダーに変更します。

  3. コマンドを使用してインストール スクリプトを実行します。

    .\AppContainerizationInstaller.ps1
    

Note

Windows Server 2022 の場合は、135 行目を編集し、機能一覧から PowerShell-ISE を削除します。これはサポートされなくなったためです。

App Containerization ツールを起動する

  1. App Containerization ツールを実行する Windows マシンに接続できる任意のマシンでブラウザーを開き、ツールの URL: https://<コンピューター名または IP アドレス>: 44369 を開きます。

    または、アプリのショートカットを選択して、デスクトップからアプリを開くこともできます。

  2. 接続がプライベートではないことを示す警告が表示された場合は、[詳細設定] を選択し、Web サイトに進むことを選択します。 この警告は、Web インターフェイスが自己署名の TLS/SSL 証明書を使用している場合に表示されます。

  3. [サインイン] 画面で、マシン上のローカル管理者アカウントを使用してサインインします。

  4. コンテナー化するアプリケーションの種類として [ASP.NET Web アプリ] を選択します。

  5. ターゲットの Azure サービスを指定するには、 [Azure Kubernetes Service 上のコンテナー] を選択します。

    App Containerization ツールの既定のロードアップのスクリーンショット。

ツールの前提条件を満たす

  1. ライセンス条項に同意し、サード パーティの情報を確認します。
  2. ツールの [web app]\(Web アプリ\) >[前提条件のセットアップ] で、次の手順を実行します。
    • 接続: ツールによって、Windows コンピューターがインターネットにアクセスできるかどうかがチェックされます。 コンピューターがプロキシを使用する場合:
      • [プロキシの設定] を選択し、プロキシ アドレス (IP アドレスまたは FQDN の形式) とリスニング ポートを指定します。
      • プロキシで認証が必要な場合は、資格情報を指定します。
      • サポートされるのは HTTP プロキシのみです。
      • プロキシの詳細を追加したか、プロキシまたは認証、あるいはその両方を無効にした場合は、[保存] を選択して接続チェックをもう一度トリガーします。
    • 更新プログラムをインストールする: ツールによって、最新の更新プログラムが自動的にチェックされ、インストールされます。 こちらから、最新バージョンのツールを手動でインストールすることもできます。
    • Microsoft Web Deploy ツールをインストールする: ツールによって、Azure Migrate: App Containerization ツールを実行する Windows コンピューターに Microsoft Web Deploy ツールがインストールされているかどうかがチェックされます。
    • PowerShell リモート処理を有効にする: ツールによって、コンテナー化する ASP.NET アプリケーションを実行するアプリケーション サーバーで PowerShell リモート処理が有効になっていることが確認され通知されます。

Azure へのサインイン

  1. [サインイン] を選択して、Azure アカウントにサインインします。

  2. Azure で認証するには、デバイス コードが必要です。 [サインイン] を選択すると、デバイス コードを含むモーダルが開きます。

  3. [コードのコピーとサインイン] を選択してデバイス コードをコピーし、新しいブラウザー タブで Azure サインイン プロンプトを開きます。表示されない場合は、ブラウザーでポップアップ ブロックを無効にしてあることを確認します。

    デバイス コードを示すモーダルのスクリーンショット。

  4. 新しいタブで、デバイス コードを貼り付け、Azure アカウントの資格情報を使用してサインインを完了します。 サインインが完了したら、ブラウザー タブを閉じ、App Containerization ツールの画面に戻ることができます。

  5. 使用する Azure テナントを選択します。

  6. 使用する Azure サブスクリプションを指定します。

ASP.NET アプリケーションを検出する

App Containerization ヘルパー ツールは、指定された資格情報を使用してアプリケーション サーバーにリモート接続し、アプリケーション サーバーでホストされている ASP.NET アプリケーションを検出しようとします。

  1. ASP.NET アプリケーションを実行するサーバーの IP アドレス/FQDN と資格情報を指定します。アプリケーション検出のために、これらを使用してサーバーにリモート接続する必要があります。

    • 指定する資格情報は、アプリケーション サーバーのローカル管理者 (Windows) のものである必要があります。
    • ドメイン アカウントの場合 (ユーザーはアプリケーション サーバーの管理者である必要があります)、<ドメイン\ユーザー名> の形式で、ユーザー名の前にドメイン名をプレフィックスとして付加します。
    • アプリケーションの検出は、最大 5 台のサーバーに対して同時に実行できます。
  2. [検証] を選択して、ツールが実行されているマシンからアプリケーション サーバーに到達できること、および資格情報が有効であることを確認します。 検証が正常に完了すると、状態列に [マップ済み] として状態が表示されます。

    サーバー IP と資格情報のスクリーンショット。

  3. [続行] を選択して、選択したアプリケーション サーバーに対するアプリケーションの検出を開始します。

  4. アプリケーションの検出が正常に完了した後、コンテナー化するアプリケーションの一覧を選択できます。

    検出された ASP.NET アプリケーションのスクリーンショット。

  5. チェックボックスを使用して、コンテナー化するアプリケーションを選択します。

  6. コンテナー名を指定する: 選択した各アプリケーションのターゲット コンテナーの名前を指定します。 コンテナー名は <名前:タグ> として指定する必要があります。タグはコンテナー イメージに使用されます。 たとえば、appname:v1 というターゲット コンテナー名を指定できます。

アプリケーションの構成をパラメーター化する

構成をパラメーター化すると、デプロイ時のパラメーターとしてその構成を使用できます。 これにより、アプリケーションをデプロイするときに、この設定を構成できます。これは、コンテナー イメージで設定を特定の値にハードコーディングするのとは対照的です。 たとえば、このオプションは、データベース接続文字列などのパラメーターに便利です。

  1. [app configurations](アプリの構成) を選択して、検出された構成を確認します。

  2. チェックボックスをオンにして、検出されたアプリケーションの構成をパラメーター化します。

  3. パラメーター化する構成を選んだ後、[適用] を選びます。

    アプリ構成パラメーター化の ASP.NET アプリケーションのスクリーンショット。

ファイル システムの依存関係を外部化する

アプリケーションで使用する他のフォルダーを追加できます。 それらをコンテナー イメージの一部にするか、Azure ファイル共有の永続ボリュームを使用して外部化するかを指定します。 永続ボリュームの使用は、コンテナーの外部に状態を保存する、またはファイル システムに他の静的コンテンツを保存するステートフル アプリケーションに適しています。 詳細については、こちらを参照してください

  1. [アプリ フォルダー] の下の [編集] を選び、検出されたアプリケーション フォルダーを確認します。 検出されたアプリケーション フォルダーは、アプリケーションに必要な必須のアーティファクトとして識別され、コンテナー イメージにコピーされます。

  2. [フォルダーの追加] を選んで、追加するフォルダーのパスを指定します。

  3. 同じボリュームに複数のフォルダーを追加するには、コンマ (,) 区切りの値を指定します。

  4. フォルダーを永続ボリューム上のコンテナーの外部に保存する場合は、ストレージ オプションとして [永続ボリューム] を選択します。

  5. アプリケーション フォルダーを確認してから、[保存] を選択します。 アプリのボリューム ストレージを選択するスクリーンショット。

  6. [続行] を選択して、コンテナー イメージのビルド フェーズに進みます。

コンテナー イメージの構築

重要

AKS 1.23 以降を使用している場合は、Docker イメージをビルドする前に、スクリプトを次に示すように編集してシームレスな移行を確保します。

次のスクリプトを変更して

# Run entrypoint script.
COPY ./Entryscript.ps1 c:/Entryscript.ps1
ENTRYPOINT powershell c:/Entryscript.ps1

to

# Run entrypoint script.
COPY ["./Entryscript.ps1", "c:/Entryscript.ps1"]
ENTRYPOINT ["powershell", "c:/Entryscript.ps1"]

コンテナー イメージをビルドするには、次の手順に従います。

  1. Azure Container Registry を選択する: ドロップダウンを使用して、アプリのコンテナー イメージのビルドおよび保存に使用する Azure Container Registry を選択します。 既存の Azure Container Registry を使用すること、または [Create new registry](新しいレジストリの作成) オプションを使用して、新しいレジストリを作成することができます。

    アプリの ACR 選択のスクリーンショット。

  2. Dockerfile を確認する: 選択された各アプリケーションのコンテナー イメージをビルドするために必要な Dockerfile は、ビルド ステップの開始時に生成されます。 [確認] を選択して、Dockerfile を確認します。 ビルド プロセスを開始する前に、確認ステップで、必要なカスタマイズを Dockerfile に追加して変更を保存することもできます。

  3. ビルド プロセスをトリガーする: イメージをビルドするアプリケーションを選択し、[ビルド] を選択します。 [ビルド] を選択すると、各アプリケーションのコンテナー イメージのビルドが開始されます。 このツールはビルドの状態を継続的に監視します。ビルドが正常に完了したら、次の手順に進むことができます。

  4. ビルドの状態を追跡する: 状態列の下にある [進行中のビルド] リンクを選択することによって、ビルド ステップの進行状況を監視することもできます。 ビルド プロセスをトリガーした後、リンクがアクティブになるまで数分かかります。

  5. ビルドが完了したら、[続行] を選んでデプロイの設定を指定します。

    アプリのコンテナー イメージのビルドが完了したスクリーンショット。

コンテナー化されたアプリを AKS にデプロイする

コンテナー イメージがビルドされたら、次の手順は、Azure Kubernetes Service (AKS) にアプリケーションをコンテナーとしてデプロイすることです。

  1. Azure Kubernetes Service クラスターを選択する: アプリケーションのデプロイ先の AKS クラスターを指定します。

    • 選択する AKS クラスターには、Windows ノード プールが必要です。
    • イメージを保存するために選択した Azure Container Registry からイメージをプルできるように、クラスターを構成する必要があります。
      • Azure CLI で次のコマンドを実行して、ACR に AKS クラスターをアタッチします。
        az aks update -n <cluster-name> -g <cluster-resource-group> --attach-acr <acr-name>
        
    • AKS クラスターがない、またはアプリケーションをデプロイする新しい AKS クラスターを作成する場合は、[新しい AKS クラスターの作成] を選択することによって、ツールから作成することを選択できます。
      • ツールを使用して作成される AKS クラスターは、Windows ノード プールを使用して作成されます。 クラスターは、前に作成した Azure Container Registry からイメージをプルできるように構成されます ([create new registry](新しいレジストリの作成) オプションが選択されている場合)。
    • AKS クラスターを選択してから、[続行] を選択します。
  2. シークレット ストアを指定する: アプリケーション構成のパラメーター化を選択した場合は、アプリケーションに使用するシークレット ストアを指定します。 アプリケーション シークレットの管理には、Azure Key Vault または App Service アプリケーションの設定を選択できます。 詳細情報

    • シークレットを管理するための App Service アプリケーション設定を選択した場合は、[続行] を選択します。
    • アプリケーション シークレットの管理に Azure Key Vault を使用する場合は、使用する Azure Key Vault を指定します。
      • Azure Key Vault がない、または新しい Key Vault を作成する場合は、[新しい Azure Key Vault の作成] を選択することによって、ツールから作成することを選択できます。
      • このツールを使用すると、Key Vault を通じてシークレットを管理するために必要なアクセス許可が、自動的に割り当てられます。
  3. Azure ファイル共有を指定する: さらにフォルダーを追加し、[永続ボリューム] オプションを選択した場合は、デプロイ プロセス中に Azure Migrate: App Containerization ツールで使用する必要がある Azure ファイル共有を指定します。 永続ボリューム ストレージ用に構成されたアプリケーション フォルダーをコピーするために、ツールにより、この Azure ファイル共有に新しいディレクトリが作成されます。 アプリケーションのデプロイが完了すると、ツールにより、作成されたディレクトリが削除され、Azure ファイル共有がクリーンアップされます。

    • Azure ファイル共有がないか、または新しい Azure ファイル共有を作成する場合は、[新しいストレージ アカウントとファイル共有の作成] を選択することによって、ツールから作成することを選択できます。
  4. アプリケーションのデプロイ構成: 上記の手順が完了したら、アプリケーションのデプロイ構成を指定する必要があります。 アプリケーションのデプロイをカスタマイズするには、 [構成] を選択します。 構成ステップでは、次のカスタマイズを行うことができます。

    • プレフィックス文字列: AKS クラスター内のコンテナー化されたアプリケーションに対して作成されるすべてのリソースの名前に使用するプレフィックス文字列を指定します。
    • SSL 証明書: アプリケーションで https サイト バインドが必要な場合は、バインドに使用する証明書を含む PFX ファイルを指定します。 PFX ファイルをパスワードで保護することはできません。また、元のサイトで複数のバインドを使用することはできません。
    • レプリカ セット: コンテナー内で実行する必要があるアプリケーション インスタンス (ポッド) の数を指定します。
    • ロード バランサーの種類: コンテナー化されたアプリケーションにパブリック ネットワークから到達できるようにする場合は、 [外部] を選択します。
    • アプリケーションの構成: パラメーター化されたアプリケーションの構成では、現在のデプロイに使用する値を指定します。
    • ストレージ: 永続ボリューム ストレージ用に構成されているすべてのアプリケーション フォルダーについて、ボリュームをアプリケーション インスタンス間で共有するか、コンテナー内の各インスタンスで個別に初期化するかを指定します。 既定では、永続ボリューム上のすべてのアプリケーション フォルダーは、共有として構成されます。
    • [適用] を選択してデプロイ構成を保存します。
    • [続行] を選択してアプリケーションをデプロイします。

    デプロイ アプリ構成のスクリーンショット。

  5. アプリケーションをデプロイする: アプリケーションのデプロイ構成が保存されると、ツールによって、アプリケーションの Kubernetes デプロイ YAML が生成されます。

    • [確認] を選択して、アプリケーションの Kubernetes デプロイ YAML を確認およびカスタマイズします。

    • デプロイするアプリケーションを選択します。

    • [デプロイ] を選択して、選択されたアプリケーションのデプロイを開始します。

      アプリのデプロイ構成のスクリーンショット。

    • アプリケーションがデプロイされたら、[デプロイの状態] 列を選択して、アプリケーション用にデプロイされたリソースを追跡できます。

生成されたアーティファクトをダウンロードする

Dockerfile や Kubernetes YAML 仕様ファイルなど、アプリケーションをビルドして AKS にデプロイするために使用されるすべてのアーティファクトは、ツールを実行しているコンピューターに保存されます。 アーティファクトは C:\ProgramData\Microsoft Azure Migrate App Containerization にあります。

アプリケーション サーバーごとに 1 つのフォルダーが作成されます。 このフォルダーに移動すると、コンテナー化プロセスで使用されたすべての中間アーティファクトを確認およびダウンロードできます。 アプリケーション サーバーに対応するフォルダーは、特定のサーバーに対してツールの実行を開始するたびにクリーンアップされます。

問題のトラブルシューティング

ツールに関する問題をトラブルシューティングするには、App Containerization ツールを実行している Windows コンピューターにあるログ ファイルを確認します。 ツールのログ ファイルは C:\ProgramData\Microsoft Azure Migrate App Containerization\Logs フォルダーにあります。

次のステップ