Infraestructura como Codigo: Mejores Practicas con Terraform
Tras anos gestionando infraestructura con Terraform en multiples proveedores cloud y equipos, he desarrollado un conjunto de practicas que ayudan a mantener las bases de codigo mantenibles y los despliegues fiables.
Estructura del Proyecto
Un proyecto Terraform bien organizado es crucial para la colaboracion del equipo:
infrastructure/
modules/
networking/
main.tf
variables.tf
outputs.tf
compute/
main.tf
variables.tf
outputs.tf
environments/
production/
main.tf
backend.tf
terraform.tfvars
staging/
main.tf
backend.tf
terraform.tfvars
Gestion del Estado
El estado remoto no es negociable. Usa un backend con bloqueo:
terraform {
backend "s3" {
bucket = "company-terraform-state"
key = "production/infrastructure.tfstate"
region = "eu-west-1"
dynamodb_table = "terraform-locks"
encrypt = true
}
}
Reglas de Gestion del Estado
- Un estado por entorno - Nunca compartas estado entre staging y produccion
- Habilita el bloqueo de estado - Previene modificaciones concurrentes
- Cifra el estado en reposo - Los archivos de estado contienen datos sensibles
- Usa workspaces con moderacion - Prefiere configuraciones de backend separadas
Diseno de Modulos
Los buenos modulos son reutilizables, componibles y bien documentados:
module "web_cluster" {
source = "../../modules/compute"
environment = var.environment
instance_type = "t3.medium"
min_size = 2
max_size = 10
tags = merge(var.common_tags, {
Service = "web"
})
}
Directrices para Modulos
- Manten los modulos enfocados - Una responsabilidad por modulo
- Usa versionado semantico para modulos compartidos
- Expone solo las variables necesarias - No hagas todo configurable
- Define siempre outputs para la comunicacion entre modulos
- Incluye validacion en variables donde sea apropiado
Integracion CI/CD
Automatiza tus flujos de trabajo de Terraform:
# Ejemplo GitLab CI
plan:
stage: plan
script:
- terraform init
- terraform plan -out=plan.tfplan
artifacts:
paths:
- plan.tfplan
apply:
stage: deploy
script:
- terraform apply plan.tfplan
when: manual
only:
- main
Errores Comunes
- No usar
terraform fmt- Aplica el formateo en CI - Ignorar el drift - Programa chequeos regulares con
terraform plan - Valores hardcodeados - Usa variables y data sources
- Estados monoliticos grandes - Divide en estados mas pequenos y enfocados
- Falta de lifecycle rules - Usa
prevent_destroypara recursos criticos
Resumen
La Infraestructura como Codigo es tan buena como las practicas que la rodean. Invierte tiempo en estructura, automatizacion y convenciones de equipo.