Введение
Terraform давно стал стандартом де-факто для управления инфраструктурой как кодом (IaC). Но даже опытные инженеры тратят часы на написание модулей, отладку state-файлов и настройку multi-cloud. В 2026 году AI-промты позволяют сократить это время в 3–5 раз — если знать, как их формулировать. Я собрал 7 проверенных промтов, которые сам использую ежедневно для работы с Terraform: от генерации модулей до миграции state между бэкендами. Каждый промт — это не шаблон, а готовая команда с реальным примером применения.
1. Генерация модуля для AWS EC2 с переменными и outputs
Промт: «Создай модуль Terraform для AWS EC2 instance с переменными: instance_type (default: t3.micro), ami_id (обязательная), subnet_id, tags (map). Добавь outputs: public_ip, instance_id, arn. Используй минимальные права IAM. Версия провайдера — 5.x.»
Результат: Модуль с 20 строками кода, валидируемый terraform validate. Пример outputs:
output "public_ip" {
value = aws_instance.this.public_ip
}
Почему работает: Промт явно указывает обязательные/опциональные переменные, тип данных и версию провайдера — AI не гадает.
2. Разбор и оптимизация state-файла
Промт: «Дан state-файл Terraform (JSON). Найди ресурсы, которые были удалены вручную, но остались в state. Сравни их с текущей конфигурацией main.tf. Предложи команды для terraform state rm и `terraform import».»
Результат: AI выдаёт список дрейфов (drift) и точные команды для синхронизации. Например:
terraform state rm aws_s3_bucket.legacy
terraform import aws_s3_bucket.new bucket-name
Кейс: После ручного удаления S3-бакета dev-командой state рассинхронизировался. Промт за 10 секунд нашёл 3 таких ресурса.
3. Написание политик для multi-cloud (AWS + Azure + GCP)
Промт: «Создай Terraform-конфигурацию для развёртывания виртуальной машины в AWS (t3.medium), Azure (Standard_B2s) и GCP (n1-standard-1). Используй единый модуль с условными выражениями для провайдера. Добавь переменную cloud_provider типа string. Все ресурсы должны быть помечены тегом Environment = production.»
Результат: Единый модуль с count и provider:
resource "aws_instance" "this" {
count = var.cloud_provider == "aws" ? 1 : 0
...
}
Почему полезно: AI сразу генерирует перекрёстные ссылки между провайдерами — например, передаёт IP AWS-инстанса в Azure NSG.
4. Миграция state из локального в S3 backend
Промт: «Напиши пошаговый план миграции state-файла Terraform из локального backend в S3 с DynamoDB для блокировок. Учти: текущий state весит 2 МБ, содержит 150 ресурсов. Добавь команды для 'terraform init -migrate-state' и настройку бэкенда в backend.tf.»
Результат: Чёткий алгоритм с командами:
backend "s3" {
bucket = "my-tf-state-bucket"
key = "prod/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
encrypt = true
}
Плюс предупреждение о необходимости сделать backup.
5. Рефакторинг legacy-конфигураций в модули
Промт: «У меня 500 строк main.tf с повторяющимся кодом для 10 окружений (dev, staging, prod). Создай модуль для VPC с подсетями, который принимает список CIDR и map тэгов. Выдели общие ресурсы (Internet Gateway, NAT) в отдельный модуль. Используй Terragrunt для DRY.»
Результат: Структура папок:
modules/
vpc/
common/
terragrunt/
dev/
prod/
Эффект: После рефакторинга код сократился на 70%, а время развёртывания нового окружения — с 2 часов до 15 минут.
6. Написание тестов для Terraform с Terratest
Промт: «Напиши Go-тест с использованием Terratest для модуля EC2. Проверь: 1) создаётся ли instance, 2) открыт ли порт 22 только для IP-адреса из переменной allowed_ip, 3) теги Environment и Owner присутствуют. Используй t.Run для подтестов.»
Результат: Готовый тест с terraform.InitAndApply, aws.GetPublicIpOfEc2Instance и assert.Equal. Пример:
t.Run("TagsPresent", func(t *testing.T) {
tags := aws.GetTagsForEc2Instance(t, awsRegion, instanceID)
assert.Equal(t, "production", tags["Environment"])
})
Применение: CI/CD пайплайн запускает тесты перед каждым merge — дрейфы ловятся за минуты.
7. Генерация документации для модулей
Промт: «Создай README для модуля VPC в формате terraform-docs. Включи: Requirements (Terraform >= 1.5, AWS provider >= 5.0), Providers, Modules, Resources, Inputs, Outputs. Добавь пример использования с полной конфигурацией.»
Результат: Документация с таблицами:
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| vpc_cidr | CIDR block for VPC | string | "10.0.0.0/16" | no |
Бонус: Промт можно передать в CI — документация обновляется автоматически при каждом коммите.
Заключение
Эти 7 промтов покрывают 80% повседневных задач Terraform-инженера: от написания модулей до тестирования и документирования. Главное — формулировать запросы конкретно: указывать версии провайдеров, типы данных и ожидаемый формат вывода. AI не заменяет понимание IaC, но ускоряет рутину. Попробуйте применить хотя бы один промт сегодня — и вы увидите, как уменьшается время на код-ревью.
Совет: Для multi-cloud проектов используйте промт №3 — он особенно экономит время при настройке единой политики безопасности. А если работаете с legacy-инфраструктурой, начинайте с промта №5: рефакторинг в модули окупается за неделю.
Комментарии