Terraform con Azure¶
Esta carpeta contiene el recorrido completo del curso para aprender Terraform aplicado a Azure. El material parte de los conceptos de infraestructura como código, construye un entorno de prácticas local con el emulador Topaz y Docker, y avanza hasta el uso profesional del estado remoto, los módulos, la seguridad y los pipelines de CI/CD.
Objetivo del curso: ser capaz de describir, validar, desplegar, operar y proteger infraestructura en Azure de manera reproducible con Terraform.
Índice rápido¶
- Alcance y resultados de aprendizaje
- Requisitos previos
- Entorno de prácticas
- Itinerario del curso
- Bloques del curso
- Guía de trabajo recomendada
- Comandos esenciales
- Validación antes de aplicar
- Criterios de seguridad
- Estructura de los materiales
- Recursos oficiales
Alcance y resultados de aprendizaje¶
Al finalizar el recorrido habrás practicado:
- El modelo declarativo de Terraform y la sintaxis HCL.
- La relación entre Terraform, el provider
azurerm, Azure CLI y Azure Resource Manager. - La creación de grupos de recursos, redes, máquinas virtuales, bases de datos y cuentas de almacenamiento.
- El ciclo de vida completo:
init,validate,plan,apply,show,outputydestroy. - La definición de entradas con variables, locals, validaciones y salidas con
output. - La gestión de dependencias,
count,for_each,lifecycle, alias de providers y bloques dinámicos. - La separación entre configuración, estado y recursos desplegados.
- El estado remoto en Azure Storage, el bloqueo, la importación y la migración de direcciones.
- La composición con módulos locales y módulos reutilizables.
- La inyección de configuración en máquinas virtuales con cloud-init, extensiones y Ansible.
- La protección de secretos con Key Vault, valores sensibles e identidades gestionadas.
- La validación estática, las pruebas de Terraform, la seguridad de configuración y los pipelines con aprobaciones.
Requisitos previos¶
Antes de empezar, prepara:
- Conocimientos básicos de terminal y Git.
- Una máquina con Docker y Docker Compose.
- Terraform instalado. Se recomienda fijar la versión del proyecto y no depender de una versión accidental del
PATH. - Azure CLI instalada.
- Una suscripción de Azure si quieres ejecutar los ejemplos contra Azure real.
- Permisos suficientes para crear recursos en el grupo de recursos de prácticas.
- Un editor con resaltado de HCL y Markdown, como VS Code.
El curso diferencia siempre dos escenarios:
| Escenario | Uso | Credenciales y costes |
|---|---|---|
| Topaz en Docker | Práctica local y repetible | No requiere una suscripción real; permite experimentar con seguridad |
| Azure real | Validación de operaciones y servicios reales | Requiere autenticación, permisos y control de costes |
No copies secretos al repositorio. Para Azure real, utiliza Azure CLI, identidades federadas o identidades gestionadas según el contexto.
Entorno de prácticas¶
Topaz es el emulador utilizado en las primeras prácticas. El flujo general es:
- Instalar Terraform, Azure CLI, Docker y las herramientas auxiliares.
- Arrancar Topaz con Docker.
- Configurar el endpoint del emulador en el provider
azurerm. - Inicializar el proyecto con
terraform init. - Ejecutar una prueba de humo con
terraform plany una aplicación controlada. - Verificar los recursos creados con Terraform y Azure CLI.
- Destruir el entorno de prueba cuando ya no sea necesario.
Los ejemplos indican explícitamente cuándo una configuración es específica de Topaz y cuándo es adecuada para Azure real. No asumas que todos los servicios, APIs o comportamientos del emulador son equivalentes a la plataforma real.
Flujo mínimo de Terraform¶
terraform fmt -check -recursive
terraform init
terraform validate
terraform plan
terraform apply
terraform output
terraform destroy
En un entorno compartido, revisa siempre el plan antes de apply y comprueba el contexto de autenticación y la suscripción activa:
Itinerario del curso¶
Bloques del curso¶
- Fundamentos y primer entorno
- Recursos y verificación
- HCL y configuración del proveedor
- Ciclo de vida y estado
- Variables, salidas y buenas prácticas
- Servicios de Azure
- Estado remoto y operaciones sobre el estado
- Módulos, automatización y operación
- Dependencias, metaargumentos y validación
- Secretos e identidad
- CI/CD con controles
1. Fundamentos y primer entorno¶
Objetivo: entender por qué se utiliza Terraform y dejar preparado un laboratorio funcional.
- Infraestructura como código
- Terraform frente a otras herramientas
- Modelo declarativo y modelo imperativo
- Instalación de herramientas y arranque de Topaz
- Entorno práctico: Terraform, Azure Emulator Topaz y Docker
- Introducción a Azure y Terraform
- Configuración de Azure CLI
- Desplegar una máquina virtual con Terraform
2. Recursos y verificación¶
Objetivo: crear recursos relacionados y comprobar que el estado de Terraform coincide con la plataforma.
- Creación de grupos de recursos y recursos con Terraform
- Verificación y validación de recursos en Azure
3. HCL y configuración del provider¶
Objetivo: leer y escribir configuraciones Terraform mantenibles.
- Sintaxis del lenguaje HCL en Terraform
- Bloques principales de Terraform
- Configuración del provider
azurerm - Primer
Resource Groupcon Terraform
4. Ciclo de vida y estado¶
Objetivo: entender qué calcula Terraform y cómo conserva la relación entre configuración e infraestructura.
5. Variables, outputs y buenas prácticas¶
Objetivo: convertir configuraciones rígidas en proyectos parametrizables y reutilizables.
- Variables en Terraform
- Variables básicas
- Variables avanzadas
- Salidas (
outputs) - Buenas prácticas en Terraform y Azure
6. Servicios de Azure¶
Objetivo: aplicar Terraform a las piezas habituales de una plataforma Azure.
- Despliegue de máquinas virtuales
- Redes virtuales
- Bases de datos
- Almacenamiento
- Buenas prácticas de arquitectura
7. Estado remoto y operaciones sobre el estado¶
Objetivo: operar con estado compartido sin perder trazabilidad ni consistencia.
- Estado remoto en Azure Storage
- Bloqueo del estado
- Comandos de estado: importar, mover, recrear y olvidar
- Workspaces
8. Módulos, automatización y operación¶
Objetivo: preparar configuraciones para equipos y ciclos de entrega continuos.
9. Dependencias, metaargumentos y validación¶
Objetivo: controlar el grafo de recursos y poner barreras antes de modificar Azure.
- Dependencias de recursos
- Metaargumentos
- Provisioners, cloud-init, extensiones y Ansible
- Validación y pruebas
10. Secretos e identidad¶
Objetivo: evitar credenciales incrustadas y aplicar el principio de mínimo privilegio.
11. CI/CD con controles¶
Objetivo: automatizar planes y aplicaciones manteniendo revisiones, aprobaciones y puertas de calidad.
Referencias de página¶
Las referencias numeradas que aparecen en el texto conservan la numeración del itinerario original. Esta tabla las convierte en enlaces navegables y muestra el documento actual que desarrolla cada tema.
Guía de trabajo recomendada¶
Sigue este ciclo para cada práctica:
- Lee el contexto. Identifica si el ejemplo es para Topaz o Azure real.
- Prepara el directorio. Separa cada ejercicio o componente de su estado y variables.
- Fija versiones. Revisa
required_versiony las versiones de los providers. - Formatea. Ejecuta
terraform fmtantes de revisar cambios. - Inicializa. Ejecuta
terraform inity comprueba el backend y los plugins. - Valida. Ejecuta
terraform validatey, cuando corresponda, TFLint, Trivy o pruebas de Terraform. - Planifica. Lee el plan completo; para si hay destrucciones o reemplazos inesperados.
- Aplica con control. Utiliza aprobación explícita en entornos compartidos o productivos.
- Verifica. Compara
terraform show,terraform outputy Azure CLI. - Documenta. Anota decisiones, variables necesarias y cualquier excepción de seguridad.
- Limpia. Ejecuta
terraform destroysolo cuando el entorno sea temporal y el plan esté revisado.
Comandos esenciales¶
| Comando | Finalidad |
|---|---|
terraform fmt |
Formatear archivos .tf y .tfvars |
terraform init |
Instalar providers e inicializar el backend |
terraform validate |
Detectar errores estructurales y de tipos |
terraform plan |
Calcular los cambios sin aplicarlos |
terraform apply |
Aplicar un plan a la infraestructura |
terraform show |
Consultar el plan o el estado en formato legible |
terraform output |
Mostrar las salidas del root module |
terraform state list |
Enumerar direcciones presentes en el estado |
terraform state show <dirección> |
Inspeccionar un recurso del estado |
terraform import |
Adoptar un recurso existente |
terraform state mv |
Cambiar una dirección sin recrear el recurso |
terraform state rm |
Dejar de gestionar un recurso sin destruirlo |
terraform force-unlock <ID> |
Recuperar un bloqueo solo después de verificar que no hay ninguna ejecución activa |
terraform destroy |
Destruir los recursos gestionados |
Evita utilizar -target como flujo normal: es una herramienta de emergencia y puede dejar el plan incompleto. Igualmente, no edites manualmente el archivo del estado; utiliza los comandos terraform state.
Validación antes de aplicar¶
La validación debe subir progresivamente de una comprobación local a una verificación de integración:
terraform fmt -check -recursiveterraform init -backend=falsecuando solo sea necesario validar la configuración.terraform validate- TFLint con el ruleset de Azure.
- Trivy o una herramienta equivalente para detectar riesgos de configuración.
terraform testpara comprobar el contrato de los módulos.terraform plancontra Topaz o un entorno controlado.- Revisión humana del plan antes de
apply. - Verificación posterior de los recursos y de las salidas.
Un plan sin errores no garantiza que la arquitectura sea segura, económica o adecuada. La revisión debe incluir permisos, exposición de red, cifrado, retención, costes e impacto de destrucciones o reemplazos.
Criterios de seguridad¶
- No subas archivos
.tfvarscon secretos, archivos de estado ni credenciales al repositorio. - Marca las salidas y variables sensibles con
sensitive = true, pero recuerda que esto no cifra por sí solo el estado. - Utiliza un backend remoto protegido, con control de acceso, bloqueo y versionado.
- Prefiere federación de identidad o identidades gestionadas a secretos de larga duración en CI/CD.
- Da permisos con el menor ámbito posible y asigna roles de datos específicos.
- Revisa los logs: no imprimas tokens, contraseñas, claves ni contenido sensible.
- Protege el pipeline con revisión de pull request, CODEOWNERS, aprobaciones y puertas automáticas.
- Trata
provisionerscomo una excepción; prioriza cloud-init, extensiones o herramientas de configuración especializadas. - Antes de un
destroy, confirma el workspace, el backend y la suscripción activa.
Estructura de los materiales¶
docs/azure/
├── README.md # Esta guía de la sección
├── index.md # Página de introducción de MkDocs
├── 01-*.md # Fundamentos y entorno
├── 02-*.md # Recursos y verificación
├── 03-*.md # HCL y provider
├── 04-*.md # Comandos y estado
├── 05-*.md # Variables y buenas prácticas
├── 06-*.md # Servicios de Azure
├── 07-*.md # Estado remoto y workspaces
├── 08-*.md # Módulos y operación
├── 09-*.md # Dependencias y validación
├── 10-*.md # Secretos e identidad
└── 11-*.md # CI/CD y aprobaciones