# Infraestructura como código

> Describir servidores, redes y bases de datos en archivos en vez de a clics.

- Nivel: Intermedio
- Temas: Cloud
- URL: https://tidbit.legios.com.ar/es/infrastructure-as-code/
- En inglés: [Infrastructure as code](https://tidbit.legios.com.ar/infrastructure-as-code/)

**Infraestructura como código** (**IaC**) es escribir en un archivo de texto los recursos de nube que necesitás y dejar que una herramienta los cree. En vez de ir clickeando por la consola de AWS para armar una máquina virtual, un bucket y una base de datos, escribís "una instancia de Amazon EC2 de este tamaño, un bucket de Amazon S3 con este nombre, una base Amazon RDS", corrés un comando, y la herramienta hace que la nube coincida con el archivo.

La gran ganancia es la repetibilidad. El archivo vive en Git al lado del código de la aplicación, así que cada cambio se revisa, tiene autor y se puede deshacer. ¿Necesitás un entorno de prueba idéntico? Corrés el mismo archivo de nuevo. ¿Alguien borró un servidor sin querer? Lo volvés a aplicar y reaparece. Con clics no tenés nada de eso, y nadie se acuerda qué se clickeó hace seis meses.

Las herramientas habituales son **Terraform** (funciona con todas las nubes, con un lenguaje propio llamado HCL), AWS CloudFormation (solo AWS, en YAML o JSON), Pulumi y el AWS CDK (los dos usan lenguajes de programación comunes). Todas comparan lo que dice el archivo con lo que existe y muestran un plan ("va a crear 2, cambiar 1, destruir 0") antes de tocar nada.

## Una analogía

Una receta escrita en vez de la memoria del cocinero. Con la receta en papel, cualquier cocina puede hacer el mismo plato hoy, la semana que viene o en otra ciudad, y un error de tipeo se ve antes de la cena, no durante.

## Para quedarse

- Los archivos de infraestructura se versionan, revisan y reutilizan como el código de la app.
- Las herramientas muestran un plan de cambios antes de aplicarlos.
- Terraform es multi-nube; CloudFormation y CDK son nativos de AWS.
- "Drift" es cuando alguien cambia cosas a mano y el archivo ya no coincide con la realidad.

## Para seguir leyendo

- [¿Qué es la infraestructura como código? (AWS)](https://aws.amazon.com/es/what-is/iac/)
- [¿Qué es Terraform? (documentación oficial, en inglés)](https://developer.hashicorp.com/terraform/intro)
- [Infraestructura como código (Wikipedia)](https://es.wikipedia.org/wiki/Infraestructura_como_c%C3%B3digo)

## Términos relacionados

- [Computación en la nube](https://tidbit.legios.com.ar/es/cloud-computing/): Alquilar computadoras por internet en vez de comprar las tuyas.
- [Máquina virtual](https://tidbit.legios.com.ar/es/virtual-machine/): Una computadora completa hecha de software, que corre adentro de una real.
- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [Amazon EC2](https://tidbit.legios.com.ar/es/amazon-ec2/): Computadoras virtuales que alquilás por hora, del tamaño que quieras, y después apagás.
- [Amazon S3](https://tidbit.legios.com.ar/es/amazon-s3/): Un cajón gigante en internet para guardar archivos, alquilado por gigabyte.
- [Amazon RDS](https://tidbit.legios.com.ar/es/amazon-rds/): Una base de datos relacional lista para usar, que AWS mantiene parchada y respaldada.
- [Git](https://tidbit.legios.com.ar/es/git/): Una máquina del tiempo para el código: cada cambio guardado, por quién y por qué.
- [Servidor](https://tidbit.legios.com.ar/es/server/): Una computadora cuyo trabajo es responder pedidos de otras computadoras, todo el día.
