Terraform — это инструмент Infrastructure as Code (IaC), который позволяет описывать инфраструктуру в виде читаемых конфигов, версионировать её и управлять её жизненным циклом: создавать, изменять, удалять ресурсы как код. Такой подход делает деплой детерминированным, отзывчивым и повторяемым.
Зачем он нужен? (примеры по-жизни)
- Развернуть одинаковые окружения (dev/stage/prod) без ручного клика в консоли.
- Версионировать инфраструктуру в git и откатываться при проблемах.
- Автоматизировать сеть, виртуалки, DNS, облачные сервисы и даже SaaS-объекты.
Основные концепции
- Конфигурация — файлы .tf с описанием ресурсов.
- Провайдеры — плагины для облаков и сервисов (AWS, GCP, Azure, VMware и т.д.).
- State — файл состояния (локально или в удалённом бэкенде), где Terraform хранит актуальное представление инфраструктуры.
- Планирование — команда
terraform planпоказывает, что изменится до применения. - Модули — переиспользуемые блоки конфигурации (как функции для инфры).
Эти штуки — базовые и почти всегда упоминаются в любом вводном видео/уроке. Видео, на которое мы опирались, как раз прохватывает эти темы в простом стиле.
Типичный рабочий цикл (команды)
# инициализация (скачивает провайдеры)
terraform init
# показывает изменения (без применения)
terraform plan
# применяет конфигурацию
terraform apply
# удаляет инфраструктуру
terraform destroy
Всегда делай plan перед apply — и храни стейт в надежном бэкенде (S3 + DynamoDB, GCS, Terraform Cloud и т.п.) для командной работы.
Простой пример: AWS EC2 (мини-файл)
Копипаст для теста — не забудь подставить свои креды/профиль и регион.
# providers.tf
provider "aws" {
region = "eu-central-1"
}
# main.tf
resource "aws_instance" "demo" {
ami = "ami-0abcdef1234567890" # заменить на актуальную AMI
instance_type = "t3.micro"
tags = {
Name = "devopz-demo"
}
}
Процесс: terraform init → terraform plan → terraform apply. После — terraform destroy, когда тесты закончены.
Лучшие практики (коротко)
- Храни стейт удалённо для командной работы и блокировок (S3+DynamoDB, GCS, Terraform Cloud).
- Используй модули для повторяемых кусочков (vpc, ec2, rds и т.д.).
- Ограничь секреты: не ложи креды в .tf; используй переменные и секретные хранилища (Vault/SSM/etc.).
- Пиши небольшие коммиты/PR с
planв CI для ревью infra-изменений. - Документируй модули и входные/выходные переменные — через README внутри модуля.
К чему готовиться при изучении
Поначалу придётся понять:
- Как устроены провайдеры и ресурсы конкретного облака.
- Как безопасно хранить стейт и секреты.
- Как строить модули и организовывать код infra.
Официальные туториалы и документация — лучшие места для practice labs и примеров.