クイックスタート: 初めての Java ネイティブ イメージ アプリケーションを Azure Spring Apps にデプロイする
Note
Basic、Standard、および Enterprise プランは、2025 年 3 月中旬から廃止され、3 年間の提供終了期間となります。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の提供終了のお知らせ」を参照してください。
Standard 従量課金プランと専用プランは、2024 年 9 月 30 日以降は非推奨となり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金プランと専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象:❌ Basic または Standard ✔️ Enterprise
このクイックスタートでは、Spring Boot アプリケーションをネイティブ イメージとして Azure Spring Apps にデプロイする方法について説明します。
ネイティブ イメージ機能を使用すると、Java アプリケーションをネイティブ イメージと呼ばれるスタンドアロンの実行可能ファイルにコンパイルできます。 これらの実行可能ファイルには、従来の JVM (Java 仮想マシン) と比較して、起動時間の短縮やランタイム メモリのオーバーヘッドの削減など、大きな利点があります。
サンプル プロジェクトは Spring Petclinic アプリケーションです。 このアプリケーションを次のスクリーンショットに示します。
1.前提条件
- Azure サブスクリプション。 サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Git.
- Java Development Kit (JDK)、バージョン 17。
- Azure CLI バージョン 2.45.0 以上。 次のコマンドを使用して、Azure Spring Apps 拡張機能をインストールします。
az extension add --name spring
- ターゲット サブスクリプションで初めて Azure Spring Apps Enterprise プラン インスタンスをデプロイする場合は、「Azure Marketplace で Azure Spring Apps Enterprise レベルのオファリングを表示する」の「要件」セクションを参照してください。
2. Spring Petclinic プロジェクトを準備する
次の手順を使用して、アプリをローカルで複製して実行します。
次のコマンドを使用して、GitHub から Spring Petclinic プロジェクトをクローンします。
git clone https://github.com/Azure-Samples/spring-petclinic.git
次のコマンドを使用して、Spring Petclinic プロジェクトをビルドします。
cd spring-petclinic ./mvnw clean package -DskipTests -Pnative package
次のコマンドを使用して、Maven を使用して Spring Petclinic アプリケーションを実行します。
java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
ブラウザーで
http://localhost:8080
に移動し、Spring Petclinic アプリケーションにアクセスします。
3. クラウド環境を準備する
Spring Petclinic アプリケーションの実行に必要なメイン リソースは、Azure Spring Apps インスタンスです。 このセクションでは、このリソースを作成する手順を示します。
3.1. 各リソースの名前を指定する
次のコマンドを使用して、リソースを保持する変数を作成します。 プレースホルダーは必ず、独自の値で置き換えてください。
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>
export AZURE_SPRING_APPS_NAME=<Azure-Spring-Apps-service-instance-name>
export NATIVE_BUILDER=native-builder
export JAR_APP_NAME=jar-app
export NATIVE_APP_NAME=native-app
export JAR_PATH=target/spring-petclinic-3.1.0-SNAPSHOT.jar
3.2. 新しいリソース グループを作成する
次の手順を使用して、新しいリソース グループを作成します。
次のコマンドを使用して、Azure CLI にサインインします。
az login
次のコマンドを使用して、既定の場所を設定します。
az configure --defaults location=${LOCATION}
次のコマンドを使用して、使用可能なすべてのサブスクリプションを一覧表示し、使用するサブスクリプション ID を決定します。
az account list --output table
次のコマンドを使用して、既定のサブスクリプションを設定します。
az account set --subscription <subscription-ID>
次のコマンドを使用して、リソース グループを作成します。
az group create --resource-group ${RESOURCE_GROUP}
次のコマンドを使用して、新しく作成したリソース グループを既定のリソース グループとして設定します。
az configure --defaults group=${RESOURCE_GROUP}
3.3. Azure Spring Apps インスタンスを作成する
Azure Spring Apps は、Spring Petclinic アプリをホストするために使用されます。 次の手順を使用して、Azure Spring Apps インスタンスとその中に 2 つのアプリケーションを作成します。
次のコマンドを使用して、Azure Spring Apps サービス インスタンスを作成します。 ネイティブ イメージ ビルドでは、イメージのビルド中に 16 Gi のメモリが必要になるため、ビルド プールのサイズを S7 として構成します。
az spring create \ --name ${AZURE_SPRING_APPS_NAME} \ --sku enterprise \ --build-pool-size S7
現在のディレクトリに builder-native.json ファイルを作成し、次のコンテンツを追加します。
{ "stack": { "id": "io.buildpacks.stacks.jammy", "version": "tiny" }, "buildpackGroups": [ { "name": "default", "buildpacks": [ { "id": "tanzu-buildpacks/java-native-image" } ] } ] }
次のコマンドを使用して、ネイティブ イメージ アプリケーションをビルドするためのカスタム ビルダーを作成します。
az spring build-service builder create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_BUILDER} \ --builder-file builder-native.json
次のコマンドを使用して、Spring Petclinic アプリケーションを JAR ファイルとしてデプロイする Azure Spring Apps インスタンス内にアプリケーションを作成します。 メモリ制限を 1 Gi に構成します。
az spring app create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${JAR_APP_NAME} \ --cpu 1 \ --memory 1Gi \ --assign-endpoint true
次のコマンドを使用して、Spring Petclinic アプリケーションをネイティブ イメージとしてデプロイする Azure Spring Apps インスタンス内にアプリケーションを作成します。
az spring app create \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME} \ --cpu 1 \ --memory 1Gi \ --assign-endpoint true
4. アプリを Azure Spring Apps にデプロイする
クラウド環境が準備されたので、アプリケーションをデプロイする準備ができています。
次のコマンドを使用して、Spring Petclinic アプリケーションを JAR ファイルとしてデプロイします。
az spring app deploy \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME} \
--artifact-path ${JAR_PATH} \
--build-env BP_JVM_VERSION=17
次のコマンドを使用して、Spring Petclinic アプリケーションをネイティブ イメージとしてデプロイします。
az spring app deploy \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME} \
--builder ${NATIVE_BUILDER} \
--build-cpu 8 \
--build-memory 16Gi \
--artifact-path ${JAR_PATH} \
--build-env BP_JVM_VERSION=17 BP_NATIVE_IMAGE=true
5. ネイティブ イメージ アプリを検証する
これで、デプロイしたネイティブ イメージ アプリにアクセスして、動作するかどうかを確認できます。 次の手順に従って、検証します。
デプロイが完了したら、次のコマンドを実行してアプリの URL を取得できます。
az spring app show \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME} \ --output table
出力に
Public Url
として表示される URL を使用してアプリにアクセスできます。 ページは localhost で確認したとおりに表示されます。次のコマンドを使用して、アプリのログをチェックし、デプロイの問題を調査します。
az spring app logs \ --service ${AZURE_SPRING_APPS_NAME} \ --name ${NATIVE_APP_NAME}
6. JAR とネイティブ イメージのパフォーマンスを比較する
次のセクションでは、JAR とネイティブ イメージのデプロイのパフォーマンスを比較する方法について説明します。
サーバー起動時刻
次のコマンドを使用してアプリのログ Started PetClinicApplication in XXX seconds
をチェックし、JAR アプリのサーバーの起動時間を取得します。
az spring app logs \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME}
JAR アプリの場合、サーバーの起動時間は約 25 秒です。
次のコマンドを使用してアプリのログをチェックし、ネイティブ イメージ アプリのサーバーの起動時間を取得します。
az spring app logs \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME}
ネイティブ イメージ アプリの場合、サーバーの起動時間は 0.5 秒未満です。
メモリ使用量
次のコマンドを使用して、ネイティブ イメージ アプリのメモリ サイズを 512 Mi にスケールダウンします。
az spring app scale \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${NATIVE_APP_NAME} \
--memory 512Mi
コマンド出力には、ネイティブ イメージ アプリが正常に起動したことが表示されます。
次のコマンドを使用して、JAR アプリのメモリ サイズを 512 Mi にスケールダウンします。
az spring app scale \
--service ${AZURE_SPRING_APPS_NAME} \
--name ${JAR_APP_NAME} \
--memory 512Mi
コマンド出力には、メモリ不足のため JAR アプリの起動に失敗したことを示されます。 出力メッセージは次の例のようになります: Terminating due to java.lang.OutOfMemoryError: Java heap space
。
次の図は、Petclinic アプリケーションへの 1 秒あたり 400 要求の一定のワークロード用として最適化されたネイティブ イメージ デプロイのメモリ使用量を示しています。 メモリ使用量は、同等の JAR デプロイによって消費されるメモリの約 5 分の 1 です。
ネイティブ イメージの方が、従来の Java 仮想マシン (JVM) と比較して、起動時間が短縮され、ランタイム メモリのオーバーヘッドが削減されます。
7.リソースをクリーンアップする
後続のクイック スタートおよびチュートリアルを引き続き実行する場合は、これらのリソースをそのまま残しておくことができます。 リソースが不要になったら、リソース グループを削除してリソースを削除します。 次のコマンドを使用して、リソース グループを削除します。
az group delete --name ${RESOURCE_GROUP}
8.次のステップ
詳細については、次の記事を参照してください。