Inicio rápido: Implementación de su primera aplicación nativa de imágenes de Java en Azure Spring Apps

Nota:

Los planes Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retirada de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.

El plan de Consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte Migrar el consumo estándar y el plan dedicado de Azure Spring Apps a Azure Container Apps.

Este artículo se aplica a:❌ Básico o Estándar ✔️ Enterprise

En esta guía de inicio rápido se muestra cómo implementar una aplicación de Spring Boot en Azure Spring Apps como imagen nativa.

La funcionalidad de imágenes nativas le permite compilar aplicaciones Java en ejecutables independientes, conocidos como Imágenes nativas. Estos ejecutables pueden proporcionar ventajas significativas, incluidos tiempos de inicio más rápidos y una menor sobrecarga de memoria en tiempo de ejecución en comparación con una Máquina virtual Java (JVM) tradicional.

El proyecto de ejemplo es la aplicación Spring Petclinic. En la siguiente captura de pantalla se muestra la aplicación:

Captura de pantalla de la aplicación Spring Petclinic en Azure Spring Apps.

1. Prerrequisitos

2. Preparación del proyecto Spring Petclinic

Siga estos pasos para clonar y ejecutar la aplicación localmente.

  1. Use el siguiente comando para clonar el proyecto de Spring Petclinic desde GitHub:

    git clone https://github.com/Azure-Samples/spring-petclinic.git
    
  2. Use el siguiente comando para compilar el proyecto de Spring Petclinic:

    cd spring-petclinic
    ./mvnw clean package -DskipTests -Pnative package
    
  3. Use el siguiente comando para ejecutar la aplicación Spring Petclinic mediante Maven:

    java -jar target/spring-petclinic-3.1.0-SNAPSHOT.jar
    
  4. Vaya a http://localhost:8080 en el explorador para acceder a la aplicación Spring Petclinic.

3. Preparar el entorno en la nube

El recurso principal necesario para ejecutar la aplicación Spring Petclinic es una instancia de Azure Spring Apps. En esta sección se proporcionan los pasos para crear estos recursos.

3.1. Proporcione nombres para cada recurso

Cree variables para contener los nombres del recurso mediante los siguientes comandos. Asegúrese de reemplazar los marcadores de posición por sus propios valores.

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. Creación de un nuevo grupo de recursos

Use los siguientes pasos para crear un grupo de recursos:

  1. Use el siguiente comando para iniciar sesión en la CLI de Azure:

    az login
    
  2. Use el siguiente comando para establecer la ubicación predeterminada:

    az configure --defaults location=${LOCATION}
    
  3. Use el siguiente comando para enumerar todas las suscripciones disponibles y determinar el id. de suscripción que se va a usar:

    az account list --output table
    
  4. Use el siguiente comando para establecer la suscripción predeterminada:

    az account set --subscription <subscription-ID>
    
  5. Use el siguiente comando para crear un grupo de recursos:

    az group create --resource-group ${RESOURCE_GROUP}
    
  6. Use el siguiente comando para establecer el grupo de recursos recién creado como el grupo de recursos predeterminado:

    az configure --defaults group=${RESOURCE_GROUP}
    

3.3. Creación de una instancia de Azure Spring Apps

Azure Spring Apps se usa para hospedar la aplicación Spring Petclinic. Siga estos pasos para crear una instancia de Azure Spring Apps y dos aplicaciones dentro de ella:

  1. Use el siguiente comando para crear una instancia de servicio de Azure Spring Apps. Una compilación de imagen nativa requiere 16 Gi de memoria durante la compilación de imágenes, por lo que debe configurar el tamaño del grupo de compilación como S7.

    az spring create \
        --name ${AZURE_SPRING_APPS_NAME} \
        --sku enterprise \
        --build-pool-size S7
    
  2. Cree un archivo builder-native.json en el directorio actual y agregue el siguiente contenido:

    {
       "stack": {
         "id": "io.buildpacks.stacks.jammy",
         "version": "tiny"
       },
       "buildpackGroups": [
         {
           "name": "default",
           "buildpacks": [
             {
               "id": "tanzu-buildpacks/java-native-image"
             }
           ]
         }
       ]
     }  
    
  3. Use el siguiente comando para crear un generador personalizado para compilar la aplicación de imágenes nativas:

    az spring build-service builder create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${NATIVE_BUILDER} \
        --builder-file builder-native.json
    
  4. Use el siguiente comando para crear una aplicación en la instancia de Azure Spring Apps en la que se va a implementar la aplicación Spring Petclinic como un archivo JAR. Configure el límite de memoria en 1 Gi.

    az spring app create \
        --service ${AZURE_SPRING_APPS_NAME} \
        --name ${JAR_APP_NAME} \
        --cpu 1 \
        --memory 1Gi \
        --assign-endpoint true
    
  5. Use el siguiente comando para crear una aplicación en la instancia de Azure Spring Apps en la cual implementar la aplicación Spring Petclinic como una imagen nativa:

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

