️ Terraform

If you like this project, consider supporting me on Buy Me a Coffee ☕️

Terraform Cheatsheet

Description: Terraform is an open-source Infrastructure as Code (IaC) tool by HashiCorp. It allows you to define, provision, and manage cloud infrastructure using a declarative configuration language (HCL). Terraform supports 3000+ providers (AWS, Azure, GCP, Kubernetes, etc.) and manages the full lifecycle of infrastructure resources. Terraform — это open-source инструмент «Инфраструктура как код» (IaC) от HashiCorp. Позволяет определять, провижинить и управлять облачной инфраструктурой с помощью декларативного языка конфигурации (HCL).

Status: Actively maintained. OpenTofu is an open-source fork (post-BSL license change) and a drop-in replacement. Other IaC alternatives: Pulumi (multi-language), AWS CloudFormation (AWS-only), Ansible (procedural). Role: DevOps / Cloud Engineer / SRE Version: 1.x+


📚 Table of Contents / Содержание

  1. Workflow
  2. State Management
  3. Workspaces
  4. Modules
  5. Variables & Outputs
  6. Debugging
  7. Best Practices

1. Workflow / Рабочий процесс

Init & Validate / Инициализация и Проверка

# Initialize directory (Download providers) / Инициализация (Скачать провайдеры)
terraform init

# Upgrade providers / Обновить провайдеры
terraform init -upgrade

# Format code / Форматирование кода
terraform fmt -recursive

# Validate syntax / Проверка синтаксиса
terraform validate

Plan & Apply / План и Применение

# Plan (Preview changes) / План (Предпросмотр)
terraform plan -out=tfplan

# Apply changes / Применить изменения
terraform apply "tfplan"

# Auto approve / Автоподтверждение
terraform apply -auto-approve

[!WARNING] terraform apply -auto-approve skips the confirmation prompt. Use only in CI/CD pipelines or non-critical environments. terraform apply -auto-approve пропускает подтверждение. Используйте только в CI/CD или некритичных окружениях.

# Destroy infrastructure / Удалить инфраструктуру
terraform destroy

# Preview what will be destroyed / Предпросмотр удаления
terraform plan -destroy

[!CAUTION] terraform destroy permanently removes all managed resources. Always run terraform plan -destroy first to preview what will be deleted. terraform destroy безвозвратно удаляет все ресурсы. Всегда сначала выполняйте terraform plan -destroy.

Targeted Operations / Целевые операции

# Apply only specific resource / Применить только конкретный ресурс
terraform apply -target=aws_instance.web

# Destroy only specific resource / Удалить только конкретный ресурс
terraform destroy -target=aws_instance.web

# Refresh state from real infrastructure / Обновить стейт из реальной инфраструктуры
terraform refresh

2. State Management / Управление состоянием (State)

List & Show / Список и Просмотр

# List resources in state / Список ресурсов в стейте
terraform state list

# Show details of resource / Детали ресурса
terraform state show <RESOURCE_ADDRESS>

# Pull remote state to local file / Загрузить удалённый стейт в локальный файл
terraform state pull > terraform.tfstate.backup

Manipulation / Манипуляция

# Remove from state (Does not destroy real resource) / Удалить из стейта (Не удаляет реальный ресурс)
terraform state rm <RESOURCE_ADDRESS>

# Move/Rename resource / Переместить/Переименовать ресурс
terraform state mv <OLD_ADDR> <NEW_ADDR>

# Import existing resource / Импорт существующего ресурса
terraform import <RESOURCE_ADDRESS> <ID>

# Replace a tainted resource / Заменить повреждённый ресурс
terraform apply -replace=<RESOURCE_ADDRESS>

[!WARNING] terraform state rm removes the resource from Terraform's tracking but does NOT destroy the actual cloud resource. Use terraform destroy -target to destroy. terraform state rm удаляет ресурс из отслеживания Terraform, но НЕ уничтожает реальный облачный ресурс.

