Встречается на 33% собеседований по DevOps

Чем отличается Terraform от Ansible ELK stack

Terraform, Ansible и ELK Stack — это инструменты автоматизации, но они решают разные задачи: Terraform управляет созданием инфраструктуры, Ansible — её настройкой, а ELK Stack — сбором и анализом данных. Terraform — это инструмент HashiCorp для управления инфраструктурой как кодом (IaC), который декларативно описывает желаемое состояние облачных ресурсов. Ansible — это система автоматизации конфигурации, которая процедурно выполняет задачи на уже существующих серверах. ELK Stack (Elasticsearch, Logstash, Kibana) — это набор для сбора, обработки и визуализации логов и метрик.

Как это работает

Terraform использует декларативный подход: вы описываете в конфигурационных файлах (например, на HCL) целевое состояние инфраструктуры — виртуальные машины, сети, базы данных. Terraform вычисляет разницу между текущим состоянием и желаемым, затем создаёт, изменяет или удаляет ресурсы через API облачного провайдера. Он хранит состояние в файле terraform.tfstate и умеет работать с AWS, Azure, GCP и другими.

Ansible работает процедурно: вы пишете плейбуки (YAML), в которых перечисляете шаги — установить пакет, скопировать файл, перезапустить службу. Ansible подключается к хостам по SSH и выполняет задачи, не требуя установки агентов. Он также идемпотентен: повторное выполнение плейбука не меняет систему, если она уже в нужном состоянии.

ELK Stack — это три компонента: Elasticsearch (хранилище и поиск), Logstash (сбор и трансформация данных), Kibana (визуализация). Logstash собирает логи из разных источников, нормализует их и отправляет в Elasticsearch, где данные индексируются и становятся доступными для поиска и построения дашбордов в Kibana.

Пример

Пример конфигурации Terraform для создания AWS EC2-инстанса:

hcl
provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "web-server"
  }
}

Пример плейбука Ansible для установки Nginx:

yaml
---
- hosts: webservers
  tasks:
    - name: Установить nginx
      apt:
        name: nginx
        state: present
    - name: Запустить nginx
      service:
        name: nginx
        state: started

Пример конфигурации Logstash для приёма логов:

yaml
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
  }
}

Подводные камни

  • Terraform требует управления состоянием: при работе в команде нужно использовать удалённый backend (например, S3) и блокировки, чтобы избежать конфликтов.
  • Ansible не подходит для создания инфраструктуры с нуля — он работает с уже существующими хостами.
  • ELK Stack может быть тяжёлым для небольших проектов: требуется настройка и поддержка Elasticsearch, Logstash и Kibana.
  • Идемпотентность Ansible зависит от модулей: некоторые модули могут не быть полностью идемпотентными.
  • Terraform не управляет конфигурацией внутри виртуальных машин — для этого нужен Ansible или аналоги.

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

  • Terraform — для создания и изменения инфраструктуры: при старте проекта, масштабировании, настройке сетей и серверов в облаке.
  • Ansible — для настройки и управления конфигурацией существующих серверов: установка ПО, обновление конфигов, оркестрация деплоя.
  • ELK Stack — для мониторинга и анализа: сбор логов, метрик, построение дашбордов для отслеживания работы системы.

Эти инструменты часто используют вместе: Terraform создаёт инфраструктуру, Ansible настраивает её, а ELK Stack собирает данные о работе.

Коротко

  • Terraform — декларативный IaC для создания и управления облачной инфраструктурой.
  • Ansible — процедурная автоматизация конфигурации и управления существующими серверами.
  • ELK Stack — сбор, хранение и визуализация логов и метрик для мониторинга.
  • Инструменты дополняют друг друга: Terraform создаёт, Ansible настраивает, ELK анализирует.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы