Terraform Associate / Lecciones en español · English
Lecciones de Terraform Associate Terraform Associate (004)
- Qué es IaC: infraestructura definida en archivos legibles por máquina y bajo control de versiones, en lugar de cambios manuales en la consola
- Ventajas de IaC: repetibilidad, consistencia, revisión de código, historial de auditoría, automatización y menos errores de configuración
- Enfoques declarativo (describir el estado final) frente a imperativo (enumerar los pasos)
- Idempotencia: aplicar la misma configuración dos veces no produce más cambios
- El modelo de plugins de Terraform: un solo flujo de trabajo y un solo lenguaje (HCL) para muchos providers
- Despliegues multicloud y de nube híbrida desde una sola configuración
- Flujos de trabajo independientes del servicio: gestionar SaaS, DNS, Git, Kubernetes y herramientas de monitoreo con providers
- Terraform frente a las herramientas de gestión de configuración: aprovisionar infraestructura frente a configurar el software dentro de los servidores
- Infraestructura inmutable: reemplazar en lugar de parchear en el lugar
- Instalar Terraform y fijar su versión con `required_version`
- El bloque `required_providers`: direcciones `source` (hostname/namespace/type) y restricciones `version`
- Operadores de restricción de versión: `=`, `!=`, `>=`, `<=` y el pesimista `~>`
- El archivo de bloqueo de dependencias `.terraform.lock.hcl`: qué registra y por qué se hace commit de él
- Cómo funcionan los providers: plugins que llaman a APIs, descargados por `terraform init` desde el Terraform Registry
- Niveles de providers en el registro: official, partner y community
- Bloques de configuración de providers, varias configuraciones con `alias` y el meta-argumento `provider`
- Usar varios providers distintos en una sola configuración
- Para qué sirve el estado: asociar la configuración con objetos reales, rastrear metadatos y dependencias, y acelerar los planes
- Contenido del estado: atributos de los recursos, incluidos valores sensibles, en JSON plano
- El flujo de trabajo Write → Plan → Apply para personas y equipos
- `terraform init`: configuración del backend, descarga de providers y módulos, `-upgrade`, `-migrate-state`, `-reconfigure`, `-backend-config`
- `terraform validate`: verificaciones de sintaxis y consistencia interna sin contactar las APIs de los providers
- `terraform plan`: refresh, diff y símbolos (`+`, `-`, `~`, `-/+`), planes guardados con `-out`
- Opciones de planificación: `-var`, `-var-file`, `-target`, `-refresh=false`, `-refresh-only`, `-replace`
- `terraform apply`: aprobación interactiva, `-auto-approve` y aplicar un archivo de plan guardado
- `terraform destroy` y `terraform plan -destroy`
- `terraform fmt`: estilo canónico, `-check`, `-diff` y `-recursive`
- Reemplazo de recursos con `-replace` en lugar del obsoleto `terraform taint`
- Paralelismo y el grafo de dependencias durante el apply
- Bloques resource frente a bloques data, y cómo direccionarlos (`TYPE.NAME`, `data.TYPE.NAME`)
- Referencias entre recursos y dependencias implícitas
- Variables de entrada: `type`, `default`, `description`, `sensitive`, `nullable` y precedencia de valores (TF_VAR_, tfvars, auto.tfvars, -var)
- Valores de output y valores locales
- Tipos complejos: list, map, set, object, tuple; conversión de tipos
- Expresiones: condicionales, expresiones `for`, splat `[*]`, plantillas de cadenas y bloques `dynamic`
- Funciones integradas y cómo probarlas en `terraform console`
- `count` frente a `for_each`, `count.index`, `each.key` y `each.value`
- Dependencias explícitas con `depends_on`; reglas de `lifecycle`: `create_before_destroy`, `prevent_destroy`, `ignore_changes`, `replace_triggered_by`
- Condiciones personalizadas: `validation` de variables, `precondition` y `postcondition`, y bloques `check`
- Datos sensibles: valores `sensitive`, variables y recursos efímeros, argumentos de solo escritura y secretos en el estado
- Gestión de secretos con HashiCorp Vault y el provider de Vault
- Módulo raíz frente a módulos hijos; un módulo es cualquier directorio de archivos .tf
- Orígenes de módulos: rutas locales (`./` o `../`), el Terraform Registry público, registros privados, y URLs de Git y HTTP
- Llamar a un módulo con un bloque `module` y pasar variables de entrada
- Alcance de las variables: los módulos hijos solo ven los valores que se les pasan; los outputs se leen como `module.NAME.OUTPUT`
- Pasar configuraciones de providers a los módulos con el argumento `providers`
- El argumento `version` (solo orígenes de registro) y `ref` para orígenes Git
- `terraform init` o `terraform get` para instalar módulos en `.terraform/modules`
- Usar `count` y `for_each` en bloques module
- Estructura estándar de un módulo: main.tf, variables.tf, outputs.tf, README
- El backend local predeterminado y los archivos `terraform.tfstate` y `terraform.tfstate.backup`
- Bloqueo del estado: por qué evita la corrupción, qué backends lo admiten, `-lock-timeout` y `terraform force-unlock`
- El bloque `backend` dentro de `terraform {}`: backends remotos como S3, azurerm, gcs, consul y pg
- Los bloques backend no pueden usar variables; configuración parcial con `-backend-config`
- Migrar el estado entre backends con `terraform init -migrate-state`
- El bloque `cloud` para HCP Terraform
- Datos sensibles en el estado y protección del estado remoto (cifrado, control de acceso)
- Drift de recursos: detectarlo con `plan` y `apply -refresh-only`, y reconciliar la configuración
- Workspaces de la CLI: `terraform workspace new/select/list` y `terraform.workspace`
- Importar infraestructura existente con bloques `import` y generar configuración con `terraform plan -generate-config-out`
- El antiguo comando de la CLI `terraform import`
- Inspeccionar el estado: `terraform state list`, `terraform state show`, `terraform show` y `terraform output`
- Refactorización: bloques `moved` y `terraform state mv`
- Eliminar recursos del estado sin destruirlos: bloques `removed` y `terraform state rm`
- Registro detallado con `TF_LOG` (TRACE, DEBUG, INFO, WARN, ERROR, JSON), `TF_LOG_PATH`, `TF_LOG_CORE` y `TF_LOG_PROVIDER`
- Cuándo usar los logs: errores de providers, fallos (crashes) y reportes de bugs
- Revisar outputs y dependencias con `terraform output -json` y `terraform graph`
- HCP Terraform (antes Terraform Cloud): estado remoto, ejecuciones remotas, un nivel gratuito y niveles de pago
- Conectar la CLI: `terraform login` y el bloque `cloud` (organización, workspaces por nombre o por etiquetas)
- Flujos de trabajo: ejecuciones basadas en VCS, en la CLI y en la API
- Workspaces: cada uno contiene su propio estado, variables, historial de ejecuciones y permisos
- Proyectos: agrupar workspaces y asignar acceso a los equipos a nivel de proyecto
- Variables y variable sets; variables de Terraform frente a variables de entorno; variables sensibles
- Colaboración y gobernanza: equipos y permisos, aprobaciones de ejecuciones, políticas como código (Sentinel y OPA) y registro privado
- Evaluaciones de estado (health assessments): detección de drift y validación continua
- Integraciones: proveedores de VCS, run triggers, run tasks, notificaciones y credenciales dinámicas de providers