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
Pulumi и CDK: IaC на настоящих языках

0

1

Войти