Compartir a través de


Migración de aplicaciones de Spring Boot a Azure App Service

En esta guía se describe lo que debe tener en cuenta cuando quiera migrar una aplicación de Spring Boot existente a Azure App Service.

Antes de la migración

Para asegurarse de que la migración se realiza correctamente, antes de empezar, complete los pasos de evaluación e inventario descritos en las secciones siguientes.

Cambiar a una plataforma compatible

App Service ofrece versiones específicas de Java SE. Para garantizar la compatibilidad, migre la aplicación a una de las versiones compatibles de su entorno actual antes de continuar con cualquiera de los pasos restantes. Asegúrese de probar completamente la configuración resultante. Use la versión estable más reciente de la distribución de Linux en estas pruebas.

Nota:

Esta validación es especialmente importante si el servidor actual se está ejecutando en un JDK no compatible (como Oracle JDK o IBM OpenJ9).

Para obtener la versión actual de Java, inicie sesión en el servidor de producción y ejecute el siguiente comando:

java -version

En Azure App Service, los archivos binarios para Java 8 se proporcionan desde Eclipse Temurin. Para Java 11, 17 y todas las futuras versiones LTS de Java, App Service proporciona Microsoft Build de OpenJDK. Estos archivos binarios están disponibles de forma gratuita en los siguientes sitios:

Recursos externos de inventario

Identifique recursos externos, como orígenes de datos, agentes de mensajes JMS y direcciones URL de otros servicios. En las aplicaciones de Spring Boot, normalmente puede encontrar la configuración de estos recursos en la carpeta src/main/directory , en un archivo que normalmente se denomina application.properties o application.yml. Además, compruebe las variables de entorno de la implementación de producción para ver las opciones de configuración pertinentes.

Bases de datos

En el caso de una aplicación de Spring Boot, las cadenas de conexión suelen aparecer en archivos de configuración cuando depende de una base de datos externa. Este es un ejemplo de un archivo application.properties :

spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Este es un ejemplo de un archivo application.yaml :

spring:
  data:
    mongodb:
      uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017

Consulte la documentación de Spring Data para obtener más escenarios de configuración posibles:

Agentes de mensajes de JMS

Identifique el intermediario o los intermediarios en uso buscando en el manifiesto de compilación (normalmente, en un archivo pom.xml o build.gradle) para las dependencias pertinentes.

Por ejemplo, una aplicación de Spring Boot que usa ActiveMQ normalmente contendrá esta dependencia en su archivo pom.xml :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

Las aplicaciones de Spring Boot que usan agentes comerciales suelen contener dependencias directamente en las bibliotecas de controladores JMS de los agentes. Este es un ejemplo de un archivo build.gradle :

    dependencies {
      ...
      compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
      ...
    }

Una vez que haya identificado al corredor o los corredores en uso, busque la configuración correspondiente. En las aplicaciones de Spring Boot, normalmente puede encontrarlos en los archivos application.properties y application.yml en el directorio de la aplicación.

Nota:

Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación descrito en este procedimiento, como para bases de datos, memorias caché, mensajería o servicios de inteligencia artificial, requiere un grado de confianza muy alto en la aplicación y conlleva riesgos que no están presentes en otros flujos. Use este flujo solo cuando las opciones más seguras, como las identidades administradas para conexiones sin contraseña o sin claves, no sean viables. En el caso de las operaciones de máquina local, prefiera identidades de usuario para conexiones sin contraseña o sin claves.

Este es un ejemplo de ActiveMQ de un archivo application.properties :

spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>

Para obtener más información sobre la configuración de ActiveMQ, consulte la documentación de mensajería de Spring Boot.

Este es un ejemplo de IBM MQ de un archivo application.yaml :

ibm:
  mq:
    queueManager: qm1
    channel: dev.ORDERS
    connName: localhost(14)
    user: admin
    password: <password>

Para obtener más información sobre la configuración de IBM MQ, consulte la documentación de los componentes de IBM MQ Spring.

Identificación de cachés externas

Identifique las memorias caché externas en uso. Con frecuencia, Redis se usa a través de Spring Data Redis. Para obtener información de configuración, consulte la documentación de Spring Data Redis .

Determine si los datos de sesión se almacenan en caché a través de Spring Session mediante la búsqueda de la configuración correspondiente (en Java o XML).

Proveedores de identidades

Identifique los proveedores de identidades usados por la aplicación. Para obtener información sobre cómo se pueden configurar los proveedores de identidades, consulte lo siguiente:

Todos los demás recursos externos

