Java Web アプリのコンテナ化と Azure Kubernetes Service への移行

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

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

  • (Linux サーバーの) Apache Tomcat 上の Java Web アプリをコンテナー化し、それらを AKS の Linux コンテナーにデプロイする。
  • (Linux サーバーの) Apache Tomcat 上の Java Web アプリをコンテナー化し、それらを App Service の Linux コンテナーにデプロイする。 詳細情報
  • ASP.NET アプリをコンテナー化し、それらを AKS の Windows コンテナーにデプロイする。 詳細情報
  • ASP.NET アプリをコンテナー化し、それらを App Service の Windows コンテナーにデプロイする。 詳細情報

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

  • アプリケーションを検出する: このツールは、(Apache Tomcat で実行されている) Java Web アプリケーションを実行しているアプリケーション サーバーにリモート接続し、アプリケーション コンポーネントを検出します。 このツールにより、アプリケーションのコンテナー イメージを作成するために使用できる 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 ツールをインストールします。
  • Java Web アプリケーションを検出します。
  • コンテナー イメージをビルドします。
  • コンテナー化されたアプリケーションを AKS にデプロイします。

Note

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

前提条件

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

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

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

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

Windows コンピューターは、直接またはプロキシ経由でインターネットにアクセスできる必要があります。
アプリケーション サーバー - コンテナー化する Java アプリケーションを実行するサーバーのポート 22 で Secure Shell (SSH) 接続を有効にします。
Java Web アプリケーション このツールは、現在以下をサポートしています。

- Tomcat 8 以降で実行されるアプリケーション。
- Ubuntu Linux 16.04/18.04/20.04、Debian 7/8、CentOS 6/7、Red Hat Enterprise Linux 5/6/7 上のアプリケーション サーバー。
- Java バージョン 7 以降を使用するアプリケーション。

このツールは現在以下をサポートしていません。

- 複数の Tomcat インスタンスを実行するアプリケーション サーバー

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

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

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

  • Azure サブスクリプションの所有者アクセス許可
  • Azure Active Directory アプリを登録するためのアクセス許可

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

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

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

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

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

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

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

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

    Azure portal でロール割り当てページを追加します。

  6. Azure アカウントには、Azure Active Directory アプリを登録するためのアクセス許可も必要です。

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

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

    [ユーザー設定] で、ユーザーが Active Directory アプリを登録できることを確認する。

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

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

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

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

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

    .\AppContainerizationInstaller.ps1
    

App Containerization ツールを起動する

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

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

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

  3. サインイン画面で、コンピューターのローカル管理者アカウントを使用してサインインします。

  4. コンテナー化するアプリケーションの種類として [Java web apps on Tomcat](Tomcat 上の Java Web アプリ) を選択します。

  5. ターゲットの Azure サービスを指定するには、 [Azure Kubernetes Service 上のコンテナー] を選択します。 App Containerization ツールの既定のロードアップ。

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

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

Azure へのサインイン

[サインイン] をクリックして Azure アカウントにログインします。

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

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

    デバイス コードを示すモーダル。

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

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

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

Java Web アプリケーションを検出する

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

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

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

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

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

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

    検出された Java Web アプリケーションのスクリーンショット。

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

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

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

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

  1. [アプリの構成] をクリックして、検出された構成を確認します。

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

  3. パラメーター化する構成を選択した後、 [適用] をクリックします。

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

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

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

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

  2. [フォルダーの追加] をクリックし、追加するフォルダーのパスを指定します。

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

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

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

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

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

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

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

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

  3. Application Insights の構成: コードをインストルメント化することなく、App Service で実行されている Java アプリの監視を有効にすることができます。 このツールを使用すると、Java スタンドアロン エージェントがコンテナー イメージの一部としてインストールされます。 Java エージェントがデプロイ中に構成されると、Application Insights での監視に使用できる、アプリケーションに関する多くの要求、依存関係、ログ、およびメトリックが自動的に収集されます。 このオプションは、すべての Java アプリケーションで既定で有効になっています。

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

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

  6. ビルドが完了したら、 [続行] をクリックしてデプロイ設定を指定します。

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

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

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

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

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

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

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

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

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

  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 フォルダーにあります。

次のステップ

  • (Linux サーバーの) Apache Tomcat 上の Java Web アプリをコンテナー化し、それらを App Service の Linux コンテナーにデプロイする。 詳細情報
  • ASP.NET Web アプリをコンテナー化し、それらを AKS の Windows コンテナーにデプロイする。 詳細情報
  • ASP.NET Web アプリをコンテナー化し、それらを Azure App Service の Windows コンテナーにデプロイする。 詳細情報
  • Azure Kubernetes Service で Oracle WebLogic Server を実行するためのソリューションとは 詳細情報
  • AKS 上の Open Liberty と WebSphere Liberty。 詳細情報