Cerramos el capítulo con un repaso práctico de los comandos que usarás a diario con Terraform. Ya hemos visto algunos por separado; aquí los reunimos en orden, añadimos dos nuevos (fmt y validate) y los ordenamos como un flujo de trabajo real. Considéralo tu chuleta de comandos.
El flujo de trabajo completo
Este es el orden típico de los comandos en un proyecto de Terraform:
fmt → validate → init → plan → apply → ... → destroy (formatea)(revisa) (prepara)(previsualiza)(aplica) (elimina)
Vamos uno a uno.
terraform init: preparar el proyecto
Qué hace: inicializa el directorio de trabajo. Descarga los providers (subcapítulo 11.1) y configura el backend del estado (subcapítulo 11.3).
Cuándo se ejecuta:
- La primera vez que trabajas en un proyecto.
- Cuando añades o cambias un provider.
- Cuando cambias la configuración del backend.
Es el primer comando que ejecutas en cualquier proyecto nuevo. Sin él, los demás comandos no funcionan porque falta descargar los providers.
terraform fmt: formatear el código
Qué hace: formatea automáticamente tus archivos .tf para que tengan un estilo consistente (indentación, alineación, espacios). No cambia la lógica, solo la apariencia.
Por qué usarlo: un código bien formateado es más fácil de leer y evita discusiones de estilo en el equipo. Es como un corrector de estilo automático. Se suele ejecutar antes de guardar o subir cambios. En equipos, se comprueba automáticamente en CI (Capítulo 22).
Analogía:
fmtes como el botón «ordenar/alinear» de un documento: deja todo limpio y uniforme sin cambiar el contenido.
terraform validate: revisar que el código es correcto
Qué hace: comprueba que tu código es válido sintáctica y lógicamente, sin conectarse a AWS ni crear nada. Detecta errores como argumentos mal escritos o referencias inexistentes.
Por qué usarlo: te avisa de errores antes de intentar aplicar nada. Es una comprobación rápida y barata. Si
validatefalla, no tiene sentido seguir.
Diferencia con
plan:validatesolo revisa que el código esté bien escrito (no necesita credenciales).planva más allá: consulta AWS y te dice qué cambios haría. Primerovalidate(¿está bien escrito?), luegoplan(¿qué va a hacer?).
terraform plan: previsualizar los cambios
Qué hace: muestra qué cambios haría sin aplicarlos. Compara tu código, el estado y la realidad (subcapítulos 9.4 y 11.2).
Recuerda los símbolos: + crear, ~ modificar, - destruir. Es tu red de seguridad: revisas antes de tocar nada.
terraform apply: aplicar los cambios
Qué hace: ejecuta los cambios de verdad, tras mostrarte el plan y pedir confirmación (yes).
Después de aplicar, tu infraestructura real coincide con tu código, y el estado se actualiza.
Truco:
terraform applyya hace unplaninternamente y te lo muestra antes de pedir confirmación, así que puedes revisar una última vez antes de escribiryes.
terraform destroy: eliminar la infraestructura
Qué hace: destruye todos los recursos gestionados, tras confirmación. Ideal para limpiar pruebas y dejar de pagar (subcapítulo 9.4).
⚠️ Irreversible. Genial en pruebas, peligroso en producción. Úsalo con cabeza.
Tabla resumen de comandos
| Comando | Qué hace | ¿Toca AWS? | ¿Pide confirmación? |
|---|---|---|---|
init |
Descarga providers y prepara backend | No (solo descarga) | No |
fmt |
Formatea el código | No | No |
validate |
Revisa que el código es válido | No | No |
plan |
Previsualiza cambios | Lee | No |
apply |
Aplica los cambios | Sí (escribe) | Sí (yes) |
destroy |
Elimina todo | Sí (borra) | Sí (yes) |
Otros comandos útiles (para conocer)
Además de los esenciales, hay otros que irás usando:
| Comando | Para qué |
|---|---|
terraform show |
Ver el estado actual o un plan guardado |
terraform state list |
Listar recursos gestionados (subcapítulo 11.2) |
terraform output |
Ver los outputs definidos (subcapítulo 10.1) |
terraform refresh |
Sincronizar el estado con la realidad |
terraform import |
Traer recursos existentes al estado (Capítulo 20) |
terraform graph |
Ver el grafo de dependencias |
Un flujo de trabajo real, paso a paso
Así sería tu día a día creando infraestructura nueva:
1. terraform init # solo la primera vez (o al cambiar providers/backend) 2. (escribes tu código .tf) 3. terraform fmt # ordena el código 4. terraform validate # ¿está bien escrito? 5. terraform plan # ¿qué va a cambiar? -> revisas 6. terraform apply # aplicas -> escribes "yes" 7. (usas tu infraestructura) 8. terraform destroy # cuando ya no la necesites (en pruebas)
Consejo: Acostúmbrate a ejecutar siempre
planantes deapplyy a leer el plan con atención. Es el hábito que te salvará de errores costosos. Muchos sustos en la nube se evitan simplemente leyendo bien lo que Terraform iba a hacer.
Lo que debes recordar
- El flujo típico es
init→fmt→validate→plan→apply→destroy. init: prepara el proyecto (descarga providers, configura backend). Primer comando, imprescindible.fmt: formatea el código (estilo limpio y uniforme).validate: revisa que el código es válido, sin tocar AWS.plan: previsualiza los cambios (no aplica nada). Tu red de seguridad.apply: aplica los cambios (pideyes).destroy: elimina todo (pideyes, irreversible).- Hábito de oro: siempre
planantes deapply, y lee el plan con atención.
Con esto cierras el Capítulo 11. Ya tienes todas las piezas teóricas de Terraform: lenguaje, providers, estado y comandos. En el Capítulo 12 lo juntaremos todo construyendo tu primera infraestructura real: una VPC con un servidor EC2, paso a paso.
Cloud, AWS & Terraform — De cero a experto
Capítulo 1 · Qué es el cloud computing
- 1.1 El modelo cliente-servidor tradicional
- 1.2 Problemas que venía a resolver la nube
- 1.3 On-premise vs cloud vs híbrido
- 1.4 Los tres modelos de servicio: IaaS, PaaS, SaaS
- 1.5 Los cinco pilares del cloud (según NIST)
- 1.6 Ventajas reales: elasticidad, pago por uso, disponibilidad global
Capítulo 2 · El mercado cloud y los grandes proveedores
- 2.1 AWS, Azure y GCP: diferencias y cuotas de mercado
- 2.2 Por qué aprender AWS primero
- 2.3 Conceptos que son universales entre proveedores
Capítulo 3 · Regiones, zonas de disponibilidad y edge
- 3.1 Qué es una región AWS y cómo elegirla
- 3.2 Availability Zones: alta disponibilidad desde el diseño
- 3.3 Edge locations y CloudFront
- 3.4 Latencia, resiliencia y soberanía de datos
Capítulo 4 · Cómputo: EC2
- 4.1 Instancias: tipos, familias y cuándo elegir cada una
- 4.2 AMIs, key pairs y Security Groups
- 4.3 Ciclo de vida de una instancia
- 4.4 Elastic IPs y Placement Groups
- 4.5 Savings Plans vs Reserved vs On-Demand vs Spot
Capítulo 5 · Almacenamiento: S3
- 5.1 Buckets, objetos y claves
- 5.2 Clases de almacenamiento (Standard, IA, Glacier…)
- 5.3 Versionado y ciclo de vida de objetos
- 5.4 Políticas de bucket y ACLs
- 5.5 Hosting de sitios web estáticos
Capítulo 6 · Redes: VPC
- 6.1 Qué es una VPC y por qué la necesitas
- 6.2 Subredes públicas y privadas
- 6.3 Internet Gateway y NAT Gateway
- 6.4 Route Tables y Network ACLs
- 6.5 VPC Peering y endpoints
Capítulo 7 · Identidad y acceso: IAM
- 7.1 Usuarios, grupos, roles y políticas
- 7.2 El principio de mínimo privilegio
- 7.3 Políticas basadas en identidad vs en recurso
- 7.4 MFA y credenciales temporales (STS)
- 7.5 Buenas prácticas de seguridad IAM
Capítulo 8 · Bases de datos gestionadas
- 8.1 RDS: motores, Multi-AZ y réplicas de lectura
- 8.2 Aurora y sus ventajas sobre RDS vanilla
- 8.3 DynamoDB: modelo clave-valor / documentos
- 8.4 ElastiCache para caché en memoria
- 8.5 Cuándo usar cada tipo de base de datos
Capítulo 9 · Por qué Infraestructura como Código
- 9.1 Problemas del aprovisionamiento manual
- 9.2 IaC declarativo vs imperativo
- 9.3 Terraform vs CloudFormation vs Pulumi vs CDK
- 9.4 El ciclo plan → apply → destroy
Capítulo 10 · HCL: el lenguaje de Terraform
- 10.1 Bloques resource, variable, output, locals
- 10.2 Tipos de datos: string, number, bool, list, map, object
- 10.3 Expresiones, referencias y funciones built-in
- 10.4 Condicionales y bucles (count, for_each, for)
Capítulo 11 · Providers y estado
- 11.1 Cómo funciona el provider de AWS
- 11.2 El fichero terraform.tfstate y su importancia
- 11.3 State local vs state remoto (S3 + DynamoDB)
- 11.4 Comandos esenciales: init, plan, apply, destroy, fmt, validate
Capítulo 12 · Tu primera infraestructura real en Terraform
- 12.1 Crear una VPC con subredes desde cero
- 12.2 Levantar una instancia EC2 pública
- 12.3 Asociar un Security Group y una Elastic IP
- 12.4 Outputs y referencias entre recursos
- 12.5 Flujo de trabajo en equipo: PR review de planes
Capítulo 13 · Balanceo de carga y autoescalado
- 13.1 Application Load Balancer vs Network Load Balancer
- 13.2 Target Groups, listeners y reglas
- 13.3 Auto Scaling Groups: políticas y métricas
- 13.4 Warm pools y lifecycle hooks
Capítulo 14 · Serverless con Lambda
- 14.1 El modelo de ejecución de Lambda
- 14.2 Triggers: API Gateway, S3, DynamoDB Streams, SQS
- 14.3 Gestión de dependencias y capas (Layers)
- 14.4 Cold starts y estrategias para reducirlos
- 14.5 Límites y antipatrones
Capítulo 15 · Mensajería y eventos
- 15.1 SQS: colas estándar vs FIFO, DLQ
- 15.2 SNS: topics, suscripciones, fan-out
- 15.3 EventBridge: event buses y reglas
- 15.4 Patrones: pub/sub, desacoplamiento, saga
Capítulo 16 · Entrega de contenido y DNS
- 16.1 Route 53: tipos de registros y routing policies
- 16.2 CloudFront: distribuciones, cachés y origins
- 16.3 ACM: certificados SSL/TLS gratuitos
- 16.4 WAF integrado con CloudFront
Capítulo 17 · Contenedores en AWS
- 17.1 Docker: repaso exprés de conceptos clave
- 17.2 ECR: registro privado de imágenes
- 17.3 ECS: task definitions, services, Fargate vs EC2
- 17.4 EKS: cuándo Kubernetes y cuándo no
Capítulo 18 · Módulos: reutilización y composición
- 18.1 Anatomía de un módulo Terraform
- 18.2 Variables de entrada, outputs y dependencias
- 18.3 Módulos locales vs módulos del Terraform Registry
- 18.4 Versionado de módulos con Git tags
- 18.5 Diseño de módulos genéricos vs específicos de dominio
Capítulo 19 · Workspaces y gestión de entornos
- 19.1 Workspaces de Terraform: casos de uso y limitaciones
- 19.2 Estrategia de directorios por entorno (dev/stg/prod)
- 19.3 Terragrunt: DRY para configuraciones de entorno
- 19.4 Variables de entorno y archivos .tfvars
Capítulo 20 · Backends remotos y locking
- 20.1 Configurar S3 + DynamoDB como backend
- 20.2 State locking: evitar corrupción en equipo
- 20.3 Migración de estado entre backends
- 20.4 terraform import: traer recursos existentes al estado
Capítulo 21 · Testing de infraestructura
- 21.1 Terraform validate y fmt en CI
- 21.2 Checkov y tfsec: análisis de seguridad estático
- 21.3 Terratest: tests de integración en Go
- 21.4 Contract testing entre módulos
Capítulo 22 · Terraform en CI/CD
- 22.1 Pipeline básico: lint → plan → apply en GitHub Actions
- 22.2 Atlantis: GitOps para Terraform
- 22.3 Terraform Cloud / HCP Terraform
- 22.4 Drift detection y reconciliación automática
Capítulo 23 · Seguridad en profundidad
- 23.1 AWS Organizations y Service Control Policies
- 23.2 AWS Config: compliance continuo
- 23.3 GuardDuty: detección de amenazas
- 23.4 Security Hub: visión centralizada
- 23.5 KMS: gestión de claves y rotación
- 23.6 Secrets Manager vs Parameter Store
Capítulo 24 · Observabilidad: logs, métricas y trazas
- 24.1 CloudWatch Logs, métricas y alarmas
- 24.2 CloudWatch Dashboards y Contributor Insights
- 24.3 X-Ray: trazado distribuido
- 24.4 OpenTelemetry en AWS
- 24.5 Managed Grafana y Managed Prometheus
Capítulo 25 · Optimización de costes
- 25.1 AWS Cost Explorer y presupuestos con alertas
- 25.2 Trusted Advisor y Compute Optimizer
- 25.3 Rightsizing: cómo detectar sobredimensionamiento
- 25.4 Savings Plans vs Reserved Instances: decisión estratégica
- 25.5 FinOps: cultura y procesos para controlar el gasto
Capítulo 26 · Alta disponibilidad y disaster recovery
- 26.1 RTO y RPO: definir los objetivos
- 26.2 Estrategias: backup/restore, pilot light, warm standby, multi-site
- 26.3 Route 53 health checks y failover automático
- 26.4 AWS Backup: política centralizada de copias
Capítulo 27 · Well-Architected Framework de AWS
- 27.1 Los seis pilares: excelencia operacional, seguridad, fiabilidad, eficiencia de rendimiento, optimización de costes, sostenibilidad
- 27.2 Well-Architected Tool: revisiones formales
- 27.3 Cómo aplicar el framework en decisiones de diseño
Capítulo 28 · Arquitecturas serverless a escala
- 28.1 Event-driven architecture con Lambda + EventBridge
- 28.2 Saga pattern para transacciones distribuidas
- 28.3 Step Functions: orquestación de workflows complejos
- 28.4 Lambda@Edge y CloudFront Functions
Capítulo 29 · Plataformas de datos en AWS
- 29.1 Data Lake con S3, Glue y Athena
- 29.2 Kinesis Data Streams y Firehose para streaming
- 29.3 Redshift: data warehousing a escala
- 29.4 Lake Formation: gobierno del dato
Capítulo 30 · Multi-cuenta y landing zones
- 30.1 Por qué separar workloads en cuentas distintas
- 30.2 AWS Control Tower y Account Factory
- 30.3 Gestión centralizada de logs y seguridad
- 30.4 Terraform a escala multi-cuenta con módulos compartidos
Capítulo 31 · Platform Engineering e Internal Developer Platform
- 31.1 Golden paths y abstracciones sobre Terraform
- 31.2 Service Catalog de AWS
- 31.3 Backstage como portal de desarrolladores
- 31.4 Módulos Terraform como producto interno
Capítulo 32 · Certificaciones AWS relevantes
- 32.1 Cloud Practitioner: ¿vale la pena?
- 32.2 Solutions Architect Associate → Professional
- 32.3 DevOps Engineer Professional
- 32.4 Specialty: Security, Database, Networking
- 32.5 HashiCorp Terraform Associate
Capítulo 33 · Proyectos para consolidar lo aprendido
- 33.1 Proyecto 1: blog serverless (S3 + CloudFront + Lambda + DynamoDB)
- 33.2 Proyecto 2: API REST con ECS Fargate + RDS + ALB
- 33.3 Proyecto 3: plataforma de datos con Glue + Athena + Redshift
- 33.4 Proyecto 4: landing zone multi-cuenta con Terraform y Control Tower
