HCL (HashiCorp Configuration Language) — язык, на котором пишут Terraform-конфигурации. Если понять 4 базовых блока — variables, locals, outputs и modules — код становится чище, гибче и проще в поддержке.
Переменные (variable)
Нужны, чтобы не хардкодить значения в конфигурации.
variable "region" {
type = string
default = "eu-central-1"
}
Что важно:
typeзадаёт тип данных:string,number,bool,list,map,objectdefaultделает переменную необязательной- значения можно передавать через
terraform.tfvars, CLI или переменные окружения
Пример использования:
provider "aws" {
region = var.region
}
Локальные значения (locals)
locals нужны для вычислений и переиспользования промежуточных значений. Это не входные параметры, а внутренняя логика.
locals {
project_name = "billing"
common_tags = {
Project = local.project_name
Env = var.environment
}
}
Когда полезно:
- собрать теги в одном месте
- сократить дублирование
- упростить сложные выражения
Выходные значения (output)
Позволяют показать результат после terraform apply: IP, ARN, URL, ID ресурса.
output "instance_id" {
value = aws_instance.app.id
}
Где применяются:
- для быстрого получения нужных данных
- для передачи значений между модулями через remote state
- для интеграции с CI/CD
Можно помечать чувствительные данные:
output "db_password" {
value = random_password.db.result
sensitive = true
}
Модули (module)
Модуль — это переиспользуемый набор Terraform-кода. Помогает не копировать ресурсы между проектами.
module "network" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
environment = var.environment
}
Плюсы модулей:
- повторное использование кода ♻️
- единые стандарты инфраструктуры
- удобное масштабирование
- проще сопровождать большие проекты
Обычно модуль принимает variables, использует locals, создаёт ресурсы и отдаёт outputs.
Как это связано вместе
variableпринимает входные данныеlocalsформирует внутреннюю логикуmoduleинкапсулирует инфраструктуруoutputпоказывает результат 🚀
Практический совет
- Хороший Terraform-код:
- не дублирует значения
- использует типизацию переменных
- выносит общую логику в
locals - разбивает инфраструктуру на модули
- возвращает важные данные через
outputs
Итог: если освоить эти конструкции, HCL перестаёт выглядеть как набор блоков и начинает работать как понятная система описания инфраструктуры ⚙️
📌 Ниже по ленте стоит посмотреть подборку каналов про IT — там много полезного по Terraform, DevOps, облакам и автоматизации.