Terraform 31: 4: Workspaces vs directorios — los trade-offs
easy⏱ 5 mincourseterraform
Workspaces: un dir, muchos estados
Un workspace permite que un directorio tenga múltiples archivos de estado nombrados. Cambiás con terraform workspace select prod y ramificás con terraform.workspace dentro de la config. Rápido de armar, pero todos los entornos comparten exactamente el mismo código sin margen para divergir.
# One directory, switched by workspace name
terraform workspace new dev
terraform workspace new prod
terraform workspace select prod
locals {
# per-workspace sizing, keyed by terraform.workspace
vm_count = {
dev = 1
prod = 3
}[terraform.workspace]
}
Directorios: un dir por entorno
El enfoque de directorio-por-entorno (Lección 6.2) le da a cada entorno su propia carpeta, clave de backend y tfvars. Más archivos que mantener sincronizados, pero cada entorno es explícito, revisable de forma independiente y libre de divergir (prod puede agregar un recurso que dev no tiene).
# Directory-per-environment: explicit, independent
# envs/dev -> its own backend key + tfvars
# envs/prod -> its own backend key + tfvars
cd envs/prod && terraform init && terraform apply
Cuándo elegir cuál
Usá workspaces para muchas copias casi idénticas, efímeras y de bajo riesgo (sandboxes por desarrollador, previews de PR efímeros). Usá directorios para el camino de promoción dev/uat/prod — los entornos difieren, prod es de alto riesgo, y un archivo .tf plano visible en un PR es más seguro que un switch oculto de terraform.workspace.
El foot-gun de los workspaces
Con workspaces es fácil olvidar cuál está seleccionado y aplicar cambios de prod creyendo que estabas en dev. Los directorios hacen el objetivo inconfundible — literalmente estás con cd dentro de envs/prod. Esa explicitud es por la que la mayoría de los equipos prefiere directorios para prod.
Recomendá un enfoque
Escribí recommend(scenario) que devuelva "workspaces" cuando scenario sea "ephemeral" o "sandbox", y "directories" en otro caso (ej. "prod"). Logueá recommend("prod") — debe imprimir directories.