Trabajar en equipo con Terraform exige un punto de verdad compartido. Si tu estado local difiere del de tus compañeros, la infraestructura empieza a desincronizarse. La solución es configurar un backend remoto que aloje el archivo de estado en una cuenta de almacenamiento de Azure, accesible para todo el equipo.
¿Qué es un estado remoto en Terraform y por qué lo necesitas?
El estado remoto es un archivo centralizado donde Terraform guarda el registro de los recursos creados. Cuando varias personas trabajan sobre la misma infraestructura, este archivo evita conflictos y mantiene una única fuente de verdad.
¿Qué pasa si no uso un estado remoto? Cada miembro del equipo trabajaría con su propio archivo local, lo que provoca discrepancias, recursos duplicados y errores difíciles de rastrear.
¿Cómo preparar la cuenta de almacenamiento en Azure?
Antes de tocar Terraform, necesitas crear manualmente la infraestructura que hospedará el estado. Este paso se hace desde el portal de Azure y no requiere código.
¿Qué recursos crear en el portal de Azure?
El flujo se reduce a tres pasos secuenciales que dejan listo el espacio donde vivirá tu archivo de estado.
- Crea un resource group llamado
estados-terraform en la región Brazil South, o la más cercana a tu ubicación.
- Dentro de ese grupo, crea una storage account en minúsculas, por ejemplo
estadosterraformadmin, en la misma región.
- Dentro de la cuenta, crea un container llamado
states, que funcionará como la carpeta donde se guardará el archivo.
Con estos tres elementos listos, ya tienes la base remota. Ahora necesitas extraer los datos que Terraform usará para conectarse.
¿Qué datos necesitas extraer de Azure?
Para configurar el backend, Terraform pide cuatro valores específicos que debes tener a la mano antes de escribir el código.
- El nombre de la storage account.
- El nombre del container donde se hospedará el archivo.
- El nombre del archivo de estado que vas a crear.
- La access key de la cuenta de almacenamiento, disponible en la sección de llaves de acceso.
¿Cómo configurar el archivo backend.tf en Visual Studio Code?
Una vez que tienes los recursos en Azure, te mueves a tu editor. Crea una carpeta nueva llamada estado-remoto y copia dentro el proyecto de proveedores que ya tenías. Ahí agregas un archivo nuevo: backend.tf.
¿Qué es el archivo backend.tf? Es el archivo donde defines dónde se guardará el estado de Terraform. Contiene un bloque terraform con la configuración del proveedor remoto, en este caso Azure.
La estructura del archivo se construye con un bloque terraform que contiene un sub-bloque backend apuntando a azurerm. Dentro pasas los valores que extrajiste del portal:
hcl
terraform {
backend "azurerm" {
storage_account_name = "estadosterraformadmin"
container_name = "states"
key = "estados.tfstate"
}
}
Un detalle importante: el nombre del archivo no debería ser genérico como terraform.tfstate. Como probablemente vas a guardar varios estados en el mismo contenedor, conviene nombrarlo según el proyecto, por ejemplo estados.tfstate.
¿Por qué excluir el SAS token del archivo?
El SAS token es información sensible. Si lo dejas escrito en backend.tf, ese dato terminará en tu control de versiones y cualquiera con acceso al repositorio podría manipular tu infraestructura.
La práctica correcta es eliminar ese campo del archivo y pasarlo por otra vía, como variables de entorno o parámetros en línea cuando ejecutas el comando. Así proteges la llave y mantienes el repositorio limpio.
¿Qué sigue después de configurar el backend?
Con el archivo backend.tf listo y la cuenta de almacenamiento preparada, el siguiente paso es ejecutar terraform init. Ese comando lee la configuración del backend, se conecta a Azure y migra el estado al contenedor remoto.
A partir de ahí, cualquier persona del equipo que ejecute Terraform sobre el mismo proyecto va a leer y escribir en ese archivo central. Se acabaron las divergencias entre máquinas locales.
¿Ya configuraste un backend remoto en algún proyecto? Cuéntame en los comentarios qué proveedor usaste y cómo manejaste las credenciales sensibles.