Migrando una aplicación Java on-premise a la nube (AWS) : Contenedores vs. Servicios especializados

Martín D Cernadas
2 min readJun 30, 2021

--

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).

Basado en el artículo de Channy Yun.

--

--