Ответ
В моей практике основными альтернативами для управления инфраструктурой как код были:
-
Terraform: Я использовал его для provisioning облачных ресурсов (AWS, GCP) перед их конфигурацией. Его декларативный HCL отлично подходит для описания целевого состояния инфраструктуры.
resource "aws_instance" "app_server" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "ExampleAppServerInstance" } } -
Puppet: Работал с ним в агентной модели на крупных, стабильных стендах. Его манифесты на DSL позволяют чётко декларировать конфигурацию, а централизованный Puppet Master упрощает управление тысячами нод.
package { 'nginx': ensure => 'latest', } service { 'nginx': ensure => running, enable => true, require => Package['nginx'], } -
Chef: Применял в проектах, где инфраструктурная команда была сильна в Ruby. Рецепты Chef дают большую гибкость за счёт императивного программирования.
-
Pulumi: Экспериментировал с ним для описания инфраструктуры на Python, что позволяло использовать все возможности языка (циклы, условия, модули) вместо ограниченного DSL.
Ключевое отличие Ansible — его агентless-архитектура через SSH/WinRM, что делает его проще для старта, особенно для ад-хок задач и оркестрации.