¿Cómo automatizar una infraestructura de punta a punta con AWS?
En tiempos de cloud, este es el mensaje que se repite una y otra vez: cómo conseguir que los profesionales IT de la empresa dediquen más tiempo a generar valor para la compañía y menos a tareas repetitivas que se podrían realizar de forma automática.
La capacidad de desarrollar infraestructuras y soluciones en la nube, de forma local o híbrida, y automática, en cuestión de segundos, es una inversión de gran importancia y valor. Automatizar la infraestructura implica optimizar tiempos, reducir costos y carga de mantenimiento de la infraestructura, mejorar la seguridad y maximizar la productividad de nuestra infraestructura IT.
¿Cómo lo hacemos? ¿qué podemos automatizar?
La automatización de la infraestructura tecnológica se refiere al uso de herramientas y procesos para automatizar la configuración, instalación, actualización y administración de la infraestructura de IT. Esto incluye servidores, almacenamiento, redes, implementación de actualizaciones de software, la administración de recursos de red, la gestión de configuraciones de servidores, el monitoreo de la infraestructura, entre otros.
La infraestructura como código llega para reemplazar los procesos manuales y brindar escalabilidad al permitirnos gestionar y tratar cada elemento de la infraestructura como si fuesen software. Funciona de forma declarativa, por lo que podemos asociar su funcionamiento con una lista de compras.
Primer paso: planificación según la necesidad del proyecto.
Aunque parezca una obviedad, es importante poner como primer paso la planificación de las necesidades del proyecto, sus requerimientos y posibilidades según la base desde donde iniciaremos el proceso de automatización para luego implementar en la nube.
¿Cuáles son esos requerimientos?
- integrar cada cambio del equipo de desarrollo.
- ejecutar las pruebas automatizadas sobre el producto que se desarrolla.
- guardar los resultados del build.
- reconstruir automáticamente la infraestructura.
- desplegar cada cambio para que pueda ser probado y usado.
Listado de herramientas de AWS :
- CodeCommit: repositorio para almacenar el código.
- EventBridge: servicio para conectar componentes desde un evento. Ejemplo de push: en la rama main al repositorio en CodeCommit a la ejecución automática del CodePipeline.
- CodePipeline: CI/CD de AWS que nos permitirá automatizar el Build y Deploy del código cada vez que es modificado.
- CodeBuild: proyecto necesario en el paso “Build” de CodePipeline para construir de forma automática la nueva imagen de Docker cada vez que se implementa un cambio, hacer el Tag y Push al repositorio de ECR para almacenar la nueva imagen.
- ECR: repositorio para almacenar la imagen construida de Docker a partir del código proporcionado.
- ECS Cluster: servicio de administración de contenedores.
- Task Definition: definición de recursos necesarios para ejecutar en ECS la imagen de docker almacenada en ECR.
- ECS Service: mantiene en ejecución las tareas deseadas en el Cluster de ECS.
- Application Load Balancer: se encarga de direccionar tráfico HTTP/HTTPS, de esta forma podemos recibir peticiones desde internet y redireccionar el tráfico a los servicios que implementamos en ECS.
Segundo paso: infraestructura como código.
Para poder automatizar hay que llevar a código la infraestructura del proyecto. En el paso anterior seguramente ya se analizó y planteó qué y cómo hacerlo.
Para esta instancia es necesario contar con una herramienta para aumentar la automatización, permitiéndonos suministrar la infraestructura como código por medio de archivos declarativos, gestionando así todo el ciclo de vida desde la creación de recursos, modificación de lo existente y destrucción en caso de no ser necesarios. Algunas de ellas son Terraform o AWS CloudFormation.
Tercer paso: implementar en AWS.
Llegar a este punto implica el desarrollo de un workflow donde se identifican y declaran los componentes necesarios para el proyecto en los archivos de configuración, y una vez realizado el código de la configuración, antes de aplicarlo, una validación de la configuración que describe lo que se hará para alcanzar los requerimientos indicados.
¿Cuáles son las ventajas de automatizar?
- Codificar y documentar cada gestión de configuración necesaria.
- Nos permite hacer un control de versiones al igual que cualquier archivo/repositorio de código.
- Podemos replicar la infraestructura necesaria tomando como base un diseño definido.
- Facilita la construcción de una infraestructura más consistente y de mayor calidad al tener mejor capacidad de administración sobre la misma.
- Menor tasa de errores porque ya no dependemos de la intervención humana y todo queda en las recetas automatizadas.
- Mayor "resiliencia" / tolerancia a ausencias, vacaciones, rotaciones de personas entre equipos porque ya no depende del conocimiento de una persona.
Si esto te interesó…
Si llegaste hasta acá, y te interesaría profundizar sobre el tema, Hablemos y tomemos un café.
También podés conocer más sobre migrar a la nube con AWS en esta nota.