Szybki start: wdrażanie pierwszej natywnej aplikacji java image w usłudze Azure Spring Apps

Uwaga

Pierwsze 50 godzin procesorów wirtualnych i 100 GB pamięci jest bezpłatne każdego miesiąca. Aby uzyskać więcej informacji, zobacz Price Reduction — Azure Spring Apps robi więcej, kosztuje mniej! w blogu Aplikacje na platformie Azure.

Uwaga

Azure Spring Apps to nowa nazwa usługi Azure Spring Cloud. Mimo że usługa ma nową nazwę, stara nazwa będzie widoczna w niektórych miejscach przez pewien czas, ponieważ pracujemy nad aktualizowaniem zasobów, takich jak zrzuty ekranu, filmy wideo i diagramy.

Ten artykuł dotyczy:❌ Podstawowa/Standardowa ✔️ Enterprise

W tym przewodniku Szybki start pokazano, jak wdrożyć aplikację Spring Boot w usłudze Azure Spring Apps jako obraz natywny.

Funkcja obrazu natywnego umożliwia kompilowanie aplikacji Java w autonomicznych plikach wykonywalnych, znanych jako obrazy natywne. Te pliki wykonywalne mogą zapewnić znaczne korzyści, w tym szybsze uruchamianie i mniejsze obciążenie pamięci środowiska uruchomieniowego w porównaniu z tradycyjną maszyną wirtualną JVM (Java Virtual Machine).

Przykładowy projekt to aplikacja Spring Petclinic. Poniższy zrzut ekranu przedstawia aplikację:

Screenshot of a Spring Petclinic application in Azure Spring Apps.

1. Wymagania wstępne

2. Przygotowanie projektu Spring Petclinic

Wykonaj poniższe kroki, aby sklonować i uruchomić aplikację lokalnie.

  1. Użyj następującego polecenia, aby sklonować projekt Spring Petclinic z usługi GitHub:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. Użyj następującego polecenia, aby skompilować projekt Spring Petclinic:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. Użyj następującego polecenia, aby uruchomić aplikację Spring Petclinic przy użyciu narzędzia Maven:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. Przejdź do http://localhost:8080 strony w przeglądarce, aby uzyskać dostęp do aplikacji Spring Petclinic.

3. Przygotowanie środowiska chmury

Głównym zasobem wymaganym do uruchomienia aplikacji Spring Petclinic jest wystąpienie usługi Azure Spring Apps. Ta sekcja zawiera kroki tworzenia zasobu.

3.1. Podaj nazwy dla każdego zasobu

Utwórz zmienne do przechowywania nazw zasobów przy użyciu następujących poleceń. Pamiętaj, aby zastąpić symbole zastępcze własnymi wartościami.

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. Tworzenie nowej grupy zasobów

Aby utworzyć nową grupę zasobów, wykonaj następujące czynności:

  1. Użyj następującego polecenia, aby zalogować się do interfejsu wiersza polecenia platformy Azure:

    az login
    
  2. Użyj następującego polecenia, aby ustawić lokalizację domyślną:

    az configure --defaults location=${LOCATION}
    
  3. Użyj następującego polecenia, aby wyświetlić listę wszystkich dostępnych subskrypcji, aby określić identyfikator subskrypcji do użycia:

    az account list --output table
    
  4. Użyj następującego polecenia, aby ustawić domyślną subskrypcję:

    az account set --subscription <subscription-ID>
    
  5. Użyj następującego polecenia, aby utworzyć grupę zasobów:

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. Użyj następującego polecenia, aby ustawić nowo utworzoną grupę zasobów jako domyślną grupę zasobów:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. Tworzenie wystąpienia usługi Azure Spring Apps

Usługa Azure Spring Apps służy do hostowania aplikacji Spring Petclinic. Wykonaj następujące kroki, aby utworzyć wystąpienie usługi Azure Spring Apps i dwie aplikacje w nim:

  1. Użyj następującego polecenia, aby utworzyć wystąpienie usługi Azure Spring Apps. Kompilacja obrazu natywnego wymaga 16 Gi pamięci podczas kompilacji obrazu, dlatego skonfiguruj rozmiar puli kompilacji jako S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. Utwórz plik builder-native.json w bieżącym katalogu, a następnie dodaj następującą zawartość:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. Użyj następującego polecenia, aby utworzyć konstruktor niestandardowy w celu skompilowania aplikacji obrazów natywnych:

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. Użyj następującego polecenia, aby utworzyć aplikację w wystąpieniu usługi Azure Spring Apps, w którym można wdrożyć aplikację Spring Petclinic jako plik JAR. Skonfiguruj limit pamięci do 1 Gi.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. Użyj następującego polecenia, aby utworzyć aplikację w wystąpieniu usługi Azure Spring Apps, w którym wdrożysz aplikację Spring Petclinic jako obraz natywny:

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    

