В чем отличие Terraform от SaltStack?

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

Ответ

Terraform — это инструмент для инфраструктуры как кода (IaC), предназначенный для провиженинга (создания и изменения) облачных ресурсов и платформ. Он работает по декларативной модели: вы описываете желаемое состояние, а Terraform строит и выполняет план для его достижения.

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

Ключевые отличия:

  • Цель: Terraform создает инфраструктуру (VPC, виртуальные машины, базы данных). Salt настраивает операционную систему и приложения на уже существующих серверах.
  • Модель: Terraform использует провайдеров (AWS, Azure, GCP) и управляет их API. Salt использует архитектуру master-minion для удаленного выполнения команд и состояний.
  • Идемпотентность: Оба инструмента идемпотентны, но достигают этого по-разному: Terraform через сравнение с состоянием (state file), Salt — через собственные модули состояний.

Пример совместного использования (DevOps-пайплайн):

  1. Terraform создает виртуальные машины в облаке.
    # main.tf
    resource "aws_instance" "app_server" {
    ami           = "ami-0c55b159cbfafe1f0"
    instance_type = "t2.micro"
    tags = {
    Name = "AppServer"
    }
    }
  2. Salt применяет конфигурацию к этим машинам.
    
    # /srv/salt/webserver.sls
    nginx:
    pkg.installed

/etc/nginx/nginx.conf: file.managed:

  • source: salt://nginx/files/nginx.conf.jinja
  • template: jinja

nginx_service: service.running:

  • name: nginx
  • enable: True
  • require:
    • pkg: nginx
    • file: /etc/nginx/nginx.conf
      
      В современном стеке их часто используют вместе: Terraform для «железа», а Salt, Ansible или Puppet — для его настройки.