· 16 мин чтения

Pulumi: Infrastructure as Code на языках программирования

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

АспектTerraformPulumi
ЯзыкHCLTS/Python/Go/C#
Циклы и логикаcount, for_eachfor, if, функции
StateЛокальный + S3Pulumi Cloud / self-hosted
Тестыterratest внешнийjest/pytest встроенные
Secretssensitive-переменныеВстроенное шифрование
ОбучениеВыучить 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 руб.

Типичные грабли

Внедрим 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.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.