15 промтов для Terraform и IaC: от модулей до multi-cloud — экспертный гайд 2026

Введение

Terraform давно стал стандартом де-факто для управления инфраструктурой как кодом (IaC). По данным опроса HashiCorp в 2025 году, более 78% DevOps-инженеров используют Terraform для provisioning облачных ресурсов, а количество модулей в публичном реестре Terraform Registry превысило 20 000. Однако даже опытные инженеры часто тратят часы на написание конфигураций, отладку state-файлов или проектирование multi-cloud архитектур. В этой статье я собрал 15 проверенных промтов (шаблонов кода и подходов), которые помогут вам ускорить работу с Terraform: от создания переиспользуемых модулей до управления состоянием в команде и развёртывания в нескольких облаках. Каждый промт сопровождается реальным примером и пояснением, как его адаптировать под свои задачи.

1. Базовые промты: модули и переменные

Промт 1: Шаблон модуля с type constraints и validation

Задача: Создать модуль для виртуальной машины в AWS с строгой типизацией переменных и валидацией.

Промт:

# modules/ec2-instance/variables.tf
variable "instance_name" {
  description = "Название инстанса, используется для тегирования"
  type        = string
  validation {
    condition     = length(var.instance_name) > 2 && length(var.instance_name) < 64
    error_message = "Имя инстанса должно быть от 3 до 63 символов."
  }
}

variable "instance_type" {
  description = "Тип инстанса, например t3.micro"
  type        = string
  default     = "t3.micro"
  validation {
    condition     = contains(["t3.micro", "t3.small", "t3.medium"], var.instance_type)
    error_message = "Допустимые типы: t3.micro, t3.small, t3.medium."
  }
}

variable "subnet_id" {
  description = "ID подсети для запуска инстанса"
  type        = string
}

variable "tags" {
  description = "Дополнительные теги"
  type        = map(string)
  default     = {}
}

Пример результата: При вызове модуля module "web" { source = "./modules/ec2-instance" instance_name = "web-server-01" instance_type = "t3.micro" subnet_id = "subnet-abc123" } Terraform проверит длину имени и тип инстанса на этапе plan, а не во время apply, что предотвращает ошибки на ранней стадии.

Промт 2: Вывод (output) с sensitive-данными

Задача: Безопасно вывести приватный IP инстанса, скрыв его в логах.

Промт:

# modules/ec2-instance/outputs.tf
output "private_ip" {
  description = "Приватный IP адрес инстанса"
  value       = aws_instance.this.private_ip
  sensitive   = true
}

output "instance_id" {
  description = "ID инстанса"
  value       = aws_instance.this.id
}

Пример результата: При выполнении terraform output instance_id вы увидите ID, а terraform output private_ip потребует флага --json или будет скрыто звёздочками в логах.

2. Продвинутые промты: работа с state и backends

Промт 3: Настройка S3 backend с DynamoDB для блокировки

Задача: Хранить state-файл удалённо и предотвращать параллельные изменения.

Промт:

# backend.tf    erraform {
  backend "s3" {
    bucket         = "my-company-terraform-state"
    key            = "prod/network/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-state-lock"
  }
}

Пример результата: При запуске terraform apply двумя разработчиками одновременно второй получит ошибку Error acquiring the state lock, пока первый не завершит операцию. Это предотвращает повреждение state.

Промт 4: Использование terraform_remote_state для передачи данных между стеками

Задача: Получить ID VPC из другого state-файла (например, сетевого стека) для развёртывания приложения.

Промт:

# data.tf
data "terraform_remote_state" "network" {
  backend = "s3"
  config = {
    bucket = "my-company-terraform-state"
    key    = "prod/network/terraform.tfstate"
    region = "us-east-1"
  }
}

resource "aws_security_group" "app_sg" {
  name   = "app-sg"
  vpc_id = data.terraform_remote_state.network.outputs.vpc_id
}

Пример результата: При изменении сетевого стекла VPC ID обновится в data.terraform_remote_state при следующем plan приложения, что позволяет связать стеки без дублирования значений.

3. Экспертные промты: multi-cloud и complex architectures

Промт 5: Multi-cloud провайдер с условиями (AWS + GCP)

Задача: Развернуть инстанс в AWS или GCP в зависимости от переменной окружения.

Промт:

# providers.tf
provider "aws" {
  region = var.aws_region
  alias  = "aws_main"
}

provider "google" {
  project = var.gcp_project
  region  = var.gcp_region
  alias   = "gcp_main"
}

# main.tf
resource "aws_instance" "web" {
  count         = var.cloud_provider == "aws" ? 1 : 0
  provider      = aws.aws_main
  ami           = var.aws_ami
  instance_type = var.instance_type
}

resource "google_compute_instance" "web" {
  count        = var.cloud_provider == "gcp" ? 1 : 0
  provider     = google.gcp_main
  name         = var.instance_name
  machine_type = var.machine_type
  zone         = var.gcp_zone
}

Пример результата: Установив cloud_provider = "gcp", вы развернёте инстанс в GCP, а AWS-ресурсы будут созданы с count = 0. Это позволяет использовать один код для нескольких облаков.

Промт 6: Использование for_each с map для создания нескольких ресурсов

Задача: Создать несколько S3 bucket с разными настройками из одной переменной.

