Partager via


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

Remarque

Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.

Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.

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 :

Capture d’écran d’un exemple d’application Spring Petclinic 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.

Capture d’écran de l’utilisation optimisée de la mémoire d’un déploiement Native Image dans 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 :