Какие есть два основных метода описания инфраструктуры с использованием IaC?

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

Ответ

В Infrastructure as Code (IaC) выделяют два фундаментальных подхода:

1. Декларативный (Declarative) подход Описывает желаемое конечное состояние инфраструктуры. Инструмент сам определяет последовательность действий для его достижения.

  • Преимущества: Идемпотентность (многократное применение дает один результат), простота чтения, фокус на результате.
  • Инструменты: Terraform, AWS CloudFormation, Kubernetes manifests (YAML).
# Terraform (декларативный) - описываем состояние
resource "aws_instance" "app_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "ExampleAppServerInstance"
  }
}

2. Императивный (Imperative) подход Описывает конкретную последовательность команд или шагов, которые необходимо выполнить для изменения инфраструктуры.

  • Преимущества: Детальный контроль над процессом, гибкость для сложных, нестандартных операций.
  • Инструменты: Ansible (в основном), Chef, Puppet, скрипты оболочки (Bash/PowerShell).
# Ansible Playbook (императивный) - описываем шаги
- name: Ensure web server is installed and running
  hosts: webservers
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
    - name: Start nginx service
      systemd:
        name: nginx
        state: started
        enabled: yes

Практический выбор: В современном DevOps стеке часто используют оба подхода. Terraform (декларативный) — для provisioning облачных ресурсов (VPC, VM, БД), а Ansible (императивный) — для их последующей конфигурации (установка ПО, настройка).