Remote State Backend / Удалённый бэкенд стейта

backend.tf

terraform {
  backend "s3" {
    bucket         = "<BUCKET_NAME>"
    key            = "terraform/state.tfstate"
    region         = "<REGION>"
    dynamodb_table = "<LOCK_TABLE>"
    encrypt        = true
  }
}

3. Workspaces / Рабочие окружения

# List workspaces / Список окружений
terraform workspace list

# Create new workspace / Создать новое окружение
terraform workspace new dev

# Select workspace / Выбрать окружение
terraform workspace select prod

# Show current workspace / Показать текущее окружение
terraform workspace show

# Delete workspace / Удалить окружение
terraform workspace delete staging

[!TIP] Use terraform.workspace in HCL to branch logic by environment (e.g., instance sizes, replica counts). Используйте terraform.workspace в HCL для ветвления логики по окружению.


4. Modules / Модули

# Download modules / Скачать модули
terraform get

# Update modules / Обновить модули
terraform get -update

Module Usage Example / Пример использования модуля

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 5.0"

  name = "my-vpc"
  cidr = "10.0.0.0/16"
}

5. Variables & Outputs / Переменные и выводы

Passing Variables / Передача переменных

# Via command line / Через командную строку
terraform apply -var="instance_type=t3.micro"

# Via variable file / Через файл переменных
terraform apply -var-file="prod.tfvars"

# Via environment variable / Через переменную окружения
export TF_VAR_instance_type="t3.micro"
terraform apply

Show Outputs / Показать выводы

# List all outputs / Список всех выводов
terraform output

# Show specific output / Показать конкретный вывод
terraform output instance_ip

# Output in JSON / Вывод в JSON
terraform output -json

6. Debugging / Отладка

Logs / Логи

Set env var TF_LOG. Levels: TRACE, DEBUG, INFO, WARN, ERROR. Установите переменную окружения TF_LOG. Уровни: TRACE, DEBUG, INFO, WARN, ERROR.

export TF_LOG=DEBUG
export TF_LOG_PATH=/tmp/terraform.log
terraform apply

Console / Консоль

Interactive console to test expressions. / Интерактивная консоль для теста выражений.

terraform console
> local.my_variable
> length(var.subnets)

Generate Graph / Генерация графа

# Generate dependency graph / Генерация графа зависимостей
terraform graph | dot -Tpng -o graph.png

Best Practices / Лучшие практики

IaC Tools Comparison / Сравнение IaC инструментов

Tool Language Type Description (EN / RU) Best For
Terraform HCL Declarative Multi-cloud IaC / Мультиоблачный IaC Multi-cloud, provider ecosystem
OpenTofu HCL Declarative Open-source Terraform fork / Open-source форк Terraform Terraform replacement (open-source)
Pulumi Python/TS/Go/C# Declarative Multi-language IaC / Мультиязычный IaC Teams preferring real languages
CloudFormation JSON/YAML Declarative AWS-native IaC / AWS-нативный IaC AWS-only environments
Ansible YAML Procedural Configuration management / Управление конфигурацией Server config, hybrid IaC

Official Documentation / Официальная документация

On this page

Terraform Cheatsheet 📚 Table of Contents / Содержание 1. Workflow / Рабочий процесс Init &amp; Validate / Инициализация и Проверка Plan &amp; Apply / План и Применение Targeted Operations / Целевые операции 2. State Management / Управление состоянием (State) List &amp; Show / Список и Просмотр Manipulation / Манипуляция Remote State Backend / Удалённый бэкенд стейта 3. Workspaces / Рабочие окружения 4. Modules / Модули Module Usage Example / Пример использования модуля 5. Variables &amp; Outputs / Переменные и выводы Passing Variables / Передача переменных Show Outputs / Показать выводы 6. Debugging / Отладка Logs / Логи Console / Консоль Generate Graph / Генерация графа Best Practices / Лучшие практики IaC Tools Comparison / Сравнение IaC инструментов Official Documentation / Официальная документация