Terraform Registry
Тема дорожной карты · Terraform
Terraform Registry (registry.terraform.io) — это публичный каталог провайдеров и переиспользуемых модулей HashiCorp, который terraform init автоматически загружает при объявлении адреса source — например, hashicorp/aws или terraform-aws-modules/vpc/aws — в блоках required_providers или module. Terraform Registry содержит официальные провайдеры HashiCorp для AWS, Azure, GCP, Kubernetes, Vault и сотни провайдеров сообщества, каждый с версионированными выпусками, журналами изменений и автоматически генерируемой документацией на основе схемы Go SDK. Модули сообщества, публикуемые в Terraform Registry, должны следовать стандартному соглашению об именовании (terraform-<provider>-<name>), размещаться в публичном GitHub-репозитории и использовать семантическое версионирование с Git-тегами, чтобы потребители могли фиксировать версии в конвейерах через ограничения вида version = "~> 5.0". Для внутренних или проприетарных модулей организации настраивают приватный Terraform Registry (доступный в Terraform Cloud и Enterprise) или используют прямые Git-ссылки с URL-источником git::https://, позволяя terraform init аутентифицироваться и загружать модули без публикации в открытый доступ. Проект OpenTofu поддерживает совместимость с публичным Terraform Registry, то есть существующие ссылки source продолжают работать с бинарником tofu без изменений.
Как это работает
Terraform Registry инкапсулируют переиспользуемые инфра-паттерны. Модуль — это просто директория с *.tf; root-модуль зовёт child-модули module "name" { source = "./path" или "tfregistry/..." или "git::..." }. Входы — variable-блоки; выходы — output-блоки. Публичные модули — на Terraform Registry (registry.terraform.io); приватные — в git, S3, приватном registry. Пинните версии модулей (version = "1.2.3" или git-тег).
Когда применять
Модули — для любого инфра-паттерна, построенного больше одного раза ("сервис с ALB + ASG + RDS"). Публичные модули с Registry — для известных паттернов (VPC, k8s-кластер); экономят недели. Модули маленькие и сфокусированные; "один большой модуль на всё" хуже плоского root-конфига. Всегда версионируйте модули git-тегами + semver.
Типичные ошибки
Ловушки Terraform Registry: глубоко вложенные цепочки модулей (root → A → B → C → D) — отладка боль, terraform graph помогает; модули с 30+ входными переменными (переинжинирен — разделите или примите разумные дефолты); модуль без поддержки (читайте его issues + commits перед принятием); не запиннена версия (source = "..../tags/main" сломается случайно).