Automatizando infraestructura tecnológica con DevOps
Tags: iac, devops, cloudformation, codepipeline
Published: 2023-12-22 13:05:45

Despliega infraestructura de forma continua integrando nuevas tecnologías de desarrollo y operaciones.

La forma de adquirir, mantener y operar infraestructura tecnológica ha evolucionado a medida que nacen nuevos servicios informáticos. Desde hace algunos años, los centros de datos con servidores, equipos físicos y dispositivos de comunicación ubicados en los edificios de las empresas son el soporte de las aplicaciones.

## Evolución de la infraestructura tecnológica

Si era necesario un cambio, actualización ó compra de equipos tecnológicos físicos, se requería de un presupuesto que pasaba por un proceso de aprobación para comprar. Luego, con la llegada de la virtualización era posible tener muchos servidores y equipos virtuales dentro de uno ó más equipos grandes físicos, lo que se podría administrar más fácilmente, a la vez que se ahorrara costos en equipos físicos. La virtualización también ha permitido que proveedores de tecnología pudieran alquilar espacios virtuales de su infraestructura , y así fue surgiendo la infraestructura como servicio, que es alquilar pequeños espacios en vez de comprar equipos completos. Luego, los grandes de tecnología con su gran capacidad de infraestructura distribuida por varios países, empezaron a vender servicios bajo este modelo naciendo los servicios en nube.

Así es como ha cambiado el modelo de compra de infraestructura tecnológica, ahora no solo se compra equipos y servicios, también se arrienda tiempo de uso, volviendo la infraestructura más dinámica en capacidad. Por mencionar ejemplos, los contenedores que son como pequeñas maquinas virtuales dentro de maquinas virtuales y se pueden mover entre centros de datos y nubes, y en el caso de serverlesss que son funciones que solo están disponibles durante el tiempo de uso. Son bajo estos modelos de operación donde no se habla de instalar ó configurar máquinas, sino orquestar servicios y administrar concurrencias.

## Nuevos modelos de infraestructura con despliegue rápido y continuo

Por el lado del software, también ha evolucionado el modelo de entregar un producto. Antes si necesitabas software tenías que solicitar requerimientos y pasar por todo un proceso de aprobación, desarrollo y verificación para entregar la aplicación final. Ahora, los desarrolladores van desplegando pequeños cambios con una aprobación previa, y entrega más ágil.

Si el software se entrega cada vez más rápido, la infraestructura también. La infraestructura como código nace de responder a la pregunta, ¿Y si la infraestructura se pudiera desarrollar como software?. En vez de configurar en una plataforma ó en una línea de comandos, se declaran recursos en plantillas de texto escritas en un lenguaje de programación, por lo general en JSON y YAML, y el sistema de IaC convierte esas plantillas en infraestructura real. Esta forma de desplegar permite tener infraestructura mas disponible, rápida e incluso económica.

Esto ha permitido poder integrar infraestructura al ciclo de vida de desarrollo del software y, a su vez el software se despliega en una infraestructura inmutable. Por inmutable, se refiere a que se mantiene estable bajo cambios. Así, toda la infraestructura y el software se despliegan de forma continua y rápida con pequeños cambios que resultan de las retroalimentaciones. Y lo mejor de este proceso, se puede desplegar de forma automatizada y continuo utilizando herramientas DevOps.

## Demo: Despliegue de infraestructura usando herramientas DevOps

En esta demostración vamos a desplegar una aplicación web simple de tres capas. La primera capa de usuario (frontend) consiste de un balanceador de carga para atender solicitudes a la aplicación, en la capa de servicios (backend) tendremos un servidor con los servicios que soportan la aplicación y en la capa de datos tendremos una base de datos, y como servicios de soporte, está la infraestructura como Código y DevOps para automatizar.

**Arquitectura**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8qllcb50yl90mc8ce21m.png)

**Herramientas**
Las herramientas usadas son los siguientes servicios nativos de Amazon Web Services (AWS).

- AWS CloudFormation: Diseño y despliegue de la infraestructura como código.
- Amazon EC2: Instancias con sistema operativo y aplicación.
- Amazon RDS: Servico de bases de datos relaciones.
- Amazon S3: Servicio de almacenamiento de objetos.
- AWS Elastic Load Balancing: Balanceador de carga para la aplicación.
- AWS CodeCommit: Servicio DevOps para repositorio de código.
- AWS CodePipeline: Servicio DevOps para automatizar despliegue.

**Entorno de laboratorio**

El paso a paso detallado del laboratorio se encuentra en el siguiente repositorio de GitHub: https://github.com/alexrestrej/awscommunity2023-repo

1. Preparar el entorno en una cuenta AWS gratuita.
2. Editar las plantillas de IaC con los parámetros correctos con editor de código como Visual Studio Code.
3. Subir las plantillas IaC a un nuevo repositorio de código AWS CodeCommit.
4. Desplegar stack en AWS CloudFormation
5. Visualizar en AWS CodePipeline el despliegue continuo.
6. Eliminar stacks y recursos para evitar costos.

Así es como se logra entregar de forma continua infraestrucutura y software necesario para las aplicaciones finales, con un proceso automatizado garantizando la integración de equipos de trabajo de desarrollo y operación de tecnología.

Publicación original en: _[Bancolombia Tech](https://medium.com/bancolombia-tech/automatizando-infraestructura-tecnol%C3%B3gica-con-devops-88c16aadac15)_