4. Wdrażanie aplikacji w usłudze Azure Spring Apps

Po przygotowaniu środowiska w chmurze aplikacje są gotowe do wdrożenia.

Użyj następującego polecenia, aby wdrożyć aplikację Spring Petclinic jako plik JAR:

az spring app deploy \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --artifact-path ${JAR_PATH} \
    --build-env BP_JVM_VERSION=17

Użyj następującego polecenia, aby wdrożyć aplikację Spring Petclinic jako obraz natywny:

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. Zweryfikuj natywną aplikację obrazu

Teraz możesz uzyskać dostęp do wdrożonej aplikacji Obraz natywny, aby sprawdzić, czy działa. Aby sprawdzić poprawność, wykonaj następujące czynności:

  1. Po zakończeniu wdrażania możesz uruchomić następujące polecenie, aby uzyskać adres URL aplikacji:

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

    Dostęp do aplikacji można uzyskać przy użyciu adresu URL wyświetlanego w danych wyjściowych jako Public Url. Strona powinna zostać wyświetlona w sposób widoczny dla hosta lokalnego.

  2. Użyj następującego polecenia, aby sprawdzić dziennik aplikacji w celu zbadania dowolnego problemu z wdrażaniem:

    az spring app logs \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_APP_NAME}
    

6. Porównanie wydajności jar i obrazu natywnego

W poniższych sekcjach opisano sposób porównywania wydajności między wdrożeniem pliku JAR i obrazu natywnego.

Czas uruchamiania serwera

Użyj następującego polecenia, aby sprawdzić dziennik Started PetClinicApplication in XXX seconds aplikacji, aby uzyskać czas uruchamiania serwera dla aplikacji JAR:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME}

Czas uruchamiania serwera wynosi około 25 s dla aplikacji JAR.

Użyj następującego polecenia, aby sprawdzić dziennik aplikacji, aby uzyskać czas uruchamiania serwera dla aplikacji obrazu natywnego:

az spring app logs \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME}

Czas uruchamiania serwera wynosi mniej niż 0,5 s dla aplikacji obrazu natywnego.

Użycie pamięci

Użyj następującego polecenia, aby skalować w dół rozmiar pamięci do 512 Mi dla aplikacji obrazu natywnego:

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${NATIVE_APP_NAME} \
    --memory 512Mi

Dane wyjściowe polecenia powinny wskazywać, że aplikacja Obrazu natywnego została pomyślnie uruchomiona.

Użyj następującego polecenia, aby skalować w dół rozmiar pamięci do 512 Mi dla aplikacji JAR:

az spring app scale \
    --service ${AZURE_SPRING_APPS_NAME} \
    --name ${JAR_APP_NAME} \
    --memory 512Mi

Dane wyjściowe polecenia powinny wskazywać, że uruchomienie aplikacji JAR nie powiodło się z powodu niewystarczającej ilości pamięci. Komunikat wyjściowy powinien być podobny do następującego przykładu: Terminating due to java.lang.OutOfMemoryError: Java heap space.

Na poniższej ilustracji przedstawiono zoptymalizowane użycie pamięci dla wdrożenia obrazu natywnego dla stałego obciążenia 400 żądań na sekundę w aplikacji Petclinic. Użycie pamięci wynosi około 1/5 pamięci używanej przez jego równoważne wdrożenie JAR.

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

Obrazy natywne oferują szybsze czasy uruchamiania i mniejsze obciążenie pamięci środowiska uruchomieniowego w porównaniu z konwencjonalną maszyną wirtualną Java (JVM).

7. Czyszczenie zasobów

Jeśli planujesz kontynuować pracę z kolejnymi przewodnikami Szybki start i samouczkami, możesz pozostawić te zasoby na miejscu. Gdy zasoby nie są już potrzebne, usuń je, usuwając grupę zasobów. Użyj następującego polecenia, aby usunąć grupę zasobów:

az group delete --name ${RESOURCE_GROUP}

8. Następne kroki

Aby uzyskać więcej informacji, zobacz następujące artykuły: