Curso de Terraform
De cero a producción: HCL, providers, estado remoto, módulos, multi-entorno y patrones reales del mundo — con ejemplos concretos y fáciles de seguir.
- Paso 1
Terraform 1: ¿Qué es IaC y por qué Terraform?
Infraestructura como Código (IaC) es describir la infraestructura en archivos declarativos que versi…
Empezar lección - Paso 2
Terraform 2: Instalando Terraform + la CLI
Terraform es un único binario estático que ponés en tu PATH; `terraform -version` confirma que funci…
Empezar lección - Paso 3
Terraform 3: Fundamentos de HCL — bloques, argumentos, expresiones
HCL se construye con bloques (un tipo, etiquetas y un cuerpo de argumentos) más expresiones que refe…
Empezar lección - Paso 4
Terraform 4: Tipos de HCL — primitivos y colecciones
HCL tiene tipos primitivos (string, number, bool) y tipos de colección (list, set, map, object). Mod…
Empezar lección - Paso 5
Terraform 5: El flujo central — init, plan, apply, destroy
El ciclo diario de Terraform es init luego plan luego apply, con destroy para desarmar. Modelá los c…
Empezar lección - Paso 6
Terraform 6: Leyendo un diff del plan (+ / ~ / -)
Un diff del plan usa símbolos: + crea, ~ actualiza en el lugar, - destruye y -/+ reemplaza. Dada una…
Empezar lección - Paso 7
Terraform 7: El bloque terraform{} y las restricciones de versión de proveedores
Toda configuración de Terraform empieza con un bloque `terraform{}` que fija la versión de Terraform…
Empezar lección - Paso 8
Terraform 8: Configurando el proveedor azurerm (features {})
Declarar un proveedor en `required_providers` solo lo descarga — todavía necesitás un bloque `provid…
Empezar lección - Paso 9
Terraform 9: Tu primer recurso — azurerm_resource_group
Un resource group es el primer recurso natural de Azure: es el contenedor donde vive todo lo demás. …
Empezar lección - Paso 10
Terraform 10: Argumentos vs atributos y referencias entre recursos
Dentro de un recurso *definís* argumentos (entradas) y *leés* atributos (salidas que Azure calcula).…
Empezar lección - Paso 11
Terraform 11: Dependencias implícitas y depends_on
Terraform construye un grafo de dependencias a partir de las referencias entre recursos y los crea e…
Empezar lección - Paso 12
Terraform 12: Variables de entrada (type, default, description, validation)
Las variables de entrada son los parámetros de un módulo de Terraform — permiten que una misma confi…
Empezar lección - Paso 13
Terraform 13: Pasar valores — tfvars, -var, variables de entorno y precedencia
Declarar una variable es la mitad de la historia — también hay que darle un valor. Terraform acepta …
Empezar lección - Paso 14
Terraform 14: Valores de salida (outputs)
Los outputs exportan valores de tu configuración — el id de un resource group, la URI de un Key Vaul…
Empezar lección - Paso 15
Terraform 15: Locals e interpolación de strings
Los locals son expresiones con nombre que se calculan una vez y se reutilizan — ideales para una con…
Empezar lección - Paso 16
Terraform 16: Data sources — leer infraestructura existente
Un bloque `resource` *crea y posee* infraestructura; un bloque `data` solo *lee* infraestructura que…
Empezar lección - Paso 17
Terraform 17: for_each sobre un mapa con data + secretos de Key Vault
Ahora combiná todo: un mapa en `locals` describe varios servicios, `for_each` genera un recurso por …
Empezar lección - Paso 18
Terraform 18: Funciones integradas y expresiones
HCL trae una librería estándar de funciones puras — `join`, `lookup`, `merge`, `format`, `coalesce` …
Empezar lección - Paso 19
Terraform 19: El meta-argumento count y count.index
`count` en un bloque de recurso crea N copias indexadas `0..N-1`; dentro del bloque `count.index` da…
Empezar lección - Paso 20
Terraform 20: for_each sobre un map/set con each.key / each.value
`for_each` crea una instancia por cada entrada de un **map** o un **set de strings**, indexada por u…
Empezar lección - Paso 21
Terraform 21: Condicionales (ternario) y bloques dynamic
El ternario `condición ? a : b` elige un *valor*; un bloque `dynamic` genera *bloques anidados* a pa…
Empezar lección - Paso 22
Terraform 22: El bloque lifecycle
El bloque `lifecycle` ajusta cómo Terraform *reemplaza* y *actualiza* un recurso: `create_before_des…
Empezar lección - Paso 23
Terraform 23: Qué es el state de Terraform y por qué existe
Terraform guarda lo que creó en un archivo de estado (`terraform.tfstate`) — un mapa JSON de cada di…
Empezar lección - Paso 24
Terraform 24: State local vs remoto para colaborar en equipo
Por defecto el state es un único archivo en tu laptop — bien en solitario, un desastre para un equip…
Empezar lección - Paso 25
Terraform 25: State remoto con el backend azurerm
El backend `azurerm` guarda el state como un blob en un contenedor de una Storage Account. Lo declar…
Empezar lección - Paso 26
Terraform 26: Locking del state, drift y refresh
Un backend remoto bloquea el state durante las escrituras para que dos applies no lo corrompan, y Te…
Empezar lección - Paso 27
Terraform 27: Refactorizar con seguridad usando state mv, import y moved
Renombrar un recurso en `.tf` normalmente hace que Terraform destruya el viejo y cree el nuevo — cas…
Empezar lección - Paso 28
Terraform 28: 1: Organizando tus archivos .tf
Terraform carga y fusiona todos los archivos `.tf` de un directorio, así que los nombres son para hu…
Empezar lección - Paso 29
Terraform 29: 2: Layout multi-entorno (dev / uat / prod)
Los proyectos reales corren la misma infraestructura en varios entornos aislados. Un patrón común le…
Empezar lección - Paso 30
Terraform 30: 3: Convención de nombres y tags (env-service-type)
Nombres y tags consistentes hacen que una cuenta cloud sea buscable, facturable y segura de limpiar.…
Empezar lección - Paso 31
Terraform 31: 4: Workspaces vs directorios — los trade-offs
Terraform ofrece dos formas de correr una config en muchos entornos: workspaces de CLI (un directori…
Empezar lección - Paso 32
Terraform 32: 5: Manteniendo los entornos DRY con módulos compartidos
El directorio-por-entorno arriesga drift por copy-paste. La solución: poné los recursos reales en un…
Empezar lección - Paso 33
Terraform 33: Terraform Módulos 1: Usar un módulo
Un módulo es una carpeta reutilizable de archivos `.tf` que invocás con un bloque `module`: apuntás …
Empezar lección - Paso 34
Terraform 34: Terraform Módulos 2: Escribir tu propio módulo
Un módulo es solo una carpeta: recursos en `main.tf`, bloques `variable` para sus inputs y bloques `…
Empezar lección - Paso 35
Terraform 35: Terraform Módulos 3: Fuentes y fijado de versión
`source` puede ser una ruta local, un módulo del registry o una URL de git — y para git/registry sie…
Empezar lección - Paso 36
Terraform 36: Terraform Módulos 4: Desplegar muchos con for_each
Un bloque `module` acepta `for_each`, así que un solo bloque puede estampar N copias desde un mapa —…
Empezar lección - Paso 37
Terraform 37: Terraform Módulos 5: El repo de módulos comunes
Los equipos maduros mantienen un repo `terraform-common` de módulos bendecidos y versionados — taggi…
Empezar lección - Paso 38
Terraform 38: Terraform Módulos 6: Componer módulos en un servicio
Un servicio real son varios módulos cableados entre sí: un módulo de red produce una subnet, uno de …
Empezar lección - Paso 39
Terraform 39: Key Vault y secretos bien hechos
Terraform debe referenciar un Key Vault existente con un data source y escribir secretos con `for_ea…
Empezar lección - Paso 40
Terraform 40: cableado de Service Bus con for_each
El patrón del mundo real: un mapa `locals` de subscribers/publishers maneja un data-source lookup de…
Empezar lección - Paso 41
Terraform 41: un módulo reutilizable para nombres + tags
Antes del capstone, factorizá las partes aburridas-pero-críticas — nombres estandarizados y tags obl…
Empezar lección - Paso 42
Terraform 42: un segundo provider + alias de provider
Los stacks reales abarcan más de un provider — acá `azuread` (identidad) junto a `azurerm` — y a men…
Empezar lección - Paso 43
Terraform 43: CI/CD — plan en el PR, apply con gate
Terraform va en un pipeline: state remoto con locking, `fmt`/`validate`/`plan` en cada PR, y un appl…
Empezar lección - Paso 44
Terraform 44: Capstone — un módulo de servicio multi-entorno
Componé todo: un módulo `service` construye un RG + Key Vault + namespace/topics de Service Bus + ta…
Empezar lección