El software se ha comido al mundo y la complejidad para elaborar este software ha subido. De un tiempo para acá ya no se necesitan únicamente desarrolladores backend o frontend, ahora surge la necesidad de ingenieros enfocados totalmente al diseño y creación de infraestructuras para el software. Estos son los tan famosos y deseados DevOps Engineers que entre algunas de sus responsabilidades están:
- Dominar el uso de Cloud Providers como AWS, Azure o Google Cloud para crear infraestructuras que desplegar aplicaciones, actualizaciones o arreglos de bugs.
- Solucionar problemas de producción y coordinar a su equipo de desarrollo para resolver rápido el problema.
- Implementar automatización de despliegue para Integración Continua y Despliegue Continuo (CI/CD).
- Optimizar la arquitectura de software de la empresa.
De estas responsabilidades es que nace la infraestructura como código cuyo enfoque es la automatización de infraestructura tomando algunos de los principios del desarrollo de software:
1. Los sistemas se pueden reproducir fácilmente
Tienes un archivo donde vas a definir tu infraestructura, sabes lo que quieres crear.
2. Los sistemas son desechables
Si un servidor falla simplemente desechas ese servicio y creas de manera rápida una nueva instancia.
3. Los sistemas son consistentes
Tu archivo de definición es tu única fuente de la verdad. Todo sistema que instancies va a seguir las mismas especificaciones que le indiques en tu archivo de definición.
4. Los sistemas son repetibles
Escribe una definición de tu sistema una vez y utiliza este archivo la cantidad de veces que sean necesarias.
5. El diseño siempre está cambiando
Una vez plasmada la definición de tu sistema es más sencilla darle seguimiento a los cambios que generes y ver qué cosas te hacen falta implementar.
Esto trae consigo varios beneficios y buenas prácticas como:
- Los procesos y sistemas que se crean se autodocumentan.
- Permite versionar tu código logrando visibilidad y trazabilidad de cada cambio realizado…
- Optar por las iteraciones rápidas y cambios pequeños.
- Mantener los servicios continuamente disponibles y en caso de necesitar más servicios se pueden crear bajo demanda.
- Automatización, creación y configuración de infraestructura sin intervención humana logrando CI y CD.
- Ambientes homogéneos. Misma definición para múltiples ambientes.
Terraform, tu mejor herramienta
Terraform es una herramienta open source escrita en Go que sigue el enfoque de infraestructura como código. La gran ventaja de usar Terraform frente otras herramientas es que dentro de su lógica Terraform lo que hace es interactuar con las APIs de los proveedores de nube, ya sean nubes públicas como Azure, AWS o Google Cloud Provider o privadas como OpenStack.
Gestión de configuraciones vs definición de infraestructura
Terraform permite crear infraestructura mientras que herramientas como Ansible nos ayuda con su configuración. Uniendo estas dos herramientas tienes un control total de tu infraestructura.
Instancias inmutables
Dentro de Terraform las instancias de infraestructura se manejan de manera inmutable, si realizaste algún cambio sobre tu archivo de definición de un servidor, entonces este servidor se destruye y se crea uno totalmente nuevo.
Lenguaje declarativo vs procedural
Ansible sigue el lenguaje procedural, esto significa que debes indicar los pasos a seguir para configurar la infraestructura, programar el cómo hacer las tareas.
Mientras que en Terraform utilizamos el lenguaje declarativo, nosotros definimos las configuraciones que queremos y Terraform se encarga de realizarlo, programamos el qué.
Si eres DevOps o quieres iniciarte en este increible mundo de la infraestructura como código para agilizar los despliegues de tus aplicaciones te invito a que tomes el Curso de Infraestructura como código con Terraform.
Curso de Infraestructura Como Código con Terraform