No es factible documentar todas las dependencias externas posibles en esta guía. Es responsabilidad del equipo comprobar que todas las dependencias externas de la aplicación se pueden satisfacer después de una migración de App Service.

Secretos de inventario

Contraseñas y cadenas seguras

Compruebe todas las propiedades y los archivos de configuración y todas las variables de entorno en las implementaciones de producción para ver las cadenas y contraseñas secretas. En una aplicación de Spring Boot, es probable que estas cadenas se encuentren en application.properties o application.yml.

Certificados de inventario

Documente todos los certificados usados para los puntos de conexión SSL públicos o la comunicación con bases de datos back-end y otros sistemas. Para ver todos los certificados de los servidores de producción, ejecute el siguiente comando:

keytool -list -v -keystore <path to keystore>

Determinación de si se usa el sistema de archivos y cómo

Para usar el sistema de archivos en el servidor de aplicaciones será necesario cambiar la configuración o, en raras ocasiones, la arquitectura. Puede identificar algunos o todos los escenarios siguientes.

Contenido estático de solo lectura

Si la aplicación actualmente sirve contenido estático, necesita una ubicación alternativa para ella. Debe considerar la posibilidad de mover contenido estático a Azure Blob Storage y agregar Azure Front Door para descargas rápidas globalmente. Para más información, consulte hospedaje de sitios web estáticos en Azure Storage y Integración de una cuenta de Azure Storage con Azure Front Door.

Casos especiales

Algunos escenarios de producción pueden requerir cambios adicionales o imponer limitaciones adicionales. Aunque estos escenarios pueden ser poco frecuentes, es importante asegurarse de que no sean aplicables a su aplicación o que se resuelvan correctamente.

Determinar si la aplicación se basa en trabajos programados

Los trabajos programados, como las tareas del planificador Quartz o los trabajos cron, no se pueden usar con App Service. App Service no le impedirá implementar una aplicación que contenga tareas programadas internamente. Sin embargo, si la aplicación se expande, un mismo trabajo programado se podría ejecutar más de una vez durante cada período programado. Esta situación puede tener consecuencias no deseadas.

Realice un inventario de los trabajos programados, dentro o fuera del proceso de aplicación.

Determinación de si la aplicación contiene código específico del sistema operativo

Si la aplicación contiene código con dependencias en el sistema operativo del host, deberá refactorizarla para quitar esas dependencias. Por ejemplo, es posible que tenga que reemplazar cualquier uso de / o \ en las rutas del sistema de archivos con File.Separator o Paths.get si la aplicación se ejecuta en Windows.

Identificar todos los procesos o servicios externos que se ejecutan en los servidores en producción

Tendrá que migrar a otra parte o eliminar los procesos que se ejecuten fuera del servidor de aplicaciones, como los demonios de supervisión.

Identificar el manejo de solicitudes no-HTTP o múltiples puertos

App Service solo admite un único punto de conexión HTTP en un único puerto. Si la aplicación escucha en varios puertos o acepta solicitudes que usan protocolos distintos de HTTP, no use Azure App Service.

Migración

Parametrizar la configuración

Asegúrese de que todas las coordenadas de recursos externos (como las cadenas de conexión de base de datos) y otras configuraciones personalizables se pueden leer desde variables de entorno. Si va a migrar una aplicación de Spring Boot, todas las opciones de configuración ya deben ser externalizables. Para obtener más información, consulte Configuración externalizada en la documentación de Spring Boot.

Este es un ejemplo que hace referencia a una SERVICEBUS_CONNECTION_STRING variable de entorno desde un archivo application.properties :

spring.jms.servicebus.connection-string=${SERVICEBUS_CONNECTION_STRING}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=10000

Aprovisionamiento de un plan de App Service

En la lista de planes de servicio disponibles, seleccione el plan cuyas especificaciones cumplan o superen las del hardware de producción actual.

Nota:

Si planea ejecutar implementaciones de ensayo o controladas, o usar espacios de implementación, el plan de App Service debe incluir esa funcionalidad adicional. Se recomienda usar planes Premium o superiores para las aplicaciones de Java.

Cree el plan de App Service.

Creación e implementación de aplicaciones web

Necesitará crear una aplicación web en su plan de servicio de aplicaciones (eligiendo "Java SE" como la pila de ejecución) para cada archivo JAR ejecutable que desee ejecutar.

Aplicaciones de Maven

Si la aplicación se ha creado a partir de un archivo POM de Maven, usará el complemento Webapp para Maven para crear la aplicación web e implementarla. Para obtener más información, consulte Inicio rápido: Creación de una aplicación Java en Azure App Service.

Aplicaciones que no son de Maven

