DevOps
Pulumi и CDK: IaC на настоящих языках
2021 год. Команда в Snowflake: 3000 строк HCL Terraform, 0 тестов. Неправильный count в for_each - удалили 47 production баз данных. Восстановление - 14 часов. Именно это происходит без type safety и тестов в IaC. Pulumi и CDK - это не только синтаксический сахар. Это компилятор как последняя линия защиты.
- Lemonade Insurance перешла с Terraform на Pulumi: type safety выловила 23 класса ошибок которые были бы в production при Terraform. CI время сократилось с 45 минут до 8
- AWS CDK используется Lyft, iRobot, Duolingo для IaC - L3 Constructs позволяют команде в 3 человека управлять инфраструктурой 500+ сервисов
- HashiCorp изменила лицензию Terraform на BSL в 2023 -> OpenTofu появился за 3 месяца, уже 100K+ stars, принят Linux Foundation
Реальные языки вместо DSL
Terraform HCL - декларативный DSL. Удобен для простых случаев, ограничен для сложных: нет нормальных циклов, нет абстракций, нет тестов. Pulumi и AWS CDK предлагают другой подход: TypeScript, Python, Go, Java. Полноценные языки с IDE поддержкой, hot reload, дебаггером.
AWS CDK (Cloud Development Kit, 2019): TypeScript/Python, компилируется в CloudFormation. Pulumi (2017): TypeScript/Python/Go/Java/C#, вызывает provider API напрямую. Ключевое различие: CDK -> CloudFormation (AWS only, 200+ services). Pulumi -> 120+ providers (AWS, GCP, Azure, Kubernetes, Datadog, Cloudflare).
Pulumi State: где хранится state of infrastructure. Pulumi Cloud (managed, бесплатно до 1 user), self-hosted (S3 + DynamoDB как backend). Terraform State: S3 + DynamoDB или Terraform Cloud. Оба решают одну проблему: concurrent apply, state locking, history.
Crosswalk for AWS (Pulumi): higher-level abstractions поверх raw AWS API. `awsx.ecs.FargateService` вместо 12 ресурсов вручную. CDK L3 Constructs - то же самое. Принцип: L1 (raw CloudFormation), L2 (с разумными defaults), L3 (паттерны). Это то как работает абстракция в IaC.
Главное архитектурное отличие CDK от Terraform?
Type Safety в IaC: компилятор как ревьюер
HCL в Terraform: опечатка в имени параметра -> runtime error на `terraform apply`. Pulumi/CDK TypeScript: опечатка -> compile error до любого деплоя. Это не мелочь - runtime ошибки в IaC разрушают production состояние.
Pulumi Output<T> система: `bucket.id` возвращает `Output<string>`, не `string`. Это promise-like wrapper, разрешающийся после создания ресурса. Нельзя случайно использовать неразрешённый Output как string - TypeScript не скомпилирует. Dependency tracking автоматический: если A использует B.output, A зависит от B.
ComponentResource в Pulumi - абстракция для reusable patterns. Аналог CDK Construct. Пример: VPC + Subnets + NAT + Route Tables = VpcComponent. Публикуется в npm, потребляется как обычный пакет. Pulumi Registry - каталог community components. CDK Construct Hub - аналог для CDK.
Почему Pulumi Output<T> важен для безопасности IaC?
Тестирование IaC: unit, integration, policy
IaC без тестов - это terraform apply в production без ревью. Pulumi и CDK поддерживают три уровня тестов: unit (mock ресурсы, проверить конфигурацию), integration (deploy в изолированный аккаунт, проверить реальное состояние), policy (OPA/Sentinel - запрет ресурсов без тегов, шифрования).
Pulumi CrossGuard - policy as code. Policy Pack: набор правил TypeScript/Python, применяемых к каждому `pulumi up`. Пример: нельзя создать S3 bucket без encryption. Нельзя создать EC2 в публичной подсети без security group review. Интеграция в CI/CD: policy violation -> failed pipeline.
Testing pyramid для IaC: 70% unit (быстро, дёшево, без cloud), 20% integration (в изолированном аккаунте, дорого), 10% e2e (полный стек, очень дорого). Terratest (Go) - популярный фреймворк для integration тестов Terraform/CDK. Время одного integration теста: 5-20 минут (deploy + verify + destroy).
Чем CDK unit test (Template assertions) лучше integration test?
Pulumi vs Terraform vs CDK: прагматичный выбор
Terraform остаётся самым распространённым IaC инструментом в 2024 - огромная экосистема модулей, огромное сообщество, все cloud провайдеры. Pulumi и CDK выигрывают там, где нужна выразительность языка программирования и тесты.
OpenTofu - open-source форк Terraform после смены лицензии HashiCorp на BSL (2023). Drop-in замена: те же HCL файлы, те же providers, тот же workflow. Linux Foundation проект. Рекомендация для новых проектов без legacy Terraform: рассмотреть OpenTofu вместо Terraform + Pulumi/CDK для сложной логики.
Monorepo для IaC: хранить IaC код рядом с application кодом. Pulumi TypeScript + application TypeScript в одном repo. CDK construct тестируется теми же jest тестами что и backend код. CI/CD пайплайн: test app -> test IaC -> deploy app -> deploy infra. Снижает coordination overhead между app и infra командами.
Pulumi/CDK полностью заменяют Terraform - переходить нужно немедленно
Terraform остаётся стандартом для большинства команд. Pulumi/CDK решают конкретные проблемы: типизация, тесты, сложная логика
Terraform имеет 1000+ providers, огромный Registry с готовыми модулями, все облака, все инструменты интеграции (Atlantis, Spacelift, env0). Мигрировать существующую Terraform кодовую базу - дорого. Pulumi Conversion Tool существует, но не идеален. Прагматичный выбор: Terraform для baseline + Pulumi/CDK для сложных компонентов
Когда Pulumi предпочтительнее CDK для multi-cloud компании?
Связанные темы
Pulumi/CDK - инструменты в ecosystem IaC и cloud compliance:
- Compliance и аудит — Policy as code через CrossGuard/CDK Aspects
- Prometheus и Grafana — Мониторинг инфраструктуры создаётся через IaC
Ключевые идеи
- Pulumi/CDK: настоящие языки (TypeScript/Python) вместо DSL. Type safety, IDE, тесты
- CDK -> CloudFormation (AWS only). Pulumi -> Provider API напрямую (120+ providers)
- Тестирование: unit (template assertions, секунды), integration (реальный deploy, минуты), policy (OPA/CrossGuard)
- Terraform остаётся стандартом для большинства. Pulumi/CDK - для сложной логики и multi-cloud
Вопросы для размышления
- Как организовать IaC модули так, чтобы platform-команда могла предоставлять safe defaults application командам?
- Когда CDK Aspects и Pulumi CrossGuard заменяют AWS Config Rules, а когда дополняют?
- Как мигрировать существующий Terraform код в Pulumi без downtime production инфраструктуры?
Связанные уроки
- devops-14 — Terraform - базовый IaC инструмент для сравнения
- devops-16 — Prometheus/Grafana - мониторинг инфраструктуры из Pulumi
- cloud-15 — Compliance guardrails реализуются через IaC политики
- sd-01-intro