ASP.NET アプリのコンテナ化と Azure Kubernetes Service への移行
この記事では、Azure Migrate: App Containerization ツールを使用して、ASP.NET アプリケーションをコンテナー化し、それらを Azure Kubernetes Service (AKS) に移行する方法について説明します。 このコンテナー化プロセスでは、コードベースへのアクセスは不要で、既存のアプリケーションを簡単な方法でコンテナー化できます。 このツールは、サーバー上のアプリケーションの実行状態を使用して動作し、アプリケーション コンポーネントを判別し、それらをコンテナー イメージにパッケージ化できるように支援します。 コンテナー化されたアプリケーションは、Azure Kubernetes Service (AKS) にデプロイできます。
Azure Migrate: App Containerization ツールは、現時点で以下をサポートしています。
- ASP.NET アプリをコンテナー化し、それらを Azure Kubernetes Service の Windows コンテナーにデプロイする。
- ASP.NET アプリをコンテナー化し、それらを Azure App Service の Windows コンテナーにデプロイする。 詳細情報
- (Linux サーバーの) Apache Tomcat 上の Java Web アプリをコンテナー化し、それらを AKS の Linux コンテナーにデプロイする。 詳細情報
- (Linux サーバーの) Apache Tomcat 上の Java Web アプリをコンテナー化し、それらを App Service の Linux コンテナーにデプロイする。 詳細情報
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 リモート処理を有効にします。 アプリケーション サーバーで Windows Server 2008 R2 が実行されている場合は、そのアプリケーション サーバーに PowerShell 5.1 がインストールされていることを確認します。 こちらの手順に従って、PowerShell 5.1 をダウンロードし、アプリケーション サーバーにインストールします。 App Containerization ヘルパー ツールとアプリケーション サーバーを実行するコンピューターに Microsoft Web Deploy ツールをインストールします (まだインストールされていない場合)。 このツールは、こちらからダウンロードできます。 |
| ASP.NET アプリケーション | このツールは、現在以下をサポートしています。 - Microsoft .NET Framework 3.5 以降を使用する ASP.NET アプリケーション。 - Windows Server 2008 R2 以降を実行するアプリケーション サーバー (アプリケーション サーバーで、PowerShell バージョン 5.1 を実行する必要があります)。 - インターネット インフォメーション サービス (IIS) 7.5 以降で実行されるアプリケーション。 このツールは現在以下をサポートしていません。 - Windows 認証を必要とするアプリケーション (AKS は、現在 gMSA をサポートしていません)。 - IIS の外部でホストされる他の Windows サービスに依存するアプリケーション。 |
Azure ユーザー アカウントを準備する
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
サブスクリプションがセットアップされたら、以下を備えた Azure ユーザー アカウントが必要になります。
- Azure サブスクリプションの所有者アクセス許可
- Azure Active Directory アプリを登録するためのアクセス許可
無料の Azure アカウントを作成したばかりであれば、自分のサブスクリプションの所有者になっています。 サブスクリプションの所有者でない場合は、所有者と協力して、次のようにアクセス許可を割り当てます。
Azure portal で "サブスクリプション" を検索し、 [サービス] で [サブスクリプション] を選択します。

[サブスクリプション] ページで、Azure Migrate プロジェクトを作成するサブスクリプションを選択します。
[アクセス制御 (IAM)] を選択します。
[追加][ロールの割り当ての追加] の順に選択して、[ロールの割り当ての追加] ページを開きます。
次のロールを割り当てます。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。
設定 値 Role 所有者 アクセスの割り当て先 User メンバー azmigrateuser (この例では) 
Azure アカウントには、Azure Active Directory アプリを登録するためのアクセス許可も必要です。
Azure portal で、 [Azure Active Directory]>[ユーザー]>[ユーザー設定] に移動します。
[ユーザー設定] で、Azure AD ユーザーがアプリケーションを登録できることを確認します (既定で [はい] に設定されています)。

[アプリの登録] 設定が [いいえ] に設定されている場合は、テナントまたはグローバル管理者に、必要なアクセス許可を割り当てるよう依頼してください。 テナントまたはグローバル管理者は、Azure Active Directory アプリの登録を許可するために、アプリケーション開発者ロールをアカウントに割り当てることもできます。 詳細については、こちらを参照してください。
Azure Migrate: App Containerization ツールをダウンロードしてインストールする
Windows コンピューターで Azure Migrate: App Containerization のインストーラーをダウンロードします。
管理者モードで PowerShell を起動し、PowerShell ディレクトリをインストーラーが格納されているフォルダーに変更します。
コマンドを使用してインストール スクリプトを実行します。
.\AppContainerizationInstaller.ps1
App Containerization ツールを起動する
App Containerization ツールを実行する Windows マシンに接続できる任意のマシンでブラウザーを開き、ツールの URL: https://<コンピューター名または IP アドレス>: 44369 を開きます。
または、アプリのショートカットを選択して、デスクトップからアプリを開くこともできます。
接続がプライベートではないことを示す警告が表示された場合は、[詳細設定] をクリックして、Web サイトに進むことを選択します。 この警告は、Web インターフェイスが自己署名の TLS/SSL 証明書を使用している場合に表示されます。
サインイン画面で、コンピューターのローカル管理者アカウントを使用してサインインします。
コンテナー化するアプリケーションの種類として [ASP.NET Web アプリ] を選択します。
ターゲットの Azure サービスを指定するには、 [Azure Kubernetes Service 上のコンテナー] を選択します。

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

