10 промтов для Terraform и IaC: от модулей до multi-cloud (гайд 2026)

10 промтов для Terraform и IaC: от модулей до multi-cloud

Terraform за последние годы стал стандартом де-факто для управления инфраструктурой как кодом (IaC). По данным опроса HashiCorp 2025 года, более 80% DevOps-инженеров используют Terraform для provisioning облачных ресурсов. Но даже опытные специалисты часто тратят часы на написание конфигураций, отладку state и настройку multi-cloud. Современные языковые модели могут ускорить этот процесс, если правильно формулировать промты. В этой статье — проверенная подборка из 10 промтов для Terraform, разбитая по уровням сложности. Каждый промт сопровождается примером результата и пояснениями.

Базовые промты (уровень: Junior)

1. Создание простого модуля EC2

Задача: Сгенерировать Terraform-модуль для развертывания EC2-инстанса с минимальными параметрами.

Промт:

Создай Terraform-модуль для деплоя EC2-инстанса в AWS. Модуль должен принимать переменные: ami, instance_type, name. Ресурс должен иметь тег Name. Выведи public_ip.

Пример результата:

# modules/ec2/main.tf
resource "aws_instance" "this" {
  ami           = var.ami
  instance_type = var.instance_type

  tags = {
    Name = var.name
  }
}

output "public_ip" {
  value = aws_instance.this.public_ip
}

# modules/ec2/variables.tf
variable "ami" {
  description = "AMI ID"
  type        = string
}

variable "instance_type" {
  description = "Instance type"
  type        = string
}

variable "name" {
  description = "Name tag"
  type        = string
}

2. State-бэкап в S3

Задача: Создать конфигурацию backend для хранения state-файла в S3 с DynamoDB-локом.

Промт:

Сгенерируй блок backend для Terraform, который хранит state в S3-бакете 'my-state-bucket' с ключом 'prod/terraform.tfstate' и использует DynamoDB-таблицу 'tf-locks' для блокировок. Регион — us-east-1.

Пример результата:

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

Продвинутые промты (уровень: Middle)

3. Multi-cloud VPC (AWS + GCP)

Задача: Построить VPC в AWS и VPC в GCP с VPN-соединением между ними.

Промт:

Напиши Terraform-конфигурацию, которая создает VPC в AWS (CIDR 10.0.0.0/16) и VPC в GCP (CIDR 10.1.0.0/16), а также VPN-туннель между ними с использованием IPSec. Используй отдельные провайдеры.

Пример результата:

# providers.tf
provider "aws" {
  region = "us-west-2"
}

provider "google" {
  project = "my-project"
  region  = "us-central1"
}

# main.tf (фрагмент)
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