4. Implementación de la aplicación en Azure Spring Apps

Ahora que el entorno de nube está preparado, las aplicaciones están listas para implementarse.

Use el siguiente comando para implementar la aplicación Spring Petclinic como un archivo JAR:

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

Use el siguiente comando para implementar la aplicación Spring Petclinic como una imagen nativa:

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. Validar la aplicación de imagen nativa

Ahora puede acceder a la aplicación de imágenes nativas implementada para ver si funciona. Utilice los pasos siguientes para validarla:

  1. Una vez completada la implementación, puede ejecutar el siguiente comando para obtener la dirección URL de la aplicación:

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

    Puede acceder a la aplicación con la dirección URL que se muestra en la salida como Public Url. La página debería aparecer tal y como la vio en localhost.

  2. Use el siguiente comando para comprobar el registro de la aplicación para investigar cualquier problema de implementación:

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

6. Comparación del rendimiento de JAR e imagen nativa

En las secciones siguientes se describe cómo comparar el rendimiento entre la implementación de JAR y la imagen nativa.

Tiempo de inicio del servidor

Use el siguiente comando para comprobar el registro Started PetClinicApplication in XXX seconds de la aplicación para obtener el tiempo de inicio del servidor de una aplicación JAR:

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

El tiempo de inicio del servidor es de aproximadamente 25 s para una aplicación JAR.

Use el siguiente comando para comprobar el registro de la aplicación y obtener el tiempo de inicio del servidor de una aplicación de imágenes nativas:

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

El tiempo de inicio del servidor es inferior a 0,5 s para una aplicación de imagen nativa.

Uso de la memoria

Use el siguiente comando para reducir verticalmente el tamaño de memoria a 512 Mi para una aplicación imágenes nativas:

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

La salida del comando debe mostrar que la aplicación de imágenes nativas se inició correctamente.

Use el siguiente comando para reducir verticalmente el tamaño de memoria a 512 Mi para la aplicación JAR:

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

La salida del comando debe mostrar que la aplicación JAR no se pudo iniciar debido a una memoria insuficiente. El mensaje de salida debe ser similar al del siguiente ejemplo: Terminating due to java.lang.OutOfMemoryError: Java heap space.

En la figura siguiente se muestra el uso de memoria optimizado para la implementación de imágenes nativas para una carga de trabajo constante de 400 solicitudes por segundo en la aplicación Petclinic. El uso de memoria es de aproximadamente 1/5 de la memoria consumida por su implementación JAR equivalente.

Captura de pantalla del uso de memoria optimizado de una implementación de imágenes nativas en Azure Spring Apps.

Las imágenes nativas ofrecen tiempos de inicio más rápidos y reducen la sobrecarga de memoria en tiempo de ejecución en comparación con la Máquina virtual Java (JVM) convencional.

7. Limpieza de recursos

Si planea seguir trabajando en otros inicios rápidos y tutoriales, considere la posibilidad de dejar estos recursos activos. Cuando ya no necesite los recursos, elimine el grupo de recursos para eliminarlos. Use el comando siguiente para eliminar el grupo de recursos:

az group delete --name ${RESOURCE_GROUP}

8. Pasos siguientes

Para más información, consulte los siguientes artículos.