HCL синтаксис: переменные, locals, outputs, модули

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

hclterraformvariables

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, object
  • default делает переменную необязательной
  • значения можно передавать через 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.

Как это связано вместе

  1. variable принимает входные данные
  2. locals формирует внутреннюю логику
  3. module инкапсулирует инфраструктуру
  4. output показывает результат 🚀

Практический совет

  • Хороший Terraform-код:
  • не дублирует значения
  • использует типизацию переменных
  • выносит общую логику в locals
  • разбивает инфраструктуру на модули
  • возвращает важные данные через outputs

Итог: если освоить эти конструкции, HCL перестаёт выглядеть как набор блоков и начинает работать как понятная система описания инфраструктуры ⚙️

📌 Ниже по ленте стоит посмотреть подборку каналов про IT — там много полезного по Terraform, DevOps, облакам и автоматизации.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же