DevOps para Datos · Ingeniería de Datos

Infraestructura como código

Gestionar servidores, redes y recursos en la nube mediante definiciones declarativas en código, reproducibles y versionadas.

Infraestructura como código

Infraestructura que se lee y se versiona Tratar la infraestructura como código es tratarla como software: se escribe, se revisa, se versiona y se aplica. Un entorno ya no es una máquina que alguien tocó una vez, sino un archivo reproducible.

Qué es IaC

La gestión de servidores, redes y recursos mediante archivos de configuración legibles por máquina, en lugar de paneles manuales. El código describe la infraestructura deseada.

El problema del clic

Declarativo frente a imperativo

Declarativo: describes qué quieres (una red, dos máquinas). Imperativo: detallas cada paso para lograrlo. El declarativo deja al motor resolver el cómo.

Idempotencia

Aplicar la misma definición muchas veces produce el mismo resultado, sin duplicar recursos. Es la propiedad que hace seguro reejecutar el código.

Herramientas

Versionado y revisión

Al vivir en un repositorio, los cambios de infraestructura se revisan como cualquier código, con historial y aprobaciones antes de aplicarse.

Ambientes reproducibles

Un documento de código con corchetes a la izquierda que, mediante una flecha y un nodo de rama de git, se transforma a la derecha en iconos de infraestructura en la nube: un servidor, una red en la nube y una base de datos.
La infraestructura se escribe como código versionado: el archivo declarativo levanta, duplica y destruye entornos reales.

Gestión del estado

Las herramientas rastrean el estado real creado y lo comparan con el código. Ese archivo de estado es delicado: debe compartirse y protegerse.

GitOps

Tratar un repositorio git como única fuente de verdad: lo que está desplegado debe coincidir con el código, y un cambio se aprueba con una solicitud de cambio.

Seguridad y secretos

Deriva de configuración

Si alguien cambia la consola sin tocar el código, la realidad se aleja de lo declarado. Detectar y reconciliar ese deriva es clave.

Errores frecuentes

Ejemplo resuelto: duplicar producción para pruebas

Un equipo necesita un entorno idéntico a producción para unas pruebas. Como toda la infraestructura vive en archivos declarativos versionados, basta clonar la definición, cambiar un parámetro de nombre y aplicar: se levantan la misma red, las mismas máquinas y la misma base, y al terminar se destruyen con un comando.

  1. escribir la definición declarativa de la infraestructura
  2. revisar y aprobar el cambio en el repositorio
  3. planificar para simular qué creará o modificará
  4. aplicar para alcanzar el estado descrito
  5. destruir el entorno cuando ya no hace falta

¿Para qué sirve en la realidad?

Equipos que gestionan decenas de entornos en la nube necesitan que levantar, duplicar o deshacer infraestructura sea un archivo reproducible y revisable, no una máquina que alguien tocó una vez a mano.

La idempotencia en la infraestructura como código garantiza que:

Con infraestructura como código, un entorno puede destruirse y volver a levantarse idéntico ejecutando el mismo código.

IaC

Declarar infraestructura en archivos
iac
Describir el qué, no el cómo
declarativo
Mismo resultado al reejecutar
idempotencia
Repositorio como fuente de verdad
gitops
Realidad que se aleja del código
deriva

Ordena el flujo de trabajo de IaC:

Escribir
Revisar
Plan
Aplicar

Infraestructura como código
Gestión de infraestructura mediante definiciones en código.

Une cada término de IaC con su definición:

IaC

# Infraestructura como código
## Enfoque
### declarativo
### idempotente
### reproducible
## Herramientas
### Terraform
### Ansible
### plantillas de nube
## Prácticas
### versionar
### revisar
### GitOps
## Cuidados
### secretos cifrados
### estado compartido
### deriva de configuración

GitOps
Usar un repositorio git como fuente de verdad del despliegue.

Alguien amplió un disco desde la consola de nube y nadie lo sabe. ¿Qué práctica de IaC impediría ese deriva y cómo lo detectarías?