Pulumi — инструмент Infrastructure as Code (IaC), где инфраструктура описывается на полноценных языках программирования, а не на специализированных DSL. Поддерживает TypeScript/JavaScript, Python, Go, C#, Java и YAML. Разработчики применяют привычные инструменты: функции, классы, условия, циклы, юнит-тесты — для описания и управления облачной инфраструктурой.
Как работает Pulumi
При запуске pulumi up инструмент выполняет программу на Python или TypeScript, которая декларирует ресурсы. Pulumi сравнивает желаемое состояние с текущим (хранится в State) и вычисляет diff — только изменения передаются в API провайдера. Это аналог terraform plan + terraform apply.
import pulumi_hcloud as hcloud
servers = []
for i in range(3):
server = hcloud.Server(f"web-{i}",
server_type="cx21",
image="ubuntu-22.04",
location="fsn1"
)
servers.append(server)
Создание трёх VPS на Hetzner с одинаковыми параметрами — цикл for вместо копипаста HCL-кода. В Terraform аналогичное решение требует count или for_each с ограниченной логикой.
Архитектура Pulumi
- Pulumi SDK — языковые библиотеки (пакеты
@pulumi/aws,pulumi-hcloud,pulumi_gcpи др.) для управления ресурсами через API провайдеров. - Pulumi CLI — команды
pulumi up,pulumi preview,pulumi destroy,pulumi stack. - Pulumi State — хранение состояния инфраструктуры. Варианты: Pulumi Cloud (управляемый, бесплатно до 1 проекта), S3-совместимое хранилище, Azure Blob, GCS (self-hosted).
- Pulumi Providers — 120+ провайдеров: AWS, GCP, Azure, Hetzner, DigitalOcean, Kubernetes, GitHub, Cloudflare.
Чем отличается от Terraform
| Параметр | Pulumi | Terraform |
|---|---|---|
| Язык | Python, TypeScript, Go, C# | HCL (собственный DSL) |
| Циклы | Полноценные (for, while) | Только count и for_each |
| Условия | Полноценные if/else | Ternary + conditional |
| Переиспользование | Классы, функции, npm/PyPI пакеты | Terraform Modules |
| Тесты | Обычные unit-тесты | Ограниченная поддержка |
| State management | Pulumi Cloud или S3 | Terraform Cloud или S3 |
| Лицензия (ядро) | Apache 2.0 (open-source) | BSL 1.1 с 2023 года |
История
Pulumi основана в 2017 году Джо Далингером (Joe Duluger) и Эриком Рудером (Eric Rudder, бывший SVP Microsoft). Версия 1.0 вышла в 2019 году. Pulumi привлекла $41 млн в серии C в 2022 году. В ответ на изменение лицензии Terraform в 2023 году (BSL) популярность Pulumi выросла. OpenTofu — форк Terraform под Apache 2.0, конкурирует с обоими инструментами.
Pulumi в хостинге
Pulumi используется для автоматизации создания и управления серверной инфраструктурой: программное создание VPS, настройка DNS-записей, управление файрволами и балансировщиками нагрузки. В отличие от Ansible (управление конфигурацией установленных серверов), Pulumi — инструмент provisioning (создание ресурсов). Оба инструмента дополняют друг друга: Pulumi создаёт VPS через API Hetzner/DigitalOcean, Ansible устанавливает и настраивает ПО. Pulumi Automation API позволяет встраивать IaC-логику в приложения на Python или TypeScript — например, автоматически создавать VPS при регистрации нового клиента.
Компоненты экосистемы Pulumi
Pulumi CrossGuard — политики соответствия на TypeScript или Python, которые проверяют ресурсы перед деплоем. Например, политика «VPS без публичного IP по умолчанию» или «все S3-buckets зашифрованы». Pulumi ESC (Environments, Secrets, Configuration) — централизованное управление секретами и переменными окружения. Pulumi AI — генерация Pulumi-программ на основе описания инфраструктуры на естественном языке. Pulumi Deployments — управляемый CI/CD для Pulumi-программ с GitOps workflow.