Все статьи
TerraformAnsibleIaCDevOps

Terraform vs Ansible: когда что выбирать

InfoScale Team·1 марта 2026· 9 мин

«Что лучше — Terraform или Ansible?» — один из самых частых вопросов на DevOps-собеседованиях. Правильный ответ: зависит от задачи. Неправильный: выбрать один инструмент и использовать его везде.

Главное отличие: декларативность vs императивность

Terraform — декларативный инструмент. Вы описываете желаемое состояние инфраструктуры, и Terraform сам вычисляет, что нужно создать, изменить или удалить. Это идеально для управления облачными ресурсами: VPC, EC2, RDS, IAM-ролями.

Ansible — императивный. Вы описываете последовательность действий: установить пакет, скопировать файл, перезапустить сервис. Это делает его мощным инструментом для конфигурирования серверов и оркестрации задач.

Сравнение по ключевым параметрам

ПараметрTerraformAnsible
ПодходДекларативныйИмперативный
Основная задачаProvisioning инфраструктурыКонфигурация серверов
State managementState-файл (terraform.tfstate)Без state (идемпотентность)
ЯзыкHCL (HashiCorp Config Language)YAML (Playbooks)
Агент на сервереНе нуженНе нужен (SSH)
Облачные провайдерыОтличная поддержка (800+ провайдеров)Хорошая через модули
Скорость обученияСредняя (HCL + концепции)Низкая (YAML)

Когда использовать Terraform

Создание и управление облачной инфраструктурой (AWS, GCP, Azure, Yandex Cloud)
Multi-cloud или multi-region деплои с единым state
Управление сетями: VPC, subnets, security groups, load balancers
Kubernetes-кластеры (EKS, GKE, AKS) и managed-сервисы (RDS, ElastiCache)
Когда важна история изменений инфраструктуры через git

# Пример: создание 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

Конфигурация серверов после их создания: установка пакетов, настройка nginx, systemd
Деплой приложений на bare-metal или VM без Kubernetes
Автоматизация рутинных задач: обновления, бэкапы, ротация логов
Оркестрация multi-step процессов с условиями и обработкой ошибок
Управление конфигурацией Kafka, PostgreSQL, Redis на кастомных серверах

# Пример: установка и настройка 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 для provisioning облачных ресурсов

Ansible не хранит state. Если ресурс уже существует — playbook может упасть или создать дубликат. Terraform для этого подходит лучше.

Использовать Terraform для конфигурации приложений внутри VM

Terraform создаёт ресурсы, но не предназначен для управления файлами конфигурации, сервисами и пакетами внутри ОС. Это зона Ansible.

Выбирать один инструмент для всего

В реальных проектах Terraform и Ansible работают вместе: Terraform создаёт инфраструктуру, Ansible её конфигурирует. Это не конкуренты — это пара.

Реальный сценарий из нашего проекта

В проекте VPN-сервиса (12 000+ пользователей) мы использовали оба инструмента в связке. Вот как выглядел пайплайн:

1
TerraformСоздаёт VPC, EC2-инстансы, security groups, load balancer в AWS
2
AnsibleУстанавливает OpenVPN, настраивает firewall, разворачивает конфиги
3
ArgoCDДеплоит приложение в Kubernetes-кластер, созданный Terraform
4
AnsibleАвтоматизирует обновления и ротацию сертификатов по расписанию

Результат: деплой идентичного кластера с нуля занимает 30 минут. До этого — 2-3 дня ручной работы.

Итог

Terraform — для создания инфраструктуры. Ansible — для её конфигурации. Вместе они покрывают весь жизненный цикл: от пустого облака до работающего production. Если вы используете только один из них — скорее всего, вы либо усложняете там, где не нужно, либо упускаете возможности.

Нужна помощь с IaC в вашем проекте?

Мы настраиваем Terraform + Ansible связки для production-инфраструктуры. Расскажем, что подойдёт именно вам.

Обсудить проект