Гайды
Terraform: основы и провайдеры AWS и GCP
init, plan и apply, state и remote backend, модули, импорт и дрейф, секреты вне .tf.
~10 мин чтения
Terraform: основы и провайдеры AWS и GCP
Terraform описывает инфраструктуру как HCL-код: providers (AWS, GCP, Azure…), resources, state, plan/apply. Этот гайд — базовый цикл и отличия облаков на уровне концепций; k8s часто ставят отдельным модулем или через GKE/EKS ресурсы. Обзоры сервисов: AWS: EC2, S3, RDS, VPC, GCP: GKE и Cloud Run, Azure: основы.
1. Инициализация
terraform init
terraform fmt -recursive
terraform validate
terraform plan -out=tfplan
terraform apply tfplan
State — по умолчанию локальный terraform.tfstate; в команде — remote backend (S3 + DynamoDB lock, GCS + state lock).
2. Минимальный AWS пример
terraform {
required_providers {
aws = { source = "hashicorp/aws", version = "~> 5.0" }
}
}
provider "aws" {
region = var.region
}
resource "aws_s3_bucket" "logs" {
bucket = var.bucket_name
}
Учётные данные — env, IAM role (OIDC с GitHub Actions), не long-lived keys в репозитории.
3. GCP ориентир
Provider google, проект через project, аутентификация GOOGLE_APPLICATION_CREDENTIALS или workload identity. Ресурсы: google_compute_network, google_container_cluster (GKE).
4. Переменные и модули
variables.tf, outputs.tf, modules/vpc — переиспользование. Пинning версий провайдеров обязателен.
Terragrunt (обёртка) помогает DRY для нескольких окружений с общими remote_state и provider блоками; альтернатива — Terraform Cloud/Enterprise workspaces или отдельные каталоги с копированием минимума. tflint и terraform-docs в CI улучшают читаемость и ловят опечатки в типах переменных.
5. Импорт и дрейф
Существующие ресурсы — terraform import. Расхождение state и облака — terraform plan покажет drift; иногда нужен refresh.
6. lifecycle и безопасные изменения
prevent_destroy для критичных ресурсов, create_before_destroy при смене ресурсов с downtime, replace_triggered_by в 1.2+ для явных пересозданий. moved блоки документируют рефакторинг без destroy/create.
7. for_each и динамика
Предпочитайте for_each map/set вместо count где возможно — стабильные адреса в state при удалении элемента из середины списка. dynamic blocks для вложенных ACL/правил без копипасты.
8. Чек-лист
- Remote state + блокировка.
- Workspaces или отдельные каталоги per env — политика команды.
- Политики как код (OPA/Sentinel/Terraform Cloud policy).
- Секреты не в
.tf; SSM/Secret Manager + data source. -
terraform planв CI на каждый PR с read-only credentials. - Документировать required_version Terraform в блоке
terraform {}.
Дальше: Ansible · тег Terraform