新しいタブで、デバイス コードを貼り付け、Azure アカウントの資格情報を使用してサインインを完了します。 サインインが完了したら、[ブラウザー] タブを閉じて、App Containerization ツールの Web インターフェイスに戻ることができます。
使用する Azure テナントを選択します。
使用する Azure サブスクリプションを指定します。
ASP.NET アプリケーションを検出する
App Containerization ヘルパー ツールは、指定された資格情報を使用してアプリケーション サーバーにリモート接続し、アプリケーション サーバーでホストされている ASP.NET アプリケーションを検出しようとします。
ASP.NET アプリケーションを実行するサーバーの IP アドレス/FQDN と資格情報を指定します。アプリケーション検出のために、これらを使用してサーバーにリモート接続する必要があります。
- 指定する資格情報は、アプリケーション サーバーのローカル管理者 (Windows) のものである必要があります。
- ドメイン アカウントの場合 (ユーザーはアプリケーション サーバーの管理者である必要があります)、<ドメイン\ユーザー名> の形式で、ユーザー名の前にドメイン名をプレフィックスとして付加します。
- アプリケーションの検出は、最大 5 台のサーバーに対して同時に実行できます。
[検証] をクリックして、ツールを実行するコンピューターからアプリケーション サーバーに到達できること、および資格情報が有効であることを確認します。 検証が正常に完了すると、状態列に [マップ済み] として状態が表示されます。

[続行] をクリックして、選択したアプリケーション サーバーでアプリケーションの検出を開始します。
アプリケーションの検出が正常に完了した後、コンテナー化するアプリケーションの一覧を選択できます。

チェックボックスを使用して、コンテナー化するアプリケーションを選択します。
コンテナー名を指定する: 選択した各アプリケーションのターゲット コンテナーの名前を指定します。 コンテナー名は <名前:タグ> として指定する必要があります。タグはコンテナー イメージに使用されます。 たとえば、appname:v1 というターゲット コンテナー名を指定できます。
アプリケーションの構成をパラメーター化する
構成をパラメーター化すると、デプロイ時のパラメーターとしてその構成を使用できます。 これにより、アプリケーションをデプロイするときに、この設定を構成できます。これは、コンテナー イメージで設定を特定の値にハードコーディングするのとは対照的です。 たとえば、このオプションは、データベース接続文字列などのパラメーターに便利です。
[アプリの構成] をクリックして、検出された構成を確認します。
チェックボックスをオンにして、検出されたアプリケーションの構成をパラメーター化します。
パラメーター化する構成を選択した後、 [適用] をクリックします。

ファイル システムの依存関係を外部化する
アプリケーションで使用する他のフォルダーを追加できます。 それらをコンテナー イメージの一部にするか、Azure ファイル共有の永続ボリュームを使用して外部化するかを指定します。 永続ボリュームの使用は、コンテナーの外部に状態を保存する、またはファイル システムに他の静的コンテンツを保存するステートフル アプリケーションに適しています。 詳細情報
[App Folders](アプリ フォルダー) の下の [編集] をクリックして、検出されたアプリケーション フォルダーを確認します。 検出されたアプリケーション フォルダーは、アプリケーションに必要な必須のアーティファクトとして識別され、コンテナー イメージにコピーされます。
[フォルダーの追加] をクリックし、追加するフォルダーのパスを指定します。
同じボリュームに複数のフォルダーを追加するには、コンマ (
,) 区切りの値を指定します。フォルダーを永続ボリューム上のコンテナーの外部に保存する場合は、ストレージ オプションとして [永続ボリューム] を選択します。
アプリケーション フォルダーを確認した後、 [保存] をクリックします。

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