Si no puede usar el complemento de Maven, debe aprovisionar la aplicación web con otros mecanismos, como:

Una vez creada la aplicación web, use uno de los mecanismos de implementación disponibles para implementar la aplicación. Si es posible, la aplicación debe cargarse en /home/site/wwwroot/app.jar. Si no desea cambiar el nombre del archivo JAR a app.jar, puede cargar un script de shell con el comando para ejecutar el archivo JAR. A continuación, pegue la ruta de acceso completa a este script en el cuadro de texto Archivo de inicio de la sección Configuración del portal. El script de inicio no se ejecuta desde el directorio en el que se encuentra. Por lo tanto, use siempre rutas de acceso absolutas para hacer referencia a los archivos del script de inicio (por ejemplo: java -jar /home/myapp/myapp.jar).

Migración de las opciones de tiempo de ejecución de JVM

Si la aplicación requiere opciones específicas en tiempo de ejecución, use el mecanismo más adecuado para especificarlas.

Configuración de un dominio personalizado y SSL

Si la aplicación va a ser visible en un dominio personalizado, tendrá que asignarle su aplicación web. Para más información, consulte Tutorial: Asignación de un nombre DNS personalizado existente a Azure App Service.

A continuación, deberá enlazar el certificado SSL para ese dominio a la aplicación web de App Service. Para más información, consulte Protección de un nombre DNS personalizado con un enlace SSL en Azure App Service.

Importación de certificados de back-end

Todos los certificados para comunicarse con sistemas back-end, como las bases de datos, deben estar disponibles para App Service. Para más información, consulte Incorporación de un certificado SSL en App Service.

Migración de coordenadas de recursos externos y otras configuraciones

Siga estos pasos para migrar cadenas de conexión y otras configuraciones.

Nota:

Para cualquier configuración de aplicación de Spring Boot parametrizada con variables en la sección Parametrización de la configuración , esas variables de entorno deben definirse en la configuración de la aplicación. La configuración de la aplicación de Spring Boot no parametrizada explícitamente con variables de entorno se pueden invalidar con la configuración de la aplicación. Por ejemplo:

spring.jms.servicebus.connection-string=${CUSTOMCONNSTR_SERVICE_BUS}
spring.jms.servicebus.topic-client-id=contoso1
spring.jms.servicebus.idle-timeout=1800000

Configuración de aplicaciones de App Service

Migración de los trabajos programados

Para ejecutar trabajos programados en Azure, considere la posibilidad de usar un desencadenador de temporizador para Azure Functions. No es necesario migrar el propio código de trabajo a una función. La función simplemente puede invocar una dirección URL en la aplicación para desencadenar el trabajo. Si estas ejecuciones de trabajos tienen que invocarse dinámicamente o realizar un seguimiento central, considere la posibilidad de usar Spring Batch.

Como alternativa, puede crear una aplicación lógica con un desencadenador recurrence para invocar la dirección URL sin escribir ningún código fuera de la aplicación. Para más información, consulte Información general: ¿Qué es Azure Logic Apps? y Creación, programación y ejecución de tareas y flujos de trabajo periódicos con el desencadenador de periodicidad en Azure Logic Apps.

Nota:

Para evitar el uso malintencionado, asegúrese de que el punto de conexión de invocación del trabajo requiera credenciales. En este caso, la función de desencadenador deberá proporcionar las credenciales.

Migración y habilitación del proveedor de identidades

Si la aplicación requiere autenticación o autorización, asegúrese de que están configuradas para acceder al proveedor de identidades mediante las instrucciones siguientes:

  • Si el proveedor de identidades es Microsoft Entra ID, no se deben realizar cambios.
  • Si el proveedor de identidades es un bosque de Active Directory local, considere implementar una solución de identidad híbrida con Microsoft Entra ID. Para más información, consulte la documentación de identidad híbrida.
  • Si el proveedor de identidades es otra solución local, como PingFederate, consulte el tema Instalación personalizada de Microsoft Entra Connect para configurar la federación con el identificador de Microsoft Entra. Como alternativa, considere la posibilidad de usar Spring Security para usar el proveedor de identidades mediante OAuth2/OpenID Connect o SAML.

Reinicio y prueba de humo

Por último, tendrá que reiniciar la aplicación web para aplicar todos los cambios de la configuración. Tras completar el reinicio, compruebe que la aplicación se está ejecutando correctamente.

Después de la migración

Ahora que tiene la aplicación migrada a Azure App Service, debe comprobar que funciona según lo previsto. Una vez hecho esto, tenemos algunas recomendaciones para usted que pueden hacer que la aplicación sea más nativa de la nube.

Recomendaciones