resource "google_compute_network" "main" {
  name                    = "gcp-vpc"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "main" {
  name          = "gcp-subnet"
  ip_cidr_range = "10.1.0.0/16"
  network       = google_compute_network.main.id
}

# Далее — ресурсы VPN-шлюзов и туннелей

Важно: Для полноценной реализации потребуются также ресурсы aws_vpn_gateway, google_compute_vpn_gateway и соответствующие туннели. Полный код приведен в репозитории-примере.

4. Импорт существующей инфраструктуры

Задача: Сгенерировать команды terraform import для переноса существующих ресурсов под управление Terraform.

Промт:

У меня есть AWS security group с ID sg-12345 и S3-бакет 'my-legacy-bucket'. Напиши команды terraform import для этих ресурсов, предполагая, что ресурсы в коде называются 'web_sg' и 'legacy_bucket'.

Пример результата:

terraform import aws_security_group.web_sg sg-12345
terraform import aws_s3_bucket.legacy_bucket my-legacy-bucket

Также полезно добавить блок для генерации конфигурации командой terraform plan -generate-config-out=generated.tf (доступно с Terraform 1.5+).

5. Использование Terraform Cloud в команде

Задача: Настроить удаленное выполнение (remote execution) через Terraform Cloud.

Промт:

Создай конфигурацию Terraform для работы с Terraform Cloud: организация 'my-org', воркспейс 'dev', удаленное выполнение. Добавь переменные окружения для AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY.

Пример результата:

terraform {
  cloud {
    organization = "my-org"

    workspaces {
      name = "dev"
    }
  }
}

# Переменные задаются в UI Terraform Cloud

Экспертные промты (уровень: Senior)

6. Политики Sentinel для compliance

Задача: Написать политику Sentinel, запрещающую создание S3-бакетов без шифрования.

Промт:

Напиши политику Sentinel для Terraform Cloud, которая блокирует apply, если любой aws_s3_bucket не имеет включенного шифрования AES256 или aws:kms.

Пример результата:

import "tfplan/v2" as tfplan

# Разрешенные алгоритмы
allowed_algorithms = ["AES256", "aws:kms"]

# Собираем все S3-бакеты
buckets = filter tfplan.resource_changes as _, rc {
    rc.type is "aws_s3_bucket" and
    rc.change.actions is not "delete"
}

# Проверяем каждый бакет
violations = []
for buckets as _, bucket {
    server_side_encryption = bucket.change.after.server_side_encryption_configuration
    if server_side_encryption is null or
       server_side_encryption.rule.apply_server_side_encryption_by_default.sse_algorithm not in allowed_algorithms {
        violations.append(bucket.address)
    }
}

# Если есть нарушения — блокируем
violations is empty or main = rule {
    length(violations) == 0
}

7. Multi-cloud Kubernetes (EKS + GKE)

Задача: Развернуть кластеры EKS в AWS и GKE в GCP, а затем объединить их в единую service mesh.

Промт:

Создай Terraform-модуль для развертывания EKS-кластера (AWS) и GKE-кластера (GCP) с поддержкой Istio mesh. Модуль должен выводить kubeconfig для каждого кластера.

Пример результата (фрагмент):

# eks/main.tf
module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 20.0"

  cluster_name    = "my-eks-cluster"
  cluster_version = "1.30"

  vpc_id     = var.vpc_id
  subnet_ids = var.subnet_ids

  node_groups = {
    main = {
      desired_capacity = 2
      max_capacity     = 5
      min_capacity     = 1
    }
  }
}

output "eks_kubeconfig" {
  value = module.eks.kubeconfig
}

# gke/main.tf
resource "google_container_cluster" "primary" {
  name     = "my-gke-cluster"
  location = "us-central1"

  initial_node_count = 2

  network    = var.network
  subnetwork = var.subnetwork
}

output "gke_kubeconfig" {
  value = google_container_cluster.primary.endpoint
}

Для полной интеграции с Istio потребуется дополнительная настройка mesh-федерации.

8. Terraform с Terragrunt: DRY-модули

Задача: Организовать код с помощью Terragrunt для избежания дублирования.

Промт:

Создай структуру Terragrunt для двух окружений (dev, prod) с переиспользованием одного модуля VPC. В dev — CIDR 10.0.0.0/16, в prod — 10.1.0.0/16. state должен храниться в отдельных S3-бакетах.

Пример результата:

# terragrunt.hcl (корневой)
remote_state {
  backend = "s3"
  config = {
    bucket         = "my-tf-state-${get_aws_account_id()}"
    key            = "${path_relative_to_include()}/terraform.tfstate"
    region         = "us-east-1"
    encrypt        = true
    dynamodb_table = "terraform-locks"
  }
}

# dev/terragrunt.hcl
include {
  path = find_in_parent_folders()
}

terraform {
  source = "../modules/vpc"
}

inputs = {
  cidr_block = "10.0.0.0/16"
  env_name   = "dev"
}

# prod/terragrunt.hcl
include {
  path = find_in_parent_folders()
}

terraform {
  source = "../modules/vpc"
}

