Terraform vs Pulumi/CloudFormation
Тема дорожной карты · Terraform
Terraform vs другие IaC-инструменты — это сравнение декларативного, агностичного к провайдеру HCL-подхода HashiCorp Terraform с альтернативами: AWS CloudFormation, Azure Bicep, Pulumi, Ansible и OpenTofu. Terraform и его open-source форк OpenTofu используют модель plan-then-apply (terraform plan + terraform apply), работающую с AWS, Azure, GCP, Kubernetes, Yandex Cloud и тысячами других провайдеров, что даёт ему мультиоблачное преимущество перед облако-специфичными инструментами — CloudFormation (только AWS) или Bicep (только Azure). Pulumi предлагает схожее мультиоблачное покрытие, но выражает инфраструктуру на языках общего назначения (Python, TypeScript, Go), а не на HCL — это привлекательно для команд разработки, но добавляет сложности для ops-ориентированных рабочих процессов. При сравнении Terraform с другими IaC-инструментами ключевыми факторами являются зрелость управления состоянием (remote-state Terraform с блокировкой превосходит бесстатусную модель Ansible), экосистема модулей Terraform Registry и применение политик через Sentinel или OPA — чего большинству конкурентов нативно не хватает.
Как это работает
Terraform vs Pulumi/CloudFormation относится к инфраструктуре (VM, сети, DNS, S3-бакеты) как к коду: декларативные конфиги, версионируемые в git, применяемые инструментом. Основные инструменты: Terraform / OpenTofu (cloud-agnostic, синтаксис HCL), Pulumi (настоящие языки программирования), AWS CloudFormation / Yandex Cloud Terraform provider (cloud-native). Главное обещание: одинаковый код даёт одинаковую инфру в разных средах, изменения ревьюятся + аудитятся как PR приложения.
Когда применять
IaC — с первого дня для любой cloud или VM-based инфры; ручные клики в веб-консоли не масштабируются за одного разработчика. Terraform/OpenTofu — для cross-cloud + крупнейшей экосистемы. Pulumi — если команда предпочитает настоящие языки программирования (TypeScript, Python, Go) и типизацию. ClickOps — только для самых начальных PoC; кодифицируйте до второго инженера.
Типичные ошибки
Ловушки Terraform vs Pulumi/CloudFormation: смешение кликов в консоли и IaC ("config drift" — код говорит одно, реальность другое); коммит секретов в git (secrets-менеджер + tf vars); IaC-код как "только ops" без ревью (нужна та же строгость, что и для app-кода); копирование примеров из блогов без понимания state. Плохо сделанный IaC хуже, чем никакого.