La infraestructura como código (IaC) consiste en describir la infraestructura —servidores, redes, bases de datos, balanceadores— en archivos de texto versionados, en lugar de crearla a mano haciendo clic en una consola. Terraform es la herramienta más usada para esto. Su enfoque es declarativo: escribís qué recursos querés que existan y con qué características, y Terraform calcula los pasos para llegar a ese estado, hablando con la API del proveedor (una nube, un servicio). Su concepto más importante y peligroso es el estado: un archivo donde Terraform registra qué recursos creó y cómo se corresponden con tu código, para saber qué cambiar la próxima vez. El flujo de trabajo tiene dos pasos clave: plan muestra qué cambiaría antes de tocar nada —una previsualización que hay que leer siempre— y apply ejecuta esos cambios. Las ventajas: la infraestructura queda documentada, versionada, reproducible y revisable como cualquier código. Las reglas críticas: el estado se guarda de forma remota y protegida (contiene datos sensibles), y los secretos nunca van en el código. Terraform crea la infraestructura; para configurar lo que corre dentro se usa Ansible.
Ver índice de contenidos
Qué es la infraestructura como código
Crear infraestructura a mano —entrar a la consola de una nube, hacer clic para levantar un servidor, configurar la red, abrir puertos— tiene tres problemas graves. Es lento, es irrepetible (nadie recuerda exactamente qué se tocó) y es propenso a errores (un clic distinto y dos entornos que deberían ser iguales dejan de serlo).
La idea: la infraestructura en archivos
La infraestructura como código reemplaza esos clics por archivos de texto que describen la infraestructura deseada. Esos archivos se versionan en Git, se revisan como cualquier cambio de código, y se aplican de forma automática y repetible. El mismo archivo levanta un entorno de pruebas y otro de producción idénticos, y sirve de documentación siempre actualizada de qué hay y por qué.
Terraform es la herramienta más extendida, y una de sus ventajas es que funciona con muchos proveedores (distintas nubes y servicios) con el mismo lenguaje, en lugar de aprender la herramienta específica de cada uno.
Declarar recursos
Terraform es declarativo: no describís los pasos para crear algo, sino el resultado que querés. Escribís «quiero un servidor con estas características», y Terraform averigua si hay que crearlo, modificarlo o dejarlo como está.
# Declarar QUÉ debe existir, no cómo crearlo paso a paso
resource "proveedor_servidor" "web" {
nombre = "servidor-web"
tipo = "pequeno"
imagen = "ubuntu-24-04"
region = "sa-east-1"
}La diferencia con un enfoque imperativo (dar órdenes paso a paso) es la misma que hace potente a Kubernetes: vos describís el destino, la herramienta calcula el camino. Si mañana cambiás el tipo de servidor en el archivo, Terraform detecta la diferencia y solo modifica eso, sin recrear todo.
El estado: el concepto clave
Acá está el concepto que más problemas causa y que hay que entender bien. Terraform mantiene un archivo de estado donde registra qué recursos creó y cómo se corresponden con cada bloque de tu código. Ese estado es lo que le permite, en la próxima ejecución, saber qué existe ya y qué debe cambiar: sin él, no podría relacionar tu código con la realidad.
Uno: el archivo de estado suele contener datos sensibles (direcciones, identificadores y a veces secretos), así que nunca se sube a un repositorio; se guarda de forma remota y protegida, cifrado y con control de acceso. Dos: si el estado se pierde, se corrompe o dos personas lo modifican a la vez, Terraform pierde la noción de qué gestiona y puede duplicar o destruir recursos. Por eso el estado remoto incluye un bloqueo que impide dos ejecuciones simultáneas.
El ciclo plan y apply
El flujo de trabajo de Terraform gira en torno a dos comandos, y el primero es lo que lo hace seguro:
terraform plan. Compara tres cosas —lo que dice el código, lo que dice el estado y lo que existe de verdad en el proveedor— y muestra una previsualización de qué recursos se crearían, cuáles se modificarían y cuáles se destruirían, sin tocar nada. Este paso hay que leerlo siempre con atención.terraform apply. Ejecuta los cambios que mostró el plan, crea o modifica los recursos reales, y actualiza el estado para reflejar la nueva realidad.
Ese plan antes de apply es la red de seguridad: te deja ver que un cambio inocente en el código no va a destruir una base de datos de producción por descuido. Leer el plan —sobre todo lo que dice «se destruirá»— antes de confirmar es la costumbre que separa un uso responsable de un accidente caro. Con la infra en código, además, es más fácil ver y controlar lo que se paga.
Errores frecuentes
- Subir el archivo de estado al repositorio. Contiene datos sensibles; va en un backend remoto protegido.
- No leer el plan antes de aplicar. Un cambio descuidado puede destruir recursos de producción.
- Modificar recursos a mano por fuera de Terraform. Genera «deriva»: el estado y la realidad dejan de coincidir.
- Escribir secretos en los archivos .tf. Se versionan; van en un gestor de secretos y se inyectan.
- Compartir el estado sin bloqueo. Dos ejecuciones simultáneas pueden corromperlo o duplicar recursos.
- Un solo estado gigante para todo. Conviene dividir por entornos y componentes para acotar el riesgo.
- Confundir Terraform con una herramienta de configuración. Crea infraestructura; configurar lo que corre dentro es tarea de Ansible.
Preguntas frecuentes
¿Qué es la infraestructura como código?
Es la práctica de describir la infraestructura —servidores, redes, bases de datos, balanceadores de carga y demás recursos— en archivos de texto versionados, en lugar de crearla y configurarla manualmente haciendo clic en la consola de un proveedor. El enfoque manual tiene tres problemas serios: es lento, es irrepetible porque nadie recuerda con exactitud qué se tocó, y es propenso a errores porque una diferencia mínima entre dos configuraciones hechas a mano lleva a que entornos que deberían ser idénticos dejen de serlo. La infraestructura como código resuelve todo esto al convertir la infraestructura en archivos que se guardan en un control de versiones, se revisan como cualquier cambio de código y se aplican de forma automática y reproducible. El mismo archivo puede levantar un entorno de pruebas y uno de producción idénticos, y sirve además como documentación siempre actualizada de qué recursos existen y con qué configuración, algo que con la creación manual se pierde inevitablemente.
¿Qué es Terraform y cómo funciona?
Terraform es la herramienta más usada para hacer infraestructura como código. Funciona de manera declarativa: en sus archivos uno describe qué recursos quiere que existan y con qué características, y Terraform se encarga de calcular los pasos necesarios para llevar la infraestructura a ese estado, comunicándose con la interfaz de programación del proveedor correspondiente, por ejemplo una nube. Una de sus grandes ventajas es que trabaja con muchos proveedores distintos usando el mismo lenguaje, en lugar de obligar a aprender la herramienta específica de cada uno. Su flujo de trabajo gira en torno a dos operaciones: una que previsualiza exactamente qué cambios se harían sin tocar nada, y otra que aplica esos cambios y crea o modifica los recursos reales. Además, mantiene un registro llamado estado que le permite saber qué recursos gestiona y relacionarlos con el código, de modo que en cada ejecución solo cambie lo que hace falta en lugar de recrear todo.
¿Qué es el estado en Terraform y por qué es tan importante?
El estado es un archivo que Terraform mantiene y en el que registra qué recursos ha creado y cómo se corresponden con cada bloque del código que los declara. Es fundamental porque es lo que le permite a Terraform, en cada ejecución, saber qué existe ya en la realidad y compararlo con lo que dice el código para determinar qué debe crear, modificar o destruir; sin el estado, Terraform no tendría forma de relacionar la configuración con la infraestructura real. Es también el elemento más delicado por dos motivos. Primero, suele contener datos sensibles como direcciones, identificadores y a veces secretos, por lo que nunca debe subirse a un repositorio y debe guardarse de forma remota, cifrada y con control de acceso. Segundo, si el estado se pierde, se corrompe o dos personas lo modifican simultáneamente sin coordinación, Terraform pierde la noción de qué gestiona y puede llegar a duplicar o destruir recursos; por eso el estado remoto incorpora un bloqueo que impide dos ejecuciones a la vez.
¿Para qué sirven los comandos plan y apply?
Son los dos pasos centrales del flujo de trabajo de Terraform y juntos son lo que hace seguro el proceso. El comando de plan compara lo que dice el código, lo que registra el estado y lo que existe realmente en el proveedor, y produce una previsualización detallada de qué recursos se crearían, cuáles se modificarían y cuáles se destruirían, sin aplicar ningún cambio todavía. El comando de apply toma esos cambios previstos y los ejecuta, creando o modificando los recursos reales y actualizando el estado para reflejar la nueva situación. La importancia de tener un paso de previsualización separado es enorme: permite verificar antes de confirmar que un cambio aparentemente inofensivo en el código no va a destruir por descuido, por ejemplo, una base de datos de producción. Leer con atención el resultado del plan, prestando especial cuidado a todo lo que aparezca marcado para destruirse, es la costumbre que distingue un uso responsable de Terraform de un accidente costoso.
¿Dónde guardo los secretos que usa mi infraestructura?
Nunca en los archivos de configuración de Terraform, porque esos archivos se versionan en un repositorio y se comparten, de modo que cualquier contraseña, clave o token escrito ahí quedaría expuesto. Los secretos se guardan en un gestor de secretos dedicado y se inyectan en el momento de la ejecución, por ejemplo a través de variables de entorno o de la integración de Terraform con ese gestor. Hay además una consideración específica y muy importante: el propio archivo de estado de Terraform puede llegar a contener secretos en texto, porque registra los valores de los recursos creados, por lo que ese estado debe guardarse de forma remota, cifrada y con acceso restringido, y jamás subirse al repositorio. En síntesis, se aplica la misma regla universal que rige para el código fuente, las imágenes de contenedor y los pipelines —los secretos viven en un mecanismo aparte pensado para protegerlos— más el cuidado adicional de proteger el estado precisamente porque puede contenerlos.
¿Terraform reemplaza a herramientas como Ansible?
No, resuelven problemas distintos y complementarios, y de hecho es común usarlos juntos. Terraform se ocupa de aprovisionar la infraestructura, es decir de crear y gestionar los recursos: levantar servidores, definir redes, crear bases de datos y balanceadores. Ansible, en cambio, se ocupa de la gestión de configuración, es decir de preparar lo que corre dentro de esos servidores una vez que existen: instalar paquetes, configurar servicios, desplegar aplicaciones y dejar el sistema en el estado deseado. Una forma clara de recordarlo es que Terraform construye la casa y Ansible la amuebla y la deja lista para vivir. En muchos flujos de trabajo, Terraform crea primero la infraestructura y luego Ansible configura las máquinas resultantes. Aunque hay cierto solapamiento y cada herramienta puede hacer algo del terreno de la otra, usar cada una para lo que hace mejor da resultados más limpios y mantenibles que forzar una sola a cubrir ambos roles.
Fuentes
Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.
Aportes de la comunidad Underc0de
- Underc0de, foro. Sección GNU/Linux. Infraestructura, servidores y nube.
- Underc0de, foro. Sección Redes. Redes, cómputo y aprovisionamiento.
Documentación oficial
- HashiCorp. Documentación oficial de Terraform. La referencia del lenguaje y el flujo de trabajo.
- HashiCorp. State. Qué es el estado y por qué es central.
- HashiCorp. terraform plan. Cómo se previsualizan los cambios antes de aplicarlos.
- HashiCorp. Remote state. Cómo compartir el estado en equipo de forma segura.