Ответ
В 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 (императивный) — для их последующей конфигурации (установка ПО, настройка).