Зачем нужен Terraform?

«Зачем нужен Terraform?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Terraform — это основной инструмент в моем стеке для реализации Infrastructure as Code (IaC). Я использую его для декларативного описания, развертывания и управления всей облачной инфраструктурой (AWS, Azure) и внутренними сервисами (Kubernetes, базы данных).

Как я его применяю на практике:

  1. Версионирование и контроль изменений: Вся инфраструктура проекта хранится в Git-репозитории. Любое изменение (добавление сервера, изменение правила Security Group) — это Pull Request с ревью, что исключает ручные правки напрямую в консоли облака.
  2. Идемпотентность и предсказуемость: Команда terraform apply всегда приводит инфраструктуру к состоянию, описанному в коде. Это позволяет безопасно применять конфигурацию многократно, что критично для CI/CD пайплайнов.
  3. Модульность и переиспользование: Я создаю модули для типовых компонентов (например, модуль vpc или eks-cluster), что ускоряет развертывание новых сред (dev, staging, prod) и обеспечивает их идентичность.

Пример из моего опыта: Вот как выглядит описание security group для доступа к RDS в AWS, которое я использовал в последнем проекте:

# modules/security_groups/rds_sg/main.tf
resource "aws_security_group" "rds_sg" {
  name        = "${var.environment}-rds-sg"
  description = "Allow access to RDS from ECS tasks"
  vpc_id      = var.vpc_id

  ingress {
    from_port       = 5432
    to_port         = 5432
    protocol        = "tcp"
    security_groups = [var.ecs_security_group_id] # Динамическая привязка к ECS
  }

  tags = {
    Environment = var.environment
    ManagedBy   = "Terraform"
  }
}

Перед apply я всегда запускаю terraform plan, чтобы увидеть план изменений, что является ключевой практикой для предотвращения сбоев.