1001Ferramentas
🔱Geradores

Gerador de Pulumi resource (TS)

Gera código TypeScript de um recurso Pulumi (AWS/AZURE/GCP) com nome e propriedades. Pronto para colar em index.ts.


  

Resources Pulumi a fundo: IaC em linguagens reais, stacks, outputs e components

Pulumi é uma plataforma de Infrastructure as Code fundada em 2017 por Joe Duffy (que antes liderava as linguagens .NET na Microsoft). A aposta é o oposto do Terraform: em vez de inventar uma DSL de configuração, você descreve infraestrutura em linguagens de propósito geral de verdade — TypeScript, JavaScript, Python, Go, C#/.NET, Java ou YAML — e um runtime fino traduz o grafo de recursos que seu código constrói em chamadas reais à nuvem. Você ganha de graça loops, condicionais, abstrações, classes, async, tipos, refactor de IDE e o gerenciador de pacotes preferido.

O vocabulário mapeia bem para o Terraform: project (diretório com Pulumi.yaml), stack (instância do project — dev, staging, prod, cada uma com sua config e state), resource (coisa a criar), provider (plugin por nuvem). O runtime e a CLI são open-source; o state mora num backend — Pulumi Cloud (grátis para pessoa física, pago para times) ou self-hosted em S3/GCS/Azure Blob.

Sintaxe do resource (TypeScript)

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

const cfg = new pulumi.Config();
const env = pulumi.getStack();

const bucket = new aws.s3.Bucket("meu-bucket", {
  acl: "private",
  versioning: { enabled: true },
  tags: { Environment: env, ManagedBy: "pulumi" },
});

export const bucketName = bucket.id;
export const bucketArn  = bucket.arn;

A primeira string ("meu-bucket") é o nome lógico que o Pulumi rastreia em state. O objeto com acl, versioning, tags são os args do recurso — mesmo formato do provider subjacente. Os exports viram outputs que dá para ler com pulumi stack output.

Outputs e a natureza assíncrona dos recursos

Qualquer valor que o Pulumi só conhece depois da resposta da nuvem (um ARN, um IP, um ID gerado) é embalado em Output<T>. Não dá para usar como string crua — você compõe com .apply(v => ...) ou templates via pulumi.interpolate:

const url = pulumi.interpolate`https://${bucket.bucketRegionalDomainName}`;
const policy = bucket.arn.apply(arn => JSON.stringify({
  Version: "2012-10-17",
  Statement: [{ Effect: "Allow", Resource: arn, Action: "s3:GetObject" }]
}));

Outputs preservam o rastreamento de dependência — o Pulumi não tenta criar a policy antes do bucket existir, porque a policy depende do Output do bucket.

Components e crosswalk

Component resources são classes que encapsulam vários recursos primitivos atrás de uma API limpa — a resposta do Pulumi aos modules do Terraform, mas usando OOP nativo da linguagem. Você publica como pacote npm/PyPI e consome como biblioteca. O Crosswalk (@pulumi/awsx, @pulumi/eks) traz components de boas práticas para padrões comuns: VPC com defaults sensatos, cluster EKS com managed node groups, serviço ECS atrás de um ALB.

State, stacks e segredos

  • State é por stack e mora no backend escolhido no pulumi login.
  • Pulumi Cloud tem free tier para pessoa física (200 recursos no máximo); o pago para times adiciona RBAC, audit log, SSO, deployments.
  • Self-host em s3://bucket, gs://bucket, azblob://container ou arquivo local (não recomendado para times).
  • Segredos são criptografados em state nativamente (pulumi config set --secret) — sem plugin.
  • Configuração é por stack: Pulumi.dev.yaml, Pulumi.prod.yaml.

Workflow e CI

  • pulumi stack init dev — cria um stack novo.
  • pulumi preview — equivalente ao terraform plan.
  • pulumi up — aplica mudanças (com confirmação ou --yes em CI).
  • pulumi destroy — apaga tudo no stack.
  • pulumi import — coloca um recurso já existente na nuvem sob gestão do Pulumi.
  • Pulumi Deployments roda up a partir de um push no Git sem precisar do seu CI runner.

FAQ

Posso usar Pulumi junto com Terraform existente? Sim. Use tf2pulumi para traduzir HCL para código Pulumi, ou use o Terraform Bridge para consumir módulos Terraform a partir do Pulumi. State é incompatível (serialização diferente), mas recursos podem ser importados com pulumi import.

Pulumi vs Terraform — qual escolher? Terraform/OpenTofu tem o maior ecossistema de providers e a maior biblioteca de módulos existente; o Pulumi é mais agradável quando o time escreve muito código (loops, abstrações, tipos, ajuda da IDE). O Pulumi também trata segredos nativamente. Vá de Pulumi quando boa parte do time está confortável com TS/Python; vá de Terraform quando quer o caminho mais batido.

Pulumi vs AWS CDK? O CDK é só AWS (existe CDK for Terraform como ponte multi-cloud). O Pulumi é multi-cloud desde o dia zero com o mesmo formato de SDK. Se você só roda em AWS, o CDK é excelente e gratuito; se você atravessa nuvens, o Pulumi se encaixa mais natural.

O preço é justo? O Pulumi Cloud é grátis para pessoa física até 200 recursos, o que cobre a maioria dos projetos pessoais. Os planos Team e Enterprise são por uso; backends self-hosted eliminam esse custo trocando pela responsabilidade de rodar seu próprio state store e abrir mão da UI.

Como evitar vazar segredos em state? Marque com pulumi config set --secret; eles são criptografados com a passphrase do stack ou chave KMS e ficam criptografados em state. Evite imprimir via console.log — use pulumi.secret() em outputs derivados para manter a marca de segredo.

Ferramentas Relacionadas