Pulumi: Infrastructure as Code на языках программирования
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. С IaC мы в компании работаем с 2016 года — начинали с Ansible, потом Terraform, а с 2022-го для ряда клиентов используем Pulumi. За 15+ лет я понял: выбор инструмента зависит не от хайпа, а от команды. Если инженеры пишут на TypeScript или Python каждый день, Pulumi даёт им инфраструктуру на родном языке со всеми его плюсами.
Что такое Pulumi и чем он отличается от Terraform
Pulumi — платформа IaC, которая позволяет описывать облачную инфраструктуру на обычных языках программирования: TypeScript, Python, Go, C#, Java, YAML. Под капотом те же провайдеры, что у Terraform (через специальный мост), но сверху — полноценный язык с функциями, классами, тестами и IDE-подсказками.
Сравнение с Terraform
| Аспект | Terraform | Pulumi |
|---|---|---|
| Язык | HCL | TS/Python/Go/C# |
| Циклы и логика | count, for_each | for, if, функции |
| State | Локальный + S3 | Pulumi Cloud / self-hosted |
| Тесты | terratest внешний | jest/pytest встроенные |
| Secrets | sensitive-переменные | Встроенное шифрование |
| Обучение | Выучить HCL | Уже знаком, если пишешь на языке |
Установка и первый проект
# macOS/Linux
curl -fsSL https://get.pulumi.com | sh
# Проверка
pulumi version
# Авторизация (self-hosted backend на S3)
pulumi login s3://infra-state-bucket?region=eu-central-1
# Новый проект
mkdir office-infra && cd office-infra
pulumi new typescript
# Имя проекта, описание, stack (dev/staging/prod)
Пример: Proxmox-кластер через Pulumi
import * as pulumi from "@pulumi/pulumi";
import * as proxmoxve from "@muhlba91/pulumi-proxmoxve";
const cfg = new pulumi.Config();
const nodes = ["pve01", "pve02", "pve03"];
const vms = nodes.map((node, idx) => new proxmoxve.vm.VirtualMachine(
`web-${node}`, {
nodeName: node,
name: `web-${idx+1}`,
cpu: { cores: 4, sockets: 1 },
memory: { dedicated: 8192 },
disks: [{ datastoreId: "ceph-vm", size: 50, interface: "scsi0" }],
networkDevices: [{ bridge: "vmbr0", vlanId: 200 }],
cloneVmId: 9000,
}
));
export const vmIds = vms.map(v => v.id);
Secrets management
# Шифрование passphrase
pulumi config set --secret dbPassword "SuperSecretPass123"
# В коде
const cfg = new pulumi.Config();
const dbPass = cfg.requireSecret("dbPassword");
# При pulumi up значение расшифровывается только на runtime
CI/CD: GitHub Actions
name: Pulumi
on: [push]
jobs:
preview:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm ci
- uses: pulumi/actions@v6
with:
command: preview
stack-name: dev
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_TOKEN }}
Мини-кейс: автоматизация для fintech-стартапа
Март 2026, клиент — финтех-команда из 14 инженеров, вся разработка на TypeScript. До нас использовали Terraform, но инженеры жаловались: «не можем переиспользовать модули как классы, тесты неудобны, HCL надоел». За 6 недель мигрировали инфраструктуру: 320 ресурсов AWS, Kubernetes-кластер, RDS, 6 микросервисов. Кодовая база уменьшилась на 40% за счёт общих абстракций. Время на onboarding нового инженера — с 2 недель до 3 дней, потому что язык тот же. Стоимость миграции — 380 000 руб.
Типичные грабли
- Async/await в TypeScript — часто забывают await на Output.apply.
- Смешивание resource-creation с внешней логикой — только через pulumi.all() и .apply().
- Тяжёлый npm install в CI — кэшируйте node_modules.
- State в self-hosted S3 без версионирования — риск потерять state. Включайте versioning.
- Наследование от BaseComponent без super() — ошибки регистрации.
Внедрим Pulumi или перенесём с Terraform
Обучим команду, напишем модули под ваш стек, настроим CI/CD и self-hosted backend. Работаем с AWS, Azure, Proxmox, VMware, Kubernetes.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы
- Чем Pulumi отличается от Terraform?
- Pulumi использует обычные языки программирования (TypeScript, Python, Go, C#) вместо HCL. Это даёт циклы, функции, классы и переиспользование кода.
- Где хранится state?
- По умолчанию в Pulumi Cloud с шифрованием. Можно использовать self-hosted backend на S3, Azure Blob, GCS или локально.
- Можно ли мигрировать с Terraform?
- Да, через pulumi convert — импортирует HCL в целевой язык. Для state есть pulumi import.
- Платный ли Pulumi?
- Есть бесплатный тариф Individual до 500 ресурсов, Team от $75/мес. Open-source ядро бесплатно, платный только управляемый backend.
- Подходит ли для on-premise?
- Да, есть провайдеры для Proxmox, VMware, OpenStack. Для локальных задач — self-hosted backend на MinIO.
