Что такое модуль в Terraform?

«Что такое модуль в Terraform?» — вопрос из категории Terraform, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модуль в Terraform — это автономный, многократно используемый пакет конфигурации, который инкапсулирует группу связанных ресурсов для создания определённого компонента инфраструктуры (например, VPC, кластера Kubernetes, набора security groups). Модули помогают организовать код, соблюдать принцип DRY (Don't Repeat Yourself) и создавать абстракции.

Структура модуля:

# Структура каталога модуля (./modules/aws-vpc)
./modules/aws-vpc/
├── main.tf          # Основные ресурсы (VPC, подсети, шлюзы)
├── variables.tf     # Входные переменные (например, cidr_block, name)
├── outputs.tf       # Выходные значения (например, vpc_id, subnet_ids)
└── README.md

Использование модуля в корневой конфигурации:

module "production_vpc" {
  source = "./modules/aws-vpc"  # Локальный путь
  # source = "git::https://github.com/terraform-aws-modules/vpc" # Удалённый репозиторий
  # source = "terraform-aws-modules/vpc/aws" # Terraform Registry

  # Передача входных переменных
  name       = "prod-vpc"
  cidr       = "10.0.0.0/16"
  azs        = ["us-east-1a", "us-east-1b"]
  public_subnets  = ["10.0.1.0/24", "10.0.2.0/24"]
  private_subnets = ["10.0.10.0/24", "10.0.20.0/24"]
}

# Использование выходных значений модуля в других ресурсах
resource "aws_instance" "app_server" {
  subnet_id = module.production_vpc.private_subnets[0] # Ссылка на output модуля
  # ... другие параметры
}

Преимущества:

  • Переиспользование: Один модуль можно вызывать многократно с разными параметрами (например, для prod и stage сред).
  • Абстракция и стандартизация: Скрывает сложность, предоставляя простой интерфейс (variables/outputs).
  • Совместное использование: Модули можно публиковать в Terraform Registry или Git для использования командой и сообществом.