inputs = {
  cidr_block = "10.1.0.0/16"
  env_name   = "prod"
}

9. Кастомный Terraform Provider

Задача: Создать скелет кастомного провайдера для внутреннего API.

Промт:

Напиши минимальную структуру Go-кода для Terraform-провайдера, который управляет ресурсом 'myapp_deployment' с полями name, image, replicas. Используй Terraform Plugin Framework.

Пример результата (фрагмент main.go):

package main

import (
    "context"
    "github.com/hashicorp/terraform-plugin-framework/providerserver"
    "github.com/hashicorp/terraform-plugin-framework/resource"
    "github.com/hashicorp/terraform-plugin-framework/tfsdk"
)

func main() {
    providerserver.Serve(context.Background(), func() tfsdk.Provider {
        return &myProvider{}
    }, providerserver.ServeOpts{
        Address: "registry.terraform.io/myorg/myprovider",
    })
}

type myProvider struct{}

func (p *myProvider) GetResources(_ context.Context) (map[string]tfsdk.ResourceType, diag.Diagnostics) {
    return map[string]tfsdk.ResourceType{
        "myapp_deployment": &deploymentResourceType{},
    }, nil
}

Полный код включает реализацию CRUD-методов для ресурса.

10. Пайплайн GitOps с Terraform и Atlantis

Задача: Настроить автоматический plan/apply при Pull Request.

Промт:

Напиши конфигурацию Atlantis для GitHub, которая при создании PR запускает 'terraform plan', а при merge — 'terraform apply'. Используй webhook secret и S3-бэкенд.

Пример результата (atlantis.yaml):

version: 3
automerge: false
delete_source_branch_on_merge: true
projects:
- name: my-project
  dir: .
  terraform_version: v1.9.0
  autoplan:
    enabled: true
    when_modified: ["*.tf", "*.tfvars"]
  apply_requirements: ["mergeable", "approved"]
  workflow: default
workflows:
  default:
    plan:
      steps:
      - init
      - plan
    apply:
      steps:
      - apply

Заключение

Эти 10 промтов покрывают ключевые сценарии работы с Terraform: от создания простых модулей до multi-cloud и кастомных провайдеров. Главное — помнить, что промт должен быть конкретным и содержать все необходимые входные данные.

Попробуйте применить эти промты в своем проекте. Начните с базовых, затем переходите к продвинутым — и вы увидите, как LLM может стать вашим ассистентом по IaC.

А если вы хотите углубиться в тему и освоить Terraform на профессиональном уровне, обратите внимание на специализированные курсы. Например, ASI Biont поддерживает интеграцию с HashiCorp Cloud Platform через API — подробнее на asibiont.com/courses.

Удачной инфраструктуры!

← Все статьи

Комментарии

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

Asset tracking + ASI Biont: AI-управление складом и логистикой без единой строки кода

9 июля 2026

Kubernetes + AI-агент ASI Biont: автоматизация деплоя, мониторинг и rollback без кода

9 июля 2026

Как AI-трекер и практические лабы помогают сдать ACE и PCA: обзор курса Google Cloud Architect на Asibiont

9 июля 2026

Smart City sensors + ASI Biont: AI-управление умным городом через MQTT без программирования

9 июля 2026

Интеграция Arduino Uno / Nano / Mega с AI-агентом ASI Biont: практическое руководство по последовательному порту и автоматизации

9 июля 2026

Как интегрировать устройства RS-485 с AI-агентом ASI Biont: пошаговое руководство для промышленной автоматизации

9 июля 2026

Освоение маркировки CE и технических регламентов ЕС: ваше руководство по соответствию продукции в 2026 году

9 июля 2026

Экологическое право 2026: как избежать миллионных штрафов за отходы и НВОС — разбор курса Asibiont

9 июля 2026

Как подключить AI-агента ASI Biont к Oracle ERP: автоматизация обработки счетов, управления запасами и финансовой отчетности без кода

9 июля 2026