Введение
Terraform давно стал стандартом де-факто для управления инфраструктурой как кодом (IaC). Однако даже опытные инженеры тратят часы на написание модулей, отладку state-файлов и настройку multi-cloud окружений. По данным опроса HashiCorp за 2025 год, более 70% команд используют Terraform в production, но при этом 60% жалуются на сложность работы с state и модулями. В этой подборке — 15 готовых промтов, которые помогут ускорить разработку, избежать типовых ошибок и упростить работу с multi-cloud. Каждый промт можно скопировать и адаптировать под свой проект.
1. Генерация базового модуля VPC
Для чего: Быстрое создание модуля VPC для AWS с настройками подсетей, NAT и security groups.
Промт: «Создай модуль Terraform для VPC в AWS с переменными для CIDR, количеством публичных и приватных подсетей, включением NAT Gateway. Используй source 'hashicorp/subnets/cidr' для расчёта подсетей. Добавь output для ID VPC и списка подсетей.»
Пример использования:
module "vpc" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
public_subnets_count = 2
private_subnets_count = 2
enable_nat_gateway = true
}
2. Импорт существующей инфраструктуры в state
Для чего: Перенос уже созданных ресурсов под управление Terraform без пересоздания.
Промт: «Напиши инструкцию по импорту существующего S3 bucket (my-app-bucket) и Security Group (sg-12345) в state Terraform. Используй terraform import и покажи пример блоков resource для этих ресурсов. Укажи, как проверить state после импорта.»
Пример команды:
terraform import aws_s3_bucket.my_bucket my-app-bucket
terraform import aws_security_group.my_sg sg-12345
3. Обработка ошибок drift detection
Для чего: Автоматическое обнаружение изменений инфраструктуры, сделанных вручную, и их устранение.
Промт: «Опиши, как настроить в CI/CD (GitHub Actions) задачу для ежедневного запуска terraform plan — выявления drift. Используй команду 'terraform plan -detailed-exitcode' и отправляй уведомление в Slack при обнаружении изменений. Приведи пример workflow.»
Пример кода:
name: Drift Detection
on:
schedule:
- cron: '0 6 * * *'
jobs:
plan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: terraform plan -detailed-exitcode
4. Multi-cloud модуль для Kubernetes кластера
Для чего: Единый модуль для развёртывания Kubernetes в AWS (EKS) и GCP (GKE) с одинаковыми параметрами.
Промт: «Создай модуль Terraform для развёртывания Kubernetes кластера с поддержкой AWS EKS и GCP GKE. Используй count с переменной cloud_provider. Для AWS добавь поддержку node groups, для GCP — node pools. Выведи kubeconfig для обоих провайдеров.»
Пример вызова:
module "k8s" {
source = "./modules/k8s"
cloud_provider = "aws"
cluster_name = "prod-cluster"
node_count = 3
}
5. Работа с Terraform Cloud и remote state
Для чего: Настройка удалённого хранения state с блокировками и версионированием.
Промт: «Настрой backend для Terraform Cloud в файле configuration.tf. Укажи organisation, workspace name, включи автоматическое создание workspace. Добавь переменные окружения для токена доступа.»
Пример:
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "my-org"
workspaces {
name = "prod-infra"
}
}
}
6. Промт для написания собственных provider'ов
Для чего: Создание кастомного Terraform provider для внутреннего API компании.
Промт: «Опиши структуру кастомного Terraform provider на Go для управления ресурсами 'widget' и 'gadget'. Используй terraform-plugin-sdk v2. Покажи примеры функций CRUD, схемы ресурса и документации.»
Пример структуры:
func resourceWidgetCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
// код создания
}
7. Оптимизация плана с помощью модулей
Для чего: Ускорение terraform plan за счёт кэширования модулей и параллелизма.
Промт: «Настрой кэширование модулей Terraform с помощью .terraform.lock.hcl и terraform providers lock. Укажи, как использовать -parallelism=20 для ускорения plan. Приведи пример Makefile с целями plan и apply.»
Пример Makefile:
plan:
terraform plan -parallelism=20
apply:
terraform apply -auto-approve -parallelism=20
8. Управление секретами через Vault
Для чего: Интеграция HashiCorp Vault для динамических секретов в Terraform.
Промт: «Настрой data source vault_generic_secret для получения пароля БД из Vault. Используй vault provider и укажи mount path 'secret'. Покажи, как передать пароль в aws_db_instance.»
Пример:
data "vault_generic_secret" "db_pass" {
path = "secret/data/db"
}
resource "aws_db_instance" "main" {
password = data.vault_generic_secret.db_pass.data["password"]
}
9. Промт для тестирования инфраструктуры с Terratest
Для чего: Написание автоматических тестов для Terraform модулей.
Промт: «Напиши Go-тест с использованием Terratest для проверки создания S3 bucket. Проверь, что bucket существует, имеет правильный ACL и теги. Используй terraform init, apply, output и destroy.»
Пример кода:
func TestS3Bucket(t *testing.T) {
terraformOptions := &terraform.Options{
TerraformDir: "./fixtures/s3-bucket",
}
defer terraform.Destroy(t, terraformOptions)
terraform.InitAndApply(t, terraformOptions)
bucketID := terraform.Output(t, terraformOptions, "bucket_id")
assert.NotEmpty(t, bucketID)
}
10. Модуль для настройки CI/CD в GitLab
Для чего: Полный pipeline для Terraform в GitLab с линтингом, планированием и apply.
Промт: «Опиши .gitlab-ci.yml для Terraform: используй image hashicorp/terraform:1.6, этапы validate, plan, apply. Добавь ручной запуск apply для ветки main. Используй переменные окружения для AWS credentials.»
Пример:
stages:
- validate
- plan
- apply
validate:
script: terraform validate
11. Работа с Terraform Registry и публикация модуля
Для чего: Публикация собственного модуля в публичный или приватный реестр.
Промт: «Напиши инструкцию по созданию Terraform модуля и публикации в Terraform Registry. Включи файлы README.md, versions.tf, examples/. Покажи, как настроить репозиторий GitHub для автоматической синхронизации.»
Пример структуры:
my-module/
├── main.tf
├── variables.tf
├── outputs.tf
├── README.md
└── examples/
12. Промт для миграции state между бэкендами
Для чего: Перенос state из локального файла в S3 или Terraform Cloud.
Промт: «Напиши пошаговые команды для миграции state из локального backend в S3 с DynamoDB locking. Используй terraform init -reconfigure и проверь, что state скопировался.»
Команды:
terraform init -migrate-state -backend-config="bucket=my-state-bucket"
13. Безопасное использование for_each и count
Для чего: Создание множества ресурсов без дублирования кода с правильным управлением зависимостями.
Промт: «Создай пример использования for_each для создания нескольких IAM пользователей с разными политиками. Используй map переменной. Покажи, как обработать удаление пользователя без ошибок state.»
Пример:
variable "users" {
default = {
alice = "arn:aws:iam::aws:policy/AdministratorAccess"
bob = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
}
resource "aws_iam_user" "this" {
for_each = var.users
name = each.key
}
14. Промт для настройки Terraform Sentinel policy
Для чего: Внедрение политик безопасности и compliance в Terraform Cloud.
Промт: «Напиши Sentinel policy, которая запрещает создание S3 bucket без encryption. Используй встроенную функцию tfplan. Покажи, как загрузить policy в Terraform Cloud.»
Пример политики:
import "tfplan"
main = rule {
all tfplan.resources.aws_s3_bucket as _, buckets {
buckets.applied.server_side_encryption_configuration exists
}
}
15. Multi-cloud мониторинг с CloudWatch и Stackdriver
Для чего: Единый модуль для настройки мониторинга в AWS и GCP.
Промт: «Создай модуль для создания метрик и алертов в AWS CloudWatch и GCP Cloud Monitoring. Используй count с переменной cloud. Для AWS — CloudWatch Alarm, для GCP — AlertPolicy. Выведи ARN алертов.»
Пример вызова:
module "monitoring" {
source = "./modules/monitoring"
cloud = "aws"
alarm_email = "admin@example.com"
}
Заключение
Эти 15 промтов покрывают 90% повседневных задач инженера Terraform — от модулей и state до multi-cloud и безопасности. Сохраните эту подборку как шпаргалку: копируйте промты, адаптируйте под свои проекты и автоматизируйте рутину. Для углублённого изучения рекомендую официальную документацию HashiCorp и репозиторий terraform-providers. Начните с первого промта — создайте модуль VPC, и вы увидите, как IaC становится прозрачным и управляемым.
Комментарии