La puesta en escena se creó haciendo clic en el panel de Hetzner un viernes por la tarde. Seis meses después, nadie sabe por qué el firewall permite el puerto público 6379. La producción está en Terraform, excepto el depósito S3 agregado manualmente "temporalmente". Resultado: dos verdades, un "plan terraformación" que quiere destruir lo que el equipo todavía usa.
Terraform promete reproducibilidad. Solo es válido si el estado, los módulos y la gobernanza siguen el mismo nivel de requisitos que el código de la aplicación.
Proveedores, recursos y lo que modelamos
Los proveedores europeos (Hetzner hcloud, OVH, Scaleway, OpenStack) exponen servidores, volúmenes, redes privadas, DNS y equilibradores de carga. Modele qué cambia con frecuencia y qué necesita ser rastreable:
| Recurso | Interés Terraform | Trampa |
|---|---|---|
| Servidor/instancia | Tamaño, imagen, región codificada | ciclo de vida ignore_changes deriva de máscara |
| Cortafuegos/grupo de seguridad | Reglas versionadas | Regla manual fuera de TF |
| DNS | Alineación desplegada | TTL y propagación olvidados |
| Almacenamiento de objetos | Cucharones, ciclo de vida | Claves de IAM fuera del estado cifrado |
Si no está en el Estado, no es reproducible: es deuda.
Estado remoto, bloqueo y secretos
Backend remoto (bloqueo S3 +, backend HTTP de GitLab, Terraform Cloud):
- Bloquear durante la aplicación: no se aplican dos aplicaciones simultáneamente.
- Copia de seguridad del estado: a veces contiene datos confidenciales.
- Cifrado en reposo; acceso mínimo.
Nunca confirme terraform.tfstate sin cifrar. Utilice variables confidenciales (TF_VAR_, Vault CI) para los tokens de API del host.
Módulos: DRY sin caja negra
Los módulos reutilizables (vpc + subred + bastión) aceleran, pero un módulo opaco general desalienta la reproducción. Exponer variables explícitas (instance_type, enable_ipv6, backup_window).
Módulos de versión con etiquetas Git (?ref=v1.2.0) — no flotantes main. Como equipo, "terraformar fmt" y "validar" en CI antes de planificar la RM.
Planificar, aplicar y cambiar política
Flujo de trabajo saludable: MR → plan terraforma comentado en CI; revisión humana de destruir y reemplazar; Aplicar automatizado o manual dependiendo de la criticidad.
prevent_destroy en la producción de base de datos. -target reservado para emergencias documentadas; de lo contrario, estado inconsistente.
Importación gradual de recursos heredados: un recurso a la vez, un plan ecológico antes del siguiente.
Hosts europeos y multinube
Evite la nube múltiple de forma predeterminada: un proveedor bien controlado supera a tres configuraciones a medias. Para residencia en la UE, establezca la región y verifique los recursos asociados (región instantánea, réplica).
Referencia cruzada con subcontratos de GDPR: Terraform no garantiza jurisdicción: usted elige la región en el código.
La cumbre: infraestructura como código sin gobernanza = clics disfrazados
Reproducible significa: cualquier ingeniero puede recrear la puesta en escena desde cero, no solo que exista el archivo .tf.
Decide y avanza sin puntos ciegos
Configure un backend remoto y bloquee el acceso. Integre el "plan terraform" en CI en cada solicitud de fusión. Módulos de versión con etiquetas Git. Programe la importación de recursos heredados uno por uno. Separe el estado por entorno: nunca realice la preparación y la producción en el mismo archivo de estado.
Compare proveedores a través del directorio y del comparador. Prueba final: destruir y recrear la puesta en escena desde git: duración y sorpresas documentadas.
Preguntas frecuentes
¿Por qué almacenar el estado de Terraform de forma remota?
El estado local de una computadora portátil impide el trabajo en equipo y se pierde en caso de falla del disco. Un backend remoto bloquea aplicaciones simultáneas y registra cambios.
¿Terraform reemplaza a Ansible?
No: Terraform aprovisiona la infraestructura (servidores, red, DNS, depósitos); Ansible o cloud-init configura el sistema operativo y los servicios. Los dos se complementan.
¿Cómo evitar la deriva?
Plan de CI regular, prohibición de modificaciones manuales no informadas en el código e importación documentada de recursos heredados.
¿Se requiere un espacio de trabajo por entorno?
Sí, puesta en escena y producción estatales separadas. Nunca el mismo estado para dos entornos críticos.
El útil Terraform se puede leer en un plano revisado por un humano, no en una aplicación iniciada desde una computadora portátil sin un testigo.
