Terraform vs Ansible: когда что выбирать
«Что лучше — Terraform или Ansible?» — один из самых частых вопросов на DevOps-собеседованиях. Правильный ответ: зависит от задачи. Неправильный: выбрать один инструмент и использовать его везде.
Главное отличие: декларативность vs императивность
Terraform — декларативный инструмент. Вы описываете желаемое состояние инфраструктуры, и Terraform сам вычисляет, что нужно создать, изменить или удалить. Это идеально для управления облачными ресурсами: VPC, EC2, RDS, IAM-ролями.
Ansible — императивный. Вы описываете последовательность действий: установить пакет, скопировать файл, перезапустить сервис. Это делает его мощным инструментом для конфигурирования серверов и оркестрации задач.
Сравнение по ключевым параметрам
| Параметр | Terraform | Ansible |
|---|---|---|
| Подход | Декларативный | Императивный |
| Основная задача | Provisioning инфраструктуры | Конфигурация серверов |
| State management | State-файл (terraform.tfstate) | Без state (идемпотентность) |
| Язык | HCL (HashiCorp Config Language) | YAML (Playbooks) |
| Агент на сервере | Не нужен | Не нужен (SSH) |
| Облачные провайдеры | Отличная поддержка (800+ провайдеров) | Хорошая через модули |
| Скорость обучения | Средняя (HCL + концепции) | Низкая (YAML) |
Когда использовать Terraform
# Пример: создание EKS кластера в Terraform
resource "aws_eks_cluster" "production" {
name = "infoscale-prod"
role_arn = aws_iam_role.eks.arn
version = "1.29"
vpc_config {
subnet_ids = aws_subnet.private[*].id
}
}
Когда использовать Ansible
# Пример: установка и настройка Kafka через Ansible
- name: Установить Kafka
hosts: kafka_nodes
tasks:
- name: Скачать дистрибутив
get_url:
url: https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
dest: /opt/kafka.tgz
Типичные ошибки при выборе инструмента
Ansible не хранит state. Если ресурс уже существует — playbook может упасть или создать дубликат. Terraform для этого подходит лучше.
Terraform создаёт ресурсы, но не предназначен для управления файлами конфигурации, сервисами и пакетами внутри ОС. Это зона Ansible.
В реальных проектах Terraform и Ansible работают вместе: Terraform создаёт инфраструктуру, Ansible её конфигурирует. Это не конкуренты — это пара.
Реальный сценарий из нашего проекта
В проекте VPN-сервиса (12 000+ пользователей) мы использовали оба инструмента в связке. Вот как выглядел пайплайн:
Результат: деплой идентичного кластера с нуля занимает 30 минут. До этого — 2-3 дня ручной работы.
Итог
Terraform — для создания инфраструктуры. Ansible — для её конфигурации. Вместе они покрывают весь жизненный цикл: от пустого облака до работающего production. Если вы используете только один из них — скорее всего, вы либо усложняете там, где не нужно, либо упускаете возможности.
Нужна помощь с IaC в вашем проекте?
Мы настраиваем Terraform + Ansible связки для production-инфраструктуры. Расскажем, что подойдёт именно вам.
Обсудить проект