Terraform Associate
Deep Dive
El Terraform Registry es el repositorio centralizado de providers y módulos reutilizables. Entender su estructura, niveles de soporte y cómo hacer referencia a módulos es esencial para el examen.
Contenido
registry.terraform.io es el repositorio oficial y público donde se publican todos los providers y módulos de Terraform.
Cuando defines source = "hashicorp/aws" en required_providers, Terraform busca ese provider en registry.terraform.io/hashicorp/aws. El registry también alberga miles de módulos reutilizables listos para usar.
Providers
Plugins que conectan Terraform con APIs externas. Sección /providers del registry.
Módulos
Configuraciones reutilizables y parametrizadas. Sección /modules del registry.
Acceso
Público y gratuito. Solo necesitas internet y terraform init para descargar.
Versiones
Cada provider y módulo tiene múltiples versiones semánticas disponibles.
Namespace
hashicorp/
Ejemplos
aws, azurerm, google, kubernetes, helm, vault, random, null, local, tls
Garantía de soporte
Máxima — seguimiento de issues, parches de seguridad, compatibilidad garantizada
Namespace
namespace-de-la-empresa/
Ejemplos
DataDog/datadog, mongodb/mongodbatlas, pagerduty/pagerduty, snowflake-labs/snowflake
Garantía de soporte
Alta — empresa comprometida a mantener el provider
Namespace
cualquiera/
Ejemplos
kreuzwerker/docker, hashicorp/dns (legacy), integrado por la comunidad
Garantía de soporte
Variable — depende del mantenedor, puede quedar sin mantenimiento
Los módulos del registry tienen un formato de source estándar de tres partes: namespace/nombre/provider.
# Formato: "namespace/nombre-modulo/provider"
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0" # SIEMPRE versionar módulos del registry
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b"]
}
# Otros ejemplos de módulos del registry
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "~> 20.0"
}
module "security_group" {
source = "terraform-aws-modules/security-group/aws"
version = "~> 5.0"
}| Parte del source | Descripción | Ejemplo |
|---|---|---|
| namespace | Organización o usuario que publica el módulo | terraform-aws-modules, hashicorp |
| nombre | Nombre descriptivo del módulo | vpc, eks, security-group, rds |
| provider | Provider principal que usa el módulo | aws, azurerm, google |
💡 Verified modules
Los módulos con insignia Verified en el registry han sido revisados por HashiCorp. Son módulos de calidad alta mantenidos activamente. Los módulos de terraform-aws-modules son los más usados para AWS y todos tienen la insignia Verified.
⚠️ Siempre pinea la versión de módulos del registry
A diferencia de los módulos locales, los módulos del registry deben tener un argumento version. Sin él, Terraform instalará la última versión en cada terraform init, lo que puede romper tu config en futuras ejecuciones.
HCP Terraform (antes Terraform Cloud) incluye un registry privado para que las organizaciones publiquen módulos internos de forma similar al registry público.
Registry público
registry.terraform.ioRegistry privado (HCP Terraform)
app.terraform.io# Módulo del registry privado de HCP Terraform
module "vpc" {
source = "app.terraform.io/mi-empresa/vpc/aws"
version = "~> 2.0"
# Los argumentos son los mismos que el módulo define
environment = var.environment
cidr = var.vpc_cidr
}El comando terraform providers lock actualiza el lock file (.terraform.lock.hcl) con hashes para múltiples plataformas, sin tener que estar en cada plataforma.
# Añadir hashes para múltiples plataformas al lock file # Útil cuando los devs usan Mac pero CI/CD usa Linux terraform providers lock -platform=linux_amd64 -platform=linux_arm64 -platform=darwin_amd64 -platform=darwin_arm64 -platform=windows_amd64 # Ver qué providers usa la configuración actual terraform providers
🎯 Para el examen
terraform providers lock actualiza el lock file para nuevas plataformas¿Entendiste este tema?
Pon a prueba lo que acabas de aprender
Un equipo quiere usar el módulo VPC de terraform-aws-modules desde el registry público de Terraform. ¿Cuál es el formato correcto para el argumento source?