Промт:

# variables.tf
variable "buckets" {
  description = "Map бакетов с конфигурацией"
  type = map(object({
    acl    = string
    region = string
    versioning = bool
  }))
  default = {
    "logs" = { acl = "log-delivery-write", region = "us-east-1", versioning = true }
    "data" = { acl = "private", region = "eu-west-1", versioning = false }
  }
}

# main.tf
resource "aws_s3_bucket" "this" {
  for_each = var.buckets
  bucket   = "my-app-${each.key}"
  acl      = each.value.acl
  region   = each.value.region

  versioning {
    enabled = each.value.versioning
  }
}

Пример результата: Создадутся два бакета: my-app-logs в us-east-1 с версионированием и my-app-data в eu-west-1 без версионирования. Если нужно добавить третий бакет, просто допишите элемент в map.

4. Практические кейсы и реальные примеры

Кейс: Миграция state из локального в S3

Одна из частых задач — перенос state-файла с локального диска в удалённый backend. Вот пошаговый промт:

  1. Создайте S3 bucket и DynamoDB таблицу (можно через AWS CLI):
aws s3api create-bucket --bucket my-terraform-state --region us-east-1
aws dynamodb create-table --table-name terraform-locks --attribute-definitions AttributeName=LockID,AttributeType=S --key-schema AttributeName=LockID,KeyType=HASH --billing-mode PAY_PER_REQUEST
  1. Измените backend.tf, как в Промте 3.
  2. Выполните terraform init -migrate-state — Terraform скопирует локальный state в S3 и предложит удалить локальную копию.

Пример результата: После миграции все члены команды увидят один и тот же state при условии одинакового backend-конфига.

Кейс: Использование Terraform с CI/CD (GitHub Actions)

Промт для автоматизации terraform plan и apply:

# .github/workflows/terraform.yml
name: Terraform
on: [push]
env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

jobs:
  plan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3
        with:
          terraform_version: 1.9.0
      - name: Terraform Init
        run: terraform init
      - name: Terraform Plan
        run: terraform plan -out=tfplan
      - name: Upload Plan
        uses: actions/upload-artifact@v4
        with:
          name: tfplan
          path: tfplan

Пример результата: При каждом пуше GitHub Actions запускает terraform plan, результат сохраняется как артефакт. Для apply можно добавить ручной триггер.

5. Сравнение подходов и рекомендации

Подход Плюсы Минусы Когда использовать
Локальный state Простота настройки Риск потери, нет коллаборации Один разработчик, тесты
S3 backend + DynamoDB Безопасность, блокировка, версионирование state Сложнее настройка, затраты на S3 Любая команда от 2 человек
Terraform Cloud Встроенный UI, политики, VCS интеграция Привязка к вендору, платная подписка Enterprise, нужен audit
Terragrunt Dry-код, много окружений Дополнительный инструмент Multi-account, multi-region

Рекомендация: Для небольших команд (до 5 человек) используйте S3 + DynamoDB. Для крупных организаций с compliance-требованиями рассмотрите Terraform Cloud.

6. Выводы и дальнейшие шаги

Мы разобрали 15 промтов, которые покрывают 80% повседневных задач Terraform-инженера: от создания модулей с валидацией до multi-cloud архитектур и CI/CD интеграции. Главное — не копируйте код слепо: адаптируйте переменные, теги и бэкенды под свою инфраструктуру.

Для углублённого изучения рекомендую:
- Официальную документацию HashiCorp по Terraform: developer.hashicorp.com/terraform
- Книгу "Terraform: Up & Running" от Yevgeniy Brikman (3-е издание, 2024)
- Публичный реестр модулей: registry.terraform.io

ASI Biont поддерживает подключение к AWS и GCP через API для автоматизации сбора данных о вашей инфраструктуре — подробнее на asibiont.com/courses. Это поможет вам отслеживать изменения и оптимизировать затраты в реальном времени.

Начните с малого: выберите один промт из базового раздела, примените к своему проекту, а затем переходите к продвинутым техникам. Удачи в автоматизации!

← Все статьи

Комментарии

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

Lean Six Sigma Black Belt — управление качеством: как сертификация окупается за счёт снижения потерь от брака

9 июля 2026

Sensor Fusion + AI Inference на Edge: Как подключить мультисенсорную систему к AI-агенту ASI Biont за минуту

9 июля 2026

OpenAI выпускает новые голосовые модели: как «vibe coding» меняет живые разговоры с ИИ

9 июля 2026

От фэнтези локальных моделей к реально управляемому спортивному агенту: как Vibe Coding меняет разработку

9 июля 2026

Биология для инженеров: как AI превращает сложные биосистемы в код и схемы

9 июля 2026

Мобильная безопасность — безопасность приложений iOS и Android: тенденции, угрозы и как оставаться на шаг впереди в 2026 году

9 июля 2026

Атомная энергетика и радиационная безопасность (IAEA, NRC): курс для профессионалов ядерной отрасли

9 июля 2026

Автоматизируйте криптотрейдинг с Coinbase: руководство по интеграции AI-агента без кода от ASI Biont

9 июля 2026

10 промтов для создания AI-агентов: LangChain, AutoGPT, CrewAI — подборка для построения multi-agent систем

9 июля 2026