Infraestructura como Código a Escala: El rol del Tech Lead en mantener Terraform sostenible
El Caos del Éxito en IaC
Cuando empiezas con Infraestructura como Código (IaC) en Azure usando Terraform o Bicep, todo es mágico. Un par de archivos .tf y de repente tienes una red, una base de datos y un App Service. Pero el éxito trae crecimiento, y el crecimiento trae complejidad.
Pasan los meses, el equipo crece, y ese repositorio mágico de Terraform se ha convertido en un monstruo de 5.000 líneas. Los despliegues (terraform apply) tardan 45 minutos. Nadie se atreve a tocar nada por miedo a destruir producción, y los conflictos de Git en los archivos de estado son el pan de cada día.
Aquí es donde entra el Tech Lead. Tu misión ya no es escribir el módulo perfecto para desplegar un clúster de AKS, sino construir un sistema que permita a 20 ingenieros desplegar infraestructura simultáneamente sin pisarse.
1. Modularización: Cortando el Monolito
El error número uno en equipos que escalan su IaC es tratar la infraestructura de toda la empresa como una gran y única aplicación.
La Estrategia de Módulos
Como Tech Lead, debes guiar al equipo hacia una arquitectura modular. No me refiero solo a usar module {} en Terraform, sino a separar lógicamente los entornos y los dominios de vida:
- Fundational (Core): Redes (VNets, ExpressRoute), firewalls, Log Analytics workspaces. Cambian raramente.
- Shared Services: Active Directory (Entra ID), clústeres base de Kubernetes, Azure Container Registries. Cambian moderadamente.
- Application (Workloads): Bases de datos específicas de una app, Web Apps, Serverless functions. Cambian a diario.
Cada una de estas capas debe tener su propio estado de Terraform (State File). Si un desarrollador rompe la configuración del App Service de su equipo (Workload), no debería haber riesgo alguno físico ni de tiempos de ejecución sobre la red troncal de la empresa (Core).
2. El Proceso de Revisión: Pull Requests de Infraestructura
El código de infraestructura es código, y como tal, requiere revisión por pares (Peer Review). Sin embargo, revisar IaC es distinto a revisar C# o Python.
¿Qué buscar en una PR de Terraform/Bicep?
- Planes visibles: El pipeline de Integración Continua (CI) debe ejecutar automáticamente un
terraform plany publicar el resultado como un comentario en la Pull Request. Nadie debería aprobar código sin ver exactamente qué va a crear, modificar o destruir. - Idempotencia: ¿Si ejecuto esto dos veces, intentará recrear algo?
- Hardcoding: Elimina cadenas de texto “quemadas” en el código. Exige el uso de variables, data sources y naming conventions dinámicas.
- Análisis Estático de Seguridad: Integra herramientas como
Checkovotfsecen el pipeline para bloquear automáticamente PRs que intenten, por ejemplo, desplegar un Storage Account con acceso público a internet.
# Fragmento de Azure Pipeline para Terraform Plan
jobs:
- job: TerraformPlan
steps:
- task: TerraformTaskV4@4
inputs:
provider: 'azurerm'
command: 'plan'
commandOptions: '-out=tfplan'
environmentServiceNameAzureRM: 'My-Azure-Service-Connection'
3. Gestión del Estado (The State File)
El archivo de estado es la única fuente de verdad de tu infraestructura. Perderlo o corromperlo es un evento de nivel de desastre.
Como líder técnico, debes garantizar que las bases están cubiertas:
- Backend Remoto Seguro: Nunca en local. En Azure, esto significa un Azure Storage Account.
- Bloqueo de Estado (State Locking): Absolutamente crítico. Azure Storage soporta bloqueos nativos (Leases) para evitar que dos pipelines ejecuten un
applyal mismo tiempo. - Control de Accesos (RBAC): No todos los desarrolladores necesitan leer el archivo de estado (que puede contener contraseñas o claves primarias en texto plano). Limita el acceso a este Storage Account de forma estricta.
4. Pruebas: Confía, pero verifica
“Testear infraestructura no es posible” es un mito que el Tech Lead debe desterrar.
- Validación temprana:
terraform validateyterraform fmtdeben ser pre-commit hooks obligatorios. - Pruebas de Integración: Herramientas como
Terratest(en Go) permiten levantar infraestructura temporal, realizar peticiones HTTP (por ejemplo, comprobar si el Application Gateway responde 200 OK) y destruirla. - Policy as Code: Integra OPA (Open Policy Agent) o Azure Policy Enforcements a nivel de CI/CD para que el código ni siquiera llegue a desplegarse si viola las reglas de la empresa.
Conclusión
Escalar Infraestructura como Código no es un problema de conocer más sintaxis de HCL o Bicep. Es un desafío de ingeniería de software clásico: acoplamiento, cohesión, despliegue continuo y trabajo en equipo.
El Tech Lead exitoso en este ámbito es el que construye barreras de seguridad invisibles automatizadas en los pipelines, permite autonomía mediante la modularización y trata el código de infraestructura con el mismo rigor (o más) que el código de aplicación de producción.