Share via


Démarrage rapide : déployer votre première application Java Native Image sur Azure Spring Apps

Remarque

Les 50 premières heures de processeur virtuel et 100 Go de mémoire sont gratuites chaque mois. Pour plus d’informations, consultez Price Reduction - Azure Spring Apps does more, costs less! sur le blog Apps on Azure.

Notes

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à :❌ De base/Standard ✔️ Entreprise

Ce guide de démarrage rapide montre comment déployer une application Spring Boot sur Azure Spring Apps en tant que Native Image.

La fonctionnalitéNative Image vous permet de compiler des applications Java sur des exécutables autonomes, appelés images natives. Ces exécutables peuvent offrir des avantages significatifs, notamment des temps de démarrage plus rapides et une surcharge de mémoire d’exécution plus faible par rapport à une machine virtuelle Java (JVM) traditionnelle.

L’exemple de projet est l’application Spring Petclinic. La capture d’écran suivante montre l’application :

Screenshot of a Spring Petclinic application in Azure Spring Apps.

1. Prérequis

2. Préparer le projet Spring Petclinic

Procédez comme suit pour cloner et exécuter l’application localement.

  1. Utilisez la commande suivante pour cloner le projet Spring Petclinic depuis GitHub :

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. Utilisez la commande suivante pour générer le projet Spring Petclinic :

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. Utilisez la commande suivante pour exécuter l’application Spring Petclinic à l’aide de Maven :

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. Accédez à http://localhost:8080 dans votre navigateur pour accéder à l’application Spring Petclinic.

3. Préparer l’environnement cloud

La ressource principale requise pour exécuter l’application Spring Petclinic est une instance Azure Spring Apps. Cette section décrit les étapes de création de cette ressource.

3.1. Donner des noms à chaque ressource

Créez des variables destinées à contenir les noms de ressources à l’aide des commandes suivantes. Veillez à remplacer les espaces réservés par vos valeurs.

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. Création d’un groupe de ressources

Procédez comme suit pour créer un groupe de ressources :

  1. Utilisez la commande suivante pour vous connecter à Azure CLI :

    az login
    
  2. Utilisez la commande suivante pour définir la localisation par défaut :

    az configure --defaults location=${LOCATION}
    
  3. Utilisez la commande suivante pour répertorier tous les abonnements disponibles, puis déterminez l’ID d’abonnement à utiliser :

    az account list --output table
    
  4. Utilisez la commande suivante pour définir votre abonnement par défaut :

    az account set --subscription <subscription-ID>
    
  5. Utilisez la commande suivante pour créer un groupe de ressources :

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. Utilisez la commande suivante pour définir le groupe de ressources nouvellement créé comme groupe de ressources par défaut :

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. Créer une instance Azure Spring Apps

Azure Spring Apps est utilisé pour héberger l’application Spring Petclinic. Procédez comme suit pour créer une instance Azure Spring Apps et deux applications à l’intérieur de celle-ci :

  1. Utilisez la commande suivante pour créer une instance de service Azure Spring Apps. La génération d’une image native nécessite 16 Gio de mémoire pendant la génération de l’image. Par conséquent, configurez la taille du pool de build en tant que S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. Créez un fichier builder-native.json dans le répertoire actif, puis ajoutez le contenu suivant :

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. Utilisez la commande suivante pour créer un générateur personnalisé afin de générer l’application Native Image :

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. Utilisez la commande suivante pour créer une application dans l’instance Azure Spring Apps dans laquelle déployer l’application Spring Petclinic en tant que fichier JAR. Configurez la limite de mémoire à 1 Gio.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. Utilisez la commande suivante pour créer une application dans l’instance Azure Spring Apps dans laquelle déployer l’application Spring Petclinic en tant que Native Image :

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

4. Déployer l’application sur Azure Spring Apps

Maintenant que l’environnement cloud est prêt, les application sont prêtes à être déployées.

Utilisez la commande suivante pour déployer l’application Spring Petclinic en tant que fichier JAR :

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

Utilisez la commande suivante pour déployer l’application Spring Petclinic en tant que Native Image :

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. Valider l’application Native Image

Vous pouvez maintenant accéder à l’application déployée pour vérifier son fonctionnement. Utilisez les étapes suivantes pour valider :

  1. Une fois le déploiement terminé, vous pouvez exécuter la commande suivante pour obtenir l’URL de l’application :

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

    Vous pouvez accéder à l’application avec l’URL indiquée dans la sortie en tant que Public Url. La page doit apparaître telle que vous l’avez vue dans le localhost.

  2. Utilisez la commande suivante pour vérifier le journal de l’application afin d’examiner tout problème de déploiement :

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

6. Comparer les performances de JAR et de Native Image

Les sections suivantes décrivent comment comparer les performances entre les déploiements JAR et Native Image.

Temps de démarrage du serveur

Utilisez la commande suivante pour vérifier le journal Started PetClinicApplication in XXX seconds de l’application afin d’obtenir le temps de démarrage du serveur pour une application JAR :

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

Le temps de démarrage du serveur est d’environ 25 s pour une application JAR.

Utilisez la commande suivante pour vérifier le journal de l’application afin d’obtenir le temps de démarrage du serveur pour une application Native Image :

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

Le temps de démarrage du serveur est inférieur à 0,5 s pour une application Native Image.

Utilisation de la mémoire

Utilisez la commande suivante pour réduire la taille de la mémoire à 512 Mi pour une application Native Image :

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

La sortie de la commande doit indiquer que l’application Native Image a démarré avec succès.

Utilisez la commande suivante pour réduire la taille de la mémoire à 512 Mio pour l’application JAR :

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

La sortie de la commande doit indiquer que l’application JAR n’a pas pu démarrer en raison d’une mémoire insuffisante. Le message de la sortie doit ressembler à l’exemple suivant : Terminating due to java.lang.OutOfMemoryError: Java heap space.

La figure suivante montre l’utilisation optimisée de la mémoire pour le déploiement Native Image pour une charge de travail constante de 400 requêtes par seconde dans l’application Petclinic. L’utilisation de la mémoire est d’environ 1/5e de la mémoire consommée par le déploiement JAR équivalent.

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

Les images natives offrent des temps de démarrage plus courts et une surcharge de mémoire d’exécution réduite par rapport à la machine virtuelle Java (JVM) conventionnelle.

7. Nettoyer les ressources

Si vous prévoyez d’utiliser d’autres guides de démarrage rapide et tutoriels, vous pouvez conserver ces ressources. Lorsque vous n’avez plus besoin des ressources, supprimez-les en supprimant le groupe de ressources. Utilisez la commande suivante pour supprimer le groupe de ressources :

az group delete --name ${RESOURCE_GROUP}

8. Étapes suivantes

Pour plus d’informations, consultez les articles suivants :