Share via


快速入門:將第一個 Java 原生映射應用程式部署至 Azure Spring Apps

注意

前 50 個 vCPU 小時和 100 GB 的記憶體是每月可用。 如需詳細資訊,請參閱 Azure Spring Apps 在 Azure 部落格上的應用程式上執行更多成本、成本降低。

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但在我們努力更新資產,例如螢幕快照、影片和圖表時,您會在某些地方看到舊名稱一段時間。

本文適用於:❌ 基本/標準✔️企業

本快速入門說明如何將 Spring Boot 應用程式部署至 Azure Spring Apps 作為原生映射。

原生映像 功能可讓您將 Java 應用程式編譯成獨立可執行檔,稱為原生映像。 相較於傳統的 JVM(Java 虛擬機),這些可執行檔可以提供顯著的好處,包括更快的啟動時間和較低的運行時間記憶體額外負荷。

範例專案是 Spring Petclinic 應用程式。 下列螢幕快照顯示應用程式:

Screenshot of a Spring Petclinic application in Azure Spring Apps.

1.Prerequisites

2. 準備 Spring Petclinic 專案

使用下列步驟在本機複製並執行應用程式。

  1. 使用下列命令從 GitHub 複製 Spring Petclinic 專案:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. 使用下列命令來建置 Spring Petclinic 專案:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. 使用下列命令,使用 Maven 執行 Spring Petclinic 應用程式:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. 在瀏覽器中移至 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. 建立新的資源群組

使用下列步驟來建立新的資源群組:

  1. 使用下列命令登入 Azure CLI:

    az login
    
  2. 使用下列命令來設定預設位置:

    az configure --defaults location=${LOCATION}
    
  3. 使用下列命令來列出所有可用的訂用帳戶,以判斷要使用的訂用帳戶識別碼:

    az account list --output table
    
  4. 使用下列命令來設定預設訂用帳戶:

    az account set --subscription <subscription-ID>
    
  5. 使用下列命令來建立資源群組:

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. 使用下列命令,將新建立的資源群組設定為預設資源群組:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. 建立 Azure Spring Apps 執行個體

Azure Spring Apps 可用來裝載 Spring Petclinic 應用程式。 使用下列步驟來建立 Azure Spring Apps 實例和其中兩個應用程式:

  1. 使用下列命令來建立 Azure Spring Apps 服務實例。 原生映像組建在映像建置期間需要 16 Gi 的記憶體,因此請將組建集區大小設定為 S7。

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. 在目前目錄中建立 builder-native.json 檔案,然後新增下列內容:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. 使用下列命令建立自訂產生器來建置 Native Image 應用程式:

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. 使用下列命令,在 Azure Spring Apps 實例中建立應用程式,在其中將 Spring Petclinic 應用程式部署為 JAR 檔案。 將記憶體限制設定為 1 Gi。

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. 使用下列命令在 Azure Spring Apps 實例中建立應用程式,在其中將 Spring Petclinic 應用程式部署為原生映射:

    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.驗證原生映像應用程式

現在您可以存取已部署的原生映像應用程式,以查看其是否正常運作。 使用下列步驟來驗證:

  1. 部署完成後,您可以執行下列命令來取得應用程式 URL:

    az spring app show \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --output table
    

    您可以使用輸出 Public Url中顯示的網址來存取應用程式。 當您看到頁面時,頁面應該會顯示為localhost。

  2. 使用下列命令來檢查應用程式的記錄檔,以調查任何部署問題:

    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

下圖顯示原生映射部署的優化記憶體使用量,以便將每秒 400 個要求的常數工作負載部署到 Petclinic 應用程式。 記憶體使用量大約是其對等 JAR 部署所耗用的記憶體的 1/5。

Screenshot of the optimized memory usage of a Native Image deployment in Azure Spring Apps.

相較於傳統的 Java 虛擬機(JVM),原生映像可提供更快的啟動時間,並減少運行時間記憶體額外負荷。

7. 清除資源

如果您打算繼續使用後續的快速入門和教學課程,您可能會想要保留這些資源。 當您不再需要資源時,請刪除資源群組來刪除它們。 使用下列命令來移除資源群組:

az group delete --name ${RESOURCE_GROUP}

8.後續步驟

如需詳細資訊,請參閱下列文章: