Какие инструменты вы используете для Infrastructure as Code (IaC) и в чем их различия?

«Какие инструменты вы используете для Infrastructure as Code (IaC) и в чем их различия?» — вопрос из категории Terraform, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные инструменты в моем стеке IaC – Terraform и Ansible, которые я применяю на разных этапах жизненного цикла инфраструктуры.

Terraform (HashiCorp)оркестратор инфраструктуры. Я использую его для декларативного описания и создания облачных ресурсов "с нуля".

  • Что делаю: Объявляю VPC, подсети, security groups, managed Kubernetes кластеры (EKS), базы данных (RDS), очереди (SQS).
  • Ключевая концепция – состояние (state): Файл terraform.tfstate хранит текущее состояние инфраструктуры. Это позволяет Terraform понимать, что нужно создать, обновить или удалить. State файл всегда хранился удаленно в S3 с блокировкой через DynamoDB для командной работы.
  • Пример (создание VPC в AWS):
    resource "aws_vpc" "main" {
    cidr_block           = "10.0.0.0/16"
    enable_dns_hostnames = true
    tags = {
    Name = "Production-VPC"
    ManagedBy = "Terraform"
    }
    }

Ansible (Red Hat)конфигурационный менеджер и инструмент деплоя. Я применяю его для настройки уже запущенных виртуальных машин или контейнеров.

  • Что делаю: Устанавливаю пакеты (Docker, nginx), настраиваю системные параметры (sysctl, limits.conf), разворачиваю приложения из артефактов, управляю пользователями и правами.
  • Ключевая концепция – идемпотентность: Плейбук можно запускать много раз, и результат будет одинаковым (если конфигурация уже применена, ничего не меняется).
  • Пример (установка и запуск Docker):
  • name: Ensure Docker is installed and running hosts: docker_servers become: yes tasks:
    • name: Install Docker packages apt: name:
      • docker.io
      • docker-compose state: present update_cache: yes
    • name: Ensure Docker service is started and enabled systemd: name: docker state: started enabled: yes

Совместное использование: Типичный пайплайн: Terraform создает инстанс в AWS -> Ansible, запущенный через local-exec или отдельным пайплайном, настраивает на этом инстансе необходимое ПО. Для контейнеризованных сред Ansible часто используется для подготовки образов (в Dockerfile или Packer), а Terraform управляет оркестратором (Kubernetes), который эти образы запускает.