Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta guía se explica el proceso de migración de una aplicación de Spring Boot existente a Azure Container Apps. Abarca la evaluación previa a la migración, la propia migración y la optimización posterior a la migración.
Prerrequisitos
- Una suscripción a Azure. Si no tiene una, cree una cuenta gratuita.
- CLI de Azure instalada o el acceso al Portal de Azure.
- Familiaridad con el desarrollo de aplicaciones de Spring Boot y los contenedores de Docker.
- Una versión de JDK compatible (8, 11, 17 o 21). Para más información, consulte Introducción a Java en Azure Container Apps.
evaluación previa a la migración
Antes de iniciar la migración, complete los pasos de evaluación e inventario descritos en las secciones siguientes.
Identificación del estado local
En un entorno de plataforma como servicio (PaaS), ninguna aplicación garantiza que se ejecute como exactamente una instancia en un momento dado. Incluso si configura una sola instancia, se puede crear una instancia duplicada cuando:
- El sistema debe reubicar la aplicación en un host físico debido a errores o actualizaciones del sistema.
- El sistema actualiza la aplicación.
En ambos casos, la instancia original permanece en ejecución hasta que finaliza el inicio de la nueva instancia. Este comportamiento tiene las siguientes implicaciones para la aplicación:
- No puedes garantizar que ningún singleton sea realmente único.
- Es probable que los datos que no se conservan en el almacenamiento externo se pierdan.
Antes de migrar a Azure Container Apps, asegúrese de que el código no contenga el estado local que no se debe perder ni duplicar. Si existe un estado local, refactorice el código para almacenar ese estado externamente. Las aplicaciones listas para la nube suelen almacenar el estado en una de las siguientes ubicaciones:
- Azure Cache for Redis
- Azure Cosmos DB
- Una base de datos externa, como Azure SQL, Azure Database for MySQL o Azure Database for PostgreSQL
- Azure Storage para datos no estructurados o objetos serializados
Revisión del uso del sistema de archivos
Identifique las instancias en las que los servicios leen o escriben en el sistema de archivos local. Tenga en cuenta qué archivos son de corta duración o temporales y qué archivos son de larga duración.
Azure Container Apps ofrece varios tipos de almacenamiento. Mediante el almacenamiento efímero, puede leer y escribir datos temporales dentro de un contenedor o réplica en ejecución. Mediante Azure Files, puede proporcionar almacenamiento permanente que varios contenedores pueden compartir. Para obtener más información, consulte Cómo utilizar los montajes de almacenamiento en Azure Container Apps.
Si la aplicación proporciona contenido estático de solo lectura, considere la posibilidad de moverla a Azure Blob Storage y agregar Azure CDN para la distribución global. Para obtener más información, vea Static website hosting in Azure Storage and Quickstart: Integrate an Azure storage account with Azure CDN.
Si la aplicación controla el contenido estático publicado dinámicamente (contenido cargado o generado que no cambia después de la creación), puede integrar Azure Blob Storage y Azure CDN. También puede usar una función de Azure para administrar cargas y desencadenar actualizaciones de red CDN. Para obtener una implementación de ejemplo, consulte Carga y precarga de contenido estático de CDN con Azure Functions.
Comprobación del código específico del sistema operativo
Si la aplicación contiene código con dependencias en el sistema operativo host, refactorice para quitar esas dependencias. Por ejemplo, reemplace cualquier uso de / o \ en las rutas de acceso del sistema de archivos con File.Separator o Paths.get.
Comprobación de la compatibilidad de la plataforma
Si crea el Dockerfile manualmente e implementa una aplicación en contenedor en Azure Container Apps, tiene control total sobre la implementación, incluidas las versiones JRE/JDK.
Para la implementación desde artefactos, Azure Container Apps ofrece versiones específicas de Java (8, 11, 17 y 21) y versiones específicas de los componentes de Spring Boot y Spring Cloud. Para garantizar la compatibilidad, migre primero la aplicación a una versión compatible de Java en su entorno actual y, a continuación, continúe con los pasos de migración restantes. Pruebe completamente la configuración resultante con la versión estable más reciente de la distribución de Linux.
Nota:
Esta validación es especialmente importante si el servidor actual se ejecuta en un JDK no compatible, como Oracle JDK o IBM OpenJ9.
Para comprobar la versión actual de Java, inicie sesión en el servidor de producción y ejecute el siguiente comando:
java -version
Para ver las versiones compatibles de Java, Spring Boot y Spring Cloud, consulte Introducción a Java en Azure Container Apps.
Identificación de la versión de Spring Boot
Examine las dependencias de cada aplicación que va a migrar para determinar su versión de Spring Boot.
En los proyectos de Maven , busque la versión de Spring Boot en el <parent> elemento del archivo POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
En los proyectos de Gradle , busque la versión de Spring Boot en la plugins sección :
plugins {
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
id 'java'
}
Para las aplicaciones que usan versiones de Spring Boot anteriores a la versión 3.x, siga la Guía de migración de Spring Boot 3.0 para actualizar a una versión compatible. Para ver las versiones compatibles, consulte Versiones de Spring Boot y Spring Cloud.
Identificación de trabajos programados
Las aplicaciones efímeras, como los trabajos cron de Unix o las aplicaciones de corta duración basadas en el marco de Spring Batch, deben ejecutarse como un trabajo en Azure Container Apps. Para obtener más información, consulte Jobs en Azure Container Apps.
Si la aplicación se ejecuta de forma prolongada y ejecuta tareas periódicamente mediante un marco de programación (como Cuarzo o Spring Batch), puede hospedarlo en Azure Container Apps. Sin embargo, la aplicación debe controlar la expansión adecuadamente para evitar las condiciones de competición en las que la misma tarea se ejecute más de una vez por período programado durante la expansión horizontal o las actualizaciones graduales.
Realice un inventario de las tareas programadas que se ejecutan en los servidores de producción, dentro o fuera del código de la aplicación.
Recursos externos de inventario
Identifique los recursos externos, tales como los orígenes de datos, los agentes de mensajes JMS y las direcciones URL de otros servicios. En las aplicaciones de Spring Boot, normalmente se encuentra la configuración de estos recursos en la carpeta src/main/resources , en un archivo que normalmente se denomina application.properties o application.yml.
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:
Intermediarios de mensajes JMS
Identifique los brokers en uso buscando en el manifiesto de compilación (normalmente, un archivo pom.xml o build.gradle) para encontrar las dependencias pertinentes.
Por ejemplo, una aplicación de Spring Boot que usa ActiveMQ normalmente contiene esta dependencia en su archivo pom.xml :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Las aplicaciones Spring Boot que usan agentes comerciales suelen contener dependencias directas de 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")
...
}
Después de identificar los agentes en uso, localice la configuración correspondiente. Normalmente, los encuentra 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 alto grado de confianza 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.
Cachés externas
Identifique las memorias caché externas en uso. Con frecuencia, se usa Redis a través de Spring Data Redis. Para obtener información de configuración, consulte la documentación de Spring Data Redis .
Determine si almacena en caché los datos de sesión 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 que use la aplicación. Para obtener información sobre cómo configurar proveedores de identidades, consulte los siguientes recursos:
- Para la configuración de OAuth2, consulte la referencia de Spring Security.
- Para obtener la configuración de Auth0 Spring Security, consulte la documentación de Auth0 Spring Security.
- Para la configuración de PingFederate Spring Security, consulte las instrucciones de Auth0 PingFederate.
Puertos no estándar
Mediante Azure Container Apps, puede exponer puertos en función de la configuración de recursos de la aplicación de contenedor. Una aplicación de Spring Boot escucha en el puerto 8080 de forma predeterminada, pero puede cambiar este puerto mediante server.port o la variable de entorno SERVER_PORT.
Todos los demás recursos externos
Esta guía no puede documentar todas las dependencias externas posibles. Después de la migración, compruebe que puede satisfacer todas las dependencias externas de la aplicación.
Configuración, secretos y certificados de inventario
Contraseñas y cadenas seguras
Compruebe todas las propiedades, los archivos de configuración y 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, normalmente se encuentran estas cadenas en el archivo application.properties o application.yml .
Certificados
Documente todos los certificados utilizados para los puntos de conexión SSL públicos o la comunicación con las bases de datos de backend y otros sistemas. Para ver todos los certificados en los servidores de producción, ejecute el comando siguiente:
keytool -list -v -keystore <path to keystore>
Evaluación del registro y APM
Identifique las soluciones de agregación de registros que usan las aplicaciones que va a migrar. Debe configurar las opciones de diagnóstico durante la migración para que los eventos registrados estén disponibles para su consumo. Para obtener más información, consulte la sección Configuración del registro y diagnóstico .
Identifique cualquier agente de administración de rendimiento de aplicaciones (APM) que usen las aplicaciones. Azure Container Apps no ofrece compatibilidad integrada con APM. Debe preparar la imagen de contenedor o integrar la herramienta APM directamente en el código. Si quiere medir el rendimiento de la aplicación, pero aún no ha integrado ningún APM, considere la posibilidad de usar Aplicación de Azure Insights. Para más información, consulte la sección Integración de la supervisión del rendimiento de la aplicación.
Arquitectura de implementación de documentos
Documente la siguiente información de la aplicación de Spring Boot:
- Número de instancias en ejecución.
- Número de CPU asignadas a cada instancia.
- Cantidad de RAM asignada a cada instancia.
Determine también si actualmente distribuye las instancias de la aplicación entre varias regiones o centros de datos. Documente los requisitos de tiempo de actividad y el Acuerdo de Nivel de Servicio para las aplicaciones que va a migrar.
Migración
Creación de un entorno de Container Apps
Cree un entorno de Container Apps en la suscripción de Azure. Para obtener más información, consulte Quickstart: Implementación de la primera aplicación contenedora mediante el portal de Azure.
Configuración del registro y diagnóstico
Configura el registro para dirigir toda la salida a la consola en lugar de a los archivos.
Después de implementar la aplicación en Azure Container Apps, puede configurar las opciones de registro en el entorno de Container Apps para definir uno o varios destinos de registro. Estos destinos pueden incluir Azure Monitor Log Analytics, Azure Event Hubs o soluciones de supervisión que no son de Microsoft. También puede deshabilitar el almacenamiento de datos de registro y ver los registros solo en tiempo de ejecución. Para obtener instrucciones de configuración, consulte Opciones de almacenamiento y supervisión de registros en Azure Container Apps.
Configuración de almacenamiento persistente
Si alguna parte de la aplicación lee o escribe en el sistema de archivos local, configure el almacenamiento persistente para reemplazarla. Especifique la ruta de acceso que se va a montar en el contenedor a través de la configuración de la aplicación y alinéela con la ruta de acceso que usa la aplicación. Para obtener más información, consulte Cómo utilizar los montajes de almacenamiento en Azure Container Apps.
Migración de certificados a Azure Key Vault
Azure Container Apps admite la comunicación segura entre aplicaciones. La aplicación no necesita administrar el proceso de establecimiento de comunicaciones seguras. Puede cargar un certificado privado en Azure Container Apps o usar un certificado administrado gratuito. El uso de Azure Key Vault para administrar certificados es el enfoque recomendado. Para obtener más información, vea Certificates en Azure Container Apps.
Integración de la supervisión del rendimiento de la aplicación
Tanto si implementa la aplicación desde una imagen de contenedor como desde el código, Azure Container Apps no interfiere con la imagen o el código. La integración de la aplicación con una herramienta de APM depende de sus preferencias e implementación.
Si la aplicación no usa un APM compatible, considere La posibilidad de usar Aplicación de Azure Insights. Para obtener más información, consulte Using Azure Monitor Application Insights with Spring Boot.
Implementación de la aplicación
Implemente cada uno de los microservicios migrados (no incluidos Spring Cloud Config Server y Spring Cloud Service Registry), como se describe en Implementación de Azure Container Apps con el az containerapp up comando .
Configuración de secretos y variables de entorno
Puede insertar opciones de configuración en cada aplicación como variables de entorno. Establezca estas variables como entradas manuales o como referencias a secretos. Para más información, consulte Administración de variables de entorno en Azure Container Apps.
Configuración de la identidad y la autenticación
Si alguna de las aplicaciones de Spring Boot requiere autenticación o autorización, asegúrese de que están configuradas para acceder al proveedor de identidades:
Si el proveedor de identidades es Microsoft Entra ID, no realice ningún cambio.
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 Documentación de identidad híbrida.
Si el proveedor de identidades es otra solución local, como PingFederate, consulte Instalación personalizada de Microsoft Entra Connect para configurar la federación con el identificador de Microsoft Entra.
Como alternativa, considere usar Spring Security para acceder a su proveedor de identidades a través de OAuth2/OpenID Connect o SAML.
Exposición de la aplicación
De forma predeterminada, se puede acceder a una aplicación implementada en Azure Container Apps a través de una dirección URL de aplicación. Si implementa la aplicación en un entorno administrado con su propia red virtual, determine el nivel de accesibilidad de la aplicación para permitir solo la entrada pública o únicamente desde la red virtual. Para obtener más información, consulte Networking in Azure Container Apps environment.
Después de la migración
Después de completar la migración, compruebe que la aplicación funciona según lo previsto. En las secciones siguientes se describen las recomendaciones para hacer que la aplicación sea más nativa de la nube y sea operativamente sólida.
Optimización de patrones nativos en la nube
Las siguientes recomendaciones le ayudan a adoptar componentes de Spring Cloud y componentes de Java administrados de Azure Container Apps para que la aplicación sea más nativa de la nube.
Detección de servicios y equilibrio de carga
Permitir que la aplicación funcione con el componente Spring Cloud Registry para que otras aplicaciones y clientes de Spring implementados puedan detectarla dinámicamente. Para obtener más información, vea Configuración de la configuración del componente Eureka Server for Spring en Azure Container Apps.
A continuación, modifique los clientes de la aplicación para que usen el Load Balancer de Spring Client. Cuando se usa Spring Client Load Balancer, el cliente obtiene direcciones para todas las instancias en ejecución de la aplicación y busca una que funcione si otra se daña o no responde. Para obtener más información, consulte Spring Tips: Spring Cloud Load Balancer en el blog de Spring.
Puerta de enlace de API
Considere la posibilidad de agregar una instancia de Spring Cloud Gateway . Spring Cloud Gateway proporciona un único punto de conexión para todas las aplicaciones implementadas en el entorno de Azure Container Apps. Si ya ha implementado una puerta de enlace de Spring Cloud, asegúrese de configurar una regla de enrutamiento para enrutar el tráfico a la aplicación recién implementada.
Configuración centralizada
Tiene la opción de agregar un servidor de Spring Cloud Config Server para administrar de forma centralizada y configurar el control de versiones de todas las aplicaciones de Spring Cloud. En primer lugar, cree un repositorio de Git para hospedar la configuración y configurar la instancia de la aplicación para usarla. Para obtener más información, consulte Configuración de la configuración del componente Config Server for Spring en Azure Container Apps.
Migre la configuración mediante los pasos siguientes:
Dentro del directorio src/main/resources de la aplicación, cree un archivo bootstrap.yml con el siguiente contenido:
spring: application: name: <your-application-name>En el repositorio de configuración de Git, cree un archivo <your-application-name>.yml, donde
your-application-namees el mismo que en el paso anterior. Mueva la configuración del archivo application.yml en src/main/resources al nuevo archivo que creó. Si la configuración se encontraba anteriormente en un archivo .properties , conviértela primero en YAML. Puede encontrar herramientas en línea o complementos de IntelliJ para realizar esta conversión.Cree un archivo application.yml en el directorio que creó. Use este archivo para definir la configuración y los recursos compartidos entre todas las aplicaciones del entorno de Azure Container Apps, como orígenes de datos, configuración de registro y configuración del accionador de Spring Boot.
Confirme e inserte estos cambios en el repositorio de Git.
Quite el archivo application.properties o application.yml de la aplicación.
Administration
Podría agregar el componente administrado Admin para Spring para habilitar una interfaz administrativa para las aplicaciones web de Spring Boot que expongan los puntos conexión del accionador. Para obtener más información, consulte Configurar el componente administrador de Spring Boot en Azure Container Apps.
Mejora de la preparación operativa
Las siguientes recomendaciones le ayudan a reforzar las prácticas de confiabilidad, observabilidad e implementación de la aplicación migrada.
- Canalizaciones de CI/CD: agregue una canalización de implementación para implementaciones automáticas y coherentes. Las instrucciones están disponibles para Azure Pipelines y Acciones de GitHub.
- Implementación azul-verde: use revisiones de aplicaciones de contenedor, etiquetas de revisión y pesos de tráfico de entrada para probar los cambios de código en producción antes de que estén disponibles para los usuarios finales. Para obtener más información, vea Despliegue Azul-Verde en Azure Container Apps.
- Enlaces de servicio: agregue enlaces de servicio para conectar la aplicación a bases de datos de Azure admitidas. Los enlaces de servicio eliminan la necesidad de proporcionar información de conexión, incluidas las credenciales, a las aplicaciones de Spring Boot.
- Métricas de JVM: Permite a la pila de desarrollo de Java recopilar métricas del núcleo de la JVM. Para obtener más información, consulte Java métricas para aplicaciones de Java en Azure Container Apps.
- Alertas: agregue reglas de alertas y grupos de acciones de Azure Monitor para detectar y abordar rápidamente condiciones aberantes. Para obtener más información, consulte Configurar alertas en Azure Container Apps.
- Redundancia de zona: replique la aplicación entre zonas de disponibilidad habilitando la redundancia de zona. La carga del tráfico se equilibra y se dirige automáticamente a las réplicas si se produce una interrupción en la zona. Para más información, consulte Confiabilidad en Azure Container Apps.
- Firewall de aplicaciones web: proteja su aplicación de contenedor de vulnerabilidades comunes mediante el uso de Web Application Firewall en Application Gateway. Para obtener más información, consulte Proteger Aplicaciones de Contenedor de Azure con el Firewall de Aplicaciones Web en una Puerta de Enlace de Aplicación.