En este nuevo artículo me gustaría explicar que es infraestructura como código (IAC), pero primero definamos a que nos referimos cuando hablamos sobre infraestructura. Cuando hablamos de infraestructura nos referimos en este caso, a un servidor(vps) , dominios, redes privadas. etc.
Definición
El concepto de infraestructura como código no es más que la forma de automatización de nuestra infraestructura a través de código .
Puede que tu seas un freelance o trabajes en una compañía, en la que constantemente se hace deploy de nuevas aplicaciones. Imagina tener que estar creando un servidor(vps), agregando las llaves ssh, creando un record A, load balancers, continuar con la instalación y configuración de nginx ,mysql docker, php, etc. Todo esto cada vez que tengas que hacer deploy de una nueva aplicación. Este es un proceso en el que muchas veces se le dedica tiempo innecesario.
Es por ello que muchas veces, es mejor encontrar o crear una solución para la automatización en este tipo de procesos.
Para poder trabajar o usar infraestructura como código, lo único que tenemos que hacer es bien, crear nuestro propio script, o bien usar alguna herramienta de un tercero.
Usualmente cuando trabajamos con infraestructura como código, independiente de la herramienta que usamos, siempre trabajamos con algún lenguaje para la descripción de la configuración, pudiendo ser json, yaml o algún nuevo lenguaje propio del software (domain-specific language ). dentro del archivo de configuración, es donde definiremos todo los componentes necesarios para crear nuestra infraestructura, variando de sintaxis entre los diferentes softwares que podemos usar.
Aquí un ejemplo, usando terraform.
En este ejemplo estamos definiendo la creación de un servidor virtual en digital ocean, con 1 gb de ram, usando ubuntu 18.04 como sistema operativo base, en el datacenter de new york.
Otro ejemplo agregando un dominio a nuestro vps
Cabe mencionar que, usualmente este tipo de software nos permite, configurar a nuestra infraestructura, de una manera muy detallada, dependiendo del tipo de proveedor que elijamos , por ejemplo, poder configurar redes privadas, sistema operativo, podemos agregar dominios, subdominios , agregar nuestra claves ssh, elegir el datacenter etc. Algo interesante es que, podemos agregar y ejecutar scripts dentro del vps durante la construcción, esto para poder configurar dentro todo el software.
Aunque de igual forma, tenemos otro concepto llamado configuración como código (CaC) Qué es exactamente el mismo concepto, pero este está orientado a la configuración del software dentro de la infraestructura(vps), por ejemplo la instalación y configuración de nginx, docker, ruby etc. Sin embargo muchas veces los mismos proveedores (IaC) tienen la misma funcionalidad o su funcionalidad es intercambiable.
Ventajas y desventajas.
Dentro de las ventajas como hemos mencionado es el de elaborar una plantilla que podemos re-utilizar múltiples veces, eliminando la necesidad de realizar configuraciones manuales. Esta sería, la principal y más importante característica de este tipo de software. Ya que con ello podemos hacer la replicación de la misma configuración, para diferentes entornos, para testing, QA, producción, desarrollo, etc.
Otra ventaja que podemos encontrar es que usualmente este tipo de software es del tipo agnóstico lo que quiere decir que no importa, el proveedor en donde estés configurando nuestra infraestructura, pudiendo ser digital ocean, amazon web services, azure, e inclusive virtualbox.
Una desventaja que podemos encontrar es quizá el tiempo que le dedicamos en configurar nuestro archivo de configuración, así mismo, el tener que modificar el archivo si es que agregamos una nueva tecnología o configuración a nuestra infraestructura.
Lista de software para IaC y CaC
Debajo vemos una lista con varios de los proveedores de infraestructura y configuración como código más sobresalientes. Cada uno de ellos comparten cierta similitud, en cuanto a configuración.
- Terraform
- Chef
- Puppet
- Ansible
- SaltStack
Conclusión
La automatización es sin duda una de las mejores cosas que podemos hacer para ahorrar tiempo y muchas veces recursos. El uso de IaC, dentro de una empresa o de manera independiente trae muchas ventajas a largo plazo. Este concepto de IaC no es para nada nuevo, es un concepto de muchos años. De hecho muchos autores. hacen referencia a que este concepto fue la base de la cual ha surgido toda esta tendencia del devops. Espero que este pequeño artículo te haya servido, o te haya incentivado a investigar más sobre el tema, y tal vez a aprender una nueva tecnología.