Migrando una aplicación Java on-premise a la nube (AWS) : Contenedores vs. Servicios especializados
En las migraciones usuales que hacen los ingenieros de plataformas (Platform Engineers) o arquitectos de nube (Cloud Architects) desde tecnologías anteriores a las tecnologías vigentes de escalamiento y disponibilidad, muchas veces implica optar entre contenedores (Kubernetes, sea como AWS EKS o Azure AKS) o servicios específicos de cada proveedor de nube (ejemplo AWS Beanstalk) que facilitan estas cuestiones:
Si es un requisito ser agnósticos, para el caso de una app Java, y en base a lo recomendado para un ambiente multi-proveedor de nubes (AWS + Azure, AWS + GCP,…), resumo el caso de cómo “contenedizar” una app legada, o legacy, evitando trabajo manual de identificación de dependencias, y usar utilitarios que faciliten las cosas.
AWS
🆕 Existe AWS App2Container, una nueva herramienta de línea de comandos que ayuda a empaquetar dentro de contenedores las aplicaciones existentes (ejecutadas en cualquier nube) . Descubre las aplicaciones que se ejecutan, identifica sus dependencias y genera una imagen de Docker para después implementarla (en Amazon ECS o Amazon EKS). Tiene integración con CI/CD (vía AWS CodeBuild y AWS CodeDeploy).
😲 ¿Que artefactos son generados para cada componente de la aplicación? Archivos o carpetas de la aplicación, Dockerfiles
, imágenes de contenedor en Amazon Elastic Container Registry (ECR), definiciones de tareas ECS, documentos YAML para implementación en Kubernetes, plantillas de CloudFormation para implementar la aplicación en Amazon ECS o EKS, y plantillas para configurar un pipeline de compilación y lanzamiento a producción.
😀 Puede empaquetar aplicaciones web ASP.NET (.NET 3.5+) que se ejecutan en IIS 7.5+ en Windows y aplicaciones Java que se ejecutan en Linux: JBoss, Apache Tomcat o Java genéricas como Spring Boot, IBM WebSphere, Oracle WebLogic, etc.
Si la aplicación debe conectarse a una base de datos, debe asegurarse de que el contenedor de la aplicación creado a partir de la imagen de Docker tenga conectividad con la misma base de datos, en el servicio elegido (AWS RDS) o instancia virtual (AWS EC2).