🌐 Pulumi

Инфраструктура как код на обычных языках: проекты, стеки, ресурсы и команды.

Шпаргалки · Инфраструктура · #pulumi #iac

Идея

Описываете инфраструктуру на TypeScript, Python, Go, C#, Java или YAML. Состояние хранится в Pulumi Cloud или своём backend (S3, локально).

Команды

pulumi new aws-typescript      # проект из шаблона
pulumi stack init dev          # стек (окружение)
pulumi config set aws:region eu-central-1
pulumi config set --secret dbPassword s3cret
pulumi preview                 # план изменений
pulumi up                      # применить
pulumi stack output
pulumi destroy
pulumi stack ls / select
pulumi login --local           # хранить состояние локально

Пример (TypeScript)

import * as aws from "@pulumi/aws";
import * as pulumi from "@pulumi/pulumi";

const cfg = new pulumi.Config();
const env = cfg.require("env");

const bucket = new aws.s3.Bucket("logs", {
  tags: { Env: env },
});

export const bucketName = bucket.id;

Понятия

Термин Смысл
Project папка с Pulumi.yaml
Stack экземпляр проекта: dev, stage, prod
Resource объект инфраструктуры
Output значение, известное после создания (pulumi.Output<T>)
Config настройки и секреты стека
Component собственная абстракция из нескольких ресурсов

Приёмы

  • Значения-обещания читайте через .apply(v => ...) или pulumi.interpolate.
  • Секреты шифруются в конфиге и в состоянии.
  • Импорт существующего: pulumi import.
  • Тестирование: обычные unit-тесты на языке проекта, плюс проверки политик (CrossGuard).

Terraform или Pulumi

Terraform: HCL, огромная экосистема, простая модель. Pulumi: циклы, функции и тесты настоящего языка.