次の方法で共有


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

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

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

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

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

  • Azure Migrate: App Containerization ツールを使用すると、アプリケーション サーバー上の特定のアプリケーションの種類 (ASP.NET と Apache Tomcat 上の Java Web アプリ) とそのコンポーネントを検出できます。 オンプレミスのマシンで実行されているサーバーと、アプリ、ロール、機能のインベントリを検出するには、Azure Migrate: 検出および評価機能を使用します。 詳細については、こちらをご覧ください
  • アプリ コンテナ化ツールでは、"docs"、"examples"、"host-manager"、"manager"、"ROOT" など、一部の既定の Tomcat Web アプリの検出がスキップされます。

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

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

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

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

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

前提条件

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

要件 細部
ツールをインストールするマシンを特定する 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 または Tomcat 9 上で実行されるアプリケーション。
Ubuntu Linux 16.04/18.04/20.04、Debian 7/8、Red Hat Enterprise Linux 5/6/7 上のアプリケーション サーバー。
- Java 7 または Java 8 を使うアプリケーション。
これ以外のバージョンを使っている場合は、必要なバージョンをサポートするイメージを見つけて、dockerfile を変更してイメージを置き換えます

このツールでは現在、次のものはサポートされていません。

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

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

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

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

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

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

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

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

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

  3. サブスクリプションで、[アクセス制御 (IAM)]>[アクセスの確認] を選択します。

  4. [ アクセスの確認] で、関連するユーザー アカウントを検索します。

  5. [ロールの割り当ての追加]で、[追加]を選択します。

    ユーザー アカウントを検索してアクセスを確認し、ロールを割り当てます。

  6. [ ロールの割り当ての追加] で、所有者ロールを選択し、アカウント (この例では azmigrateuser) を選択します。 [保存] を選択します

    [ロールの割り当ての追加] ページを開き、アカウントにロールを割り当てます。

Azure アカウントには、 Microsoft Entra アプリを登録するためのアクセス許可も必要です。 8. Azure portal で、 Microsoft Entra ID>Users>User Settings に移動します。 9. [ユーザー設定] で、Microsoft Entra ユーザーがアプリケーションを登録できるかどうかを確認します (既定では [はい ] に設定)。

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

重要

Microsoft は、アクセス許可が最も少ないロールを使用することを推奨しています。 これにより、組織のセキュリティが向上します。 グローバル管理者は高い特権を持つロールであり、既存のロールを使用できない場合の緊急シナリオに限定する必要があります。

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

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

  1. Windows マシンに Azure Migrate: App Containerization インストーラーをダウンロードします。

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

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

    .\AppContainerizationInstaller.ps1
    

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

App Containerization ツールを起動する

  1. アプリ コンテナー化ツールを実行している Windows マシンに接続できる任意のコンピューターでブラウザーを開き、ツールの URL ( https:// machine 名または IP アドレス: 44369) を開きます。

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

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

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

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

  5. ターゲットの Azure サービスを指定するには、 Azure App Service の [コンテナー] を選択します。 アプリコンテナ化ツールのデフォルト起動。

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

  1. ライセンス条項に同意し、サード パーティの情報を読みます。
  2. ツール 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. コンテナー名の指定: 選択した各アプリケーションのターゲット コンテナーの名前を指定します。 コンテナー名は、 <name:tag> として指定する必要があります。このタグはコンテナー イメージに使用されます。 たとえば、ターゲット コンテナー名を appname:v1 として指定できます。

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

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

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

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

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

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

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

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

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

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

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

  4. 永続ストレージ上のコンテナーの外部にフォルダーを格納する場合は、ストレージ オプションとして Azure ファイル共有 を選択します。

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

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

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

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

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

管理者ユーザーが有効になっている Azure コンテナー レジストリのみが表示されます。 Azure コンテナー レジストリから Azure App Service にイメージをデプロイするには、管理者アカウントが現在必要です。 詳細については、こちらをご覧ください

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

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

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

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

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

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

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

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

  1. Azure App Service プランを選択します。アプリケーションで使用する Azure App Service プランを指定します。

    • App Service プランがない場合、または使用する新しい App Service プランを作成する場合は、[ 新しい App Service プランの作成] を選択してツールからプランを作成できます。
    • App Service プランを選択した後、[ 続行] を選択します。
  2. シークレット ストアと監視ワークスペースを指定する: アプリケーション構成のパラメーター化を選択した場合は、アプリケーションに使用するシークレット ストアを指定します。 アプリケーション シークレットの管理には、Azure Key Vault または App Service アプリケーションの設定を選択できます。 詳細については、こちらをご覧ください

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

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

    • 名前: アプリケーションの一意のアプリ名を指定します。 この名前はアプリケーションの URL を生成するために使用され、このデプロイの一部として作成される他のリソースのプレフィックスとして使用されます。
    • アプリケーション構成: パラメーター化されたアプリケーション構成の場合は、現在のデプロイに使用する値を指定します。
    • ストレージの構成: 永続ストレージ用に構成されたすべてのアプリケーション ディレクトリ/フォルダーの情報を確認します。

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

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

    • [ 確認 ] を選択して、アプリケーションのデプロイ構成を確認します。

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

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

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

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

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

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

次のステップ

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