Reto conseguido: crear la infra para 300 apps en multiples cloud

Oscar Morcillo Cuajares
MercadonaIT
Published in
5 min readMar 6, 2024

En MercadonaIT estamos inmersos en un proceso de renovación tecnológica, acometiendo la migración y refactorización de las más de 300 aplicaciones monolíticas alojadas en nuestro CPD a entornos Nube con tecnología CNA.

El primer paso fue estandarizar la arquitectura de las aplicaciones con un diseño homogéneo para todas. Buscábamos maximizar el uso de los recursos y simplificar al máximo la gestión. Tras ello, llegó la parte del despliegue de la infraestructura necesaria para cada aplicación. Escogimos la herramienta Terraform para crear infraestructura como código (IaC) y Gitlab como repositorio de código.

Fueron suficientes pocas aplicaciones para darnos cuenta de que iba a ser un camino laborioso. Los responsables de las aplicaciones querían empezar a desarrollar y desplegar, pero en el equipo de infraestructura Nube aún estábamos preparando el terreno:

· Planteando el código para desplegar la infraestructura

· Colaborando con los compañeros de seguridad para que asignasen los permisos adecuados, y habilitando las comunicaciones necesarias.

· Coordinándonos con el equipo especialista para la creación de los registros DNS y la federación de las aplicaciones en nuestro Identity Provider.

La fase de la preparación fue más compleja de lo pensado, debido a:

· Tener varios equipos con responsabilidades diferentes, implicados en la infraestructura.

· Errores humanos que nos costaron tiempo de detectar y solucionar.

· Cambios de criterios en el diseño, que había que trasladarlos uno por uno al código de cada aplicación.

Los equipos de desarrollo no confiaban en contar con la infraestructura en las condiciones adecuadas y anticipaban sus peticiones para tener margen de maniobra ante los errores.

Todo esto generaba un círculo vicioso: los equipos de desarrollo pedían con los requerimientos poco claros, se generaba la infra con errores, que además luego había que cambiar cuando lo requerimientos estaban más cerrados y vuelta a empezar. Por ello, decidimos que había llegado el momento de agilizar el proceso y nos propusimos diseñar una solución de automatización que nos permitiera recopilar todos los pasos de creación de la infraestructura en un solo clic.

Tras plantear el proyecto y valorar las distintas tecnologías que nos garantizasen el éxito en cuanto a la automatización del proceso completo, optamos por:

  • Terraform para la infraestructura.
  • Gitlab como repositorio de código.
  • AWX para la configuración y despliegue de infraestructura
  • Python y Bash para la orquestación de las ejecuciones interna y la creación de la dinámica del código.
  • C# y swagger para las federaciones.
  • Spinnaker para orquestación de cada paso en Kubernetes.

Una vez tuvimos claro qué herramientas utilizaríamos, nos pusimos manos a la obra, para utilizar de la mejor forma cada una de ellas.

Terraform

Es la herramienta multicloud donde podemos reflejar lo que vamos a crear con un lenguaje declarativo. Creamos módulos para cada uno de los recursos o conjunto de recursos que utilizamos. Nuestro objetivo era tener un único punto de cambio para posibles modificaciones que sufrieran las aplicaciones y además instanciar de forma fácil las llamadas a los módulos y simplemente modificar ciertas variables a utilizar.

GitLab

Elegimos Gitlab porque nos permite tener un repositorio donde guardar y versionar nuestros desarrollos, además de ser una herramienta con gran potencial a la hora de trabajar con integración continua.

Podemos integrar los automatismos de forma sencilla y ágil, gracias a su API muy sencilla de usar.

AWX

Herramienta gratuita con soporte de la comunidad. Ansible nos otorga la versatilidad de configurar y desplegar infraestructura y con AWX podemos apificar las funcionalidades para que sean llamadas por API REST desde los automatismos.

Python y Bash

Siendo conocedores de la potencia de estos 2 lenguajes de programación, decidimos combinarla para sacar el máximo provecho de ellas y poder utilizar las bondades de cada una.

C# y swagger

Nos hemos valido de C# y Swagger para poder programar y apificar las automatizaciones en federaciones de nuestro Identity Provider.

Spinnaker

Utilizamos Spinnaker como interfaz gráfica y orquestador de los pasos necesarios, siendo Kubernetes el motor de ejecución de todas nuestras automatizaciones.

Hacia una nueva realidad

Una vez llegados a acuerdos con cada uno de los responsables de los recursos de infraestructura que forman las aplicaciones (Seguridad, comunicaciones, bases de datos, Kubernetes, …) y tras estandardizar esas partes, empezamos a diseñar qué flujos queríamos tener en nuestra automatización y cómo se iban a relacionar entre si estas herramientas.

Una vez tuvimos claro el flujo, empezamos a orquestar la creación de todo el código que iba a crear la infraestructura para cada una de las aplicaciones, teniendo en cuenta que los inputs de cada step eran los outputs del step anterior.

Desarrollamos un script de orquestación en Bash el cual con un simple archivo JSON, construía el código de Terraform, basándose en plantillas de cada uno de los módulos. Además, previmos el escenario de posibles cambios en el archivo JSON, consiguiendo que de forma automática se modificara nuestro código, añadiendo o eliminando la infra necesaria del código, en función de los cambios sufridos.

Por otro lado, realizamos otros scripts que creaban los recursos a partir de código anteriormente subido a Gitlab.

Todos estos scripts se despliegan en Kubernetes mediante Spinnaker, que se encarga de orquestar paso a paso las llamadas a cada una de las funcionalidades a desplegar.

Con todo esto, conseguimos bajar la duración de las tareas para crear la infraestructura de cada aplicación, de 3 semanas a tan solo 20 minutos y sin errores.

Una vez esta automatización estuvo en marcha logramos mejorar el tiempo de las migraciones y poder dedicar el trabajo del equipo de infraestructura a lo que más valor nos aporta: mejorar la infraestructura de las aplicaciones para hacerlas más resilientes.

Conclusiones

Dedicar tiempo a las automatizaciones, por más que al principio pueda parecer un proceso largo y tedioso, realmente facilita y agiliza el trabajo a medio plazo, impulsando mejoras. En nuestro caso, logramos liberar a muchos profesionales de tareas rutinarias en las que se podían cometer errores, para poder dedicar las horas de cada uno de los equipos a innovar y mejorar.

Así es cómo lo hemos abordado en MercadonaIT. Si quieres conocer más, no dudes en dejarme un comentario.

--

--