Dockerfile を確認する: 選択した各アプリケーションのコンテナー イメージをビルドするために必要な Dockerfile がビルド ステップの開始時に生成されます。 [確認] をクリックして Dockerfile を確認します。 ビルド プロセスを開始する前に、確認ステップで、必要なカスタマイズを Dockerfile に追加して変更を保存することもできます。
ビルド プロセスをトリガーする: イメージをビルドするアプリケーションを選択し、 [ビルド] をクリックします。 [ビルド] をクリックすると、各アプリケーションのコンテナー イメージのビルドが開始されます。 このツールはビルドの状態を継続的に監視します。ビルドが正常に完了したら、次の手順に進むことができます。
ビルドの状態を追跡する: 状態列の下にある [進行中のビルド] リンクをクリックすることで、ビルド ステップの進行状況を監視することもできます。 ビルド プロセスをトリガーした後、リンクがアクティブになるまで数分かかります。
ビルドが完了したら、 [続行] をクリックしてデプロイ設定を指定します。

コンテナー化されたアプリを AKS にデプロイする
コンテナー イメージがビルドされたら、次の手順は、Azure Kubernetes Service (AKS) にアプリケーションをコンテナーとしてデプロイすることです。
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>
- Azure CLI で次のコマンドを実行して、ACR に AKS クラスターをアタッチします。
- AKS クラスターがない場合、またはアプリケーションをデプロイする新しい AKS クラスターを作成する場合は、 [Create new AKS cluster](新しい AKS クラスターを作成する) をクリックすることで、ツールから作成できます。
- ツールを使用して作成される AKS クラスターは、Windows ノード プールを使用して作成されます。 クラスターは、前に作成した Azure Container Registry からイメージをプルできるように構成されます ([create new registry](新しいレジストリの作成) オプションが選択されている場合)。
- AKS クラスターを選択した後、 [続行] をクリックします。
シークレット ストアを指定する: アプリケーション構成のパラメーター化を選択した場合は、アプリケーションに使用するシークレット ストアを指定します。 アプリケーション シークレットの管理には、Azure Key Vault または App Service アプリケーションの設定を選択できます。 詳細情報
- シークレットを管理するために App Service アプリケーション設定を選択した場合は、 [続行] をクリックします。
- アプリケーション シークレットの管理に Azure Key Vault を使用する場合は、使用する Azure Key Vault を指定します。
- Azure Key Vault がない場合、または新しい Key Vault を作成する場合は、 [Azure Key Vault の新規作成] をクリックして、ツールからの作成を選択できます。
- このツールを使用すると、Key Vault を通じてシークレットを管理するために必要なアクセス許可が、自動的に割り当てられます。
Azure ファイル共有を指定する: さらにフォルダーを追加し、[永続ボリューム] オプションを選択した場合は、デプロイ プロセス中に Azure Migrate: App Containerization ツールで使用する必要がある Azure ファイル共有を指定します。 永続ボリューム ストレージ用に構成されたアプリケーション フォルダーをコピーするために、ツールにより、この Azure ファイル共有に新しいディレクトリが作成されます。 アプリケーションのデプロイが完了すると、ツールにより、作成されたディレクトリが削除され、Azure ファイル共有がクリーンアップされます。
- Azure ファイル共有がない場合、または新しい Azure ファイル共有を作成する場合は、 [Create new Storage Account and file share](新しいストレージ アカウントとファイル共有の作成) をクリックすることで、ツールから作成できます。
アプリケーションのデプロイ構成: 上記の手順が完了したら、アプリケーションのデプロイ構成を指定する必要があります。 [構成] をクリックして、アプリケーションのデプロイをカスタマイズします。 構成ステップでは、次のカスタマイズを行うことができます。
- プレフィックス文字列: AKS クラスター内のコンテナー化されたアプリケーションに対して作成されるすべてのリソースの名前に使用するプレフィックス文字列を指定します。
- SSL 証明書: アプリケーションで https サイト バインドが必要な場合は、バインドに使用する証明書を含む PFX ファイルを指定します。 PFX ファイルをパスワードで保護することはできません。また、元のサイトで複数のバインドを使用することはできません。
- レプリカ セット: コンテナー内で実行する必要があるアプリケーション インスタンス (ポッド) の数を指定します。
- ロード バランサーの種類: コンテナー化されたアプリケーションにパブリック ネットワークから到達できるようにする場合は、 [外部] を選択します。
- アプリケーションの構成: パラメーター化されたアプリケーションの構成では、現在のデプロイに使用する値を指定します。
- ストレージ: 永続ボリューム ストレージ用に構成されているすべてのアプリケーション フォルダーについて、ボリュームをアプリケーション インスタンス間で共有するか、コンテナー内の各インスタンスで個別に初期化するかを指定します。 既定では、永続ボリューム上のすべてのアプリケーション フォルダーは、共有として構成されます。
- [適用] をクリックして、デプロイ構成を保存します。
- [続行] をクリックして、アプリケーションをデプロイします。

アプリケーションをデプロイする: アプリケーションのデプロイ構成が保存されると、ツールによって、アプリケーションの 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 フォルダーにあります。