Pulumi — IaC using programming languages (TypeScript, Python, Go, C#).
Advantages over Terraform:
TypeScript example:
1import * as aws from "@pulumi/aws";2import * as pulumi from "@pulumi/pulumi";34const vpc = new aws.ec2.Vpc("main", {5 cidrBlock: "10.0.0.0/16",6 tags: { Name: "production-vpc" },7});89const subnet = new aws.ec2.Subnet("public", {10 vpcId: vpc.id,11 cidrBlock: "10.0.1.0/24",12 availabilityZone: "us-east-1a",13 mapPublicIpOnLaunch: true,14});1516const instance = new aws.ec2.Instance("web", {17 ami: "ami-xxx",18 instanceType: "t3.micro",19 subnetId: subnet.id,20 tags: { Name: "web-server" },21});2223export const instanceIp = instance.publicIp;
Dynamic logic:
1const env = pulumi.getStack();2const instanceType = env === "production" ? "t3.large" : "t3.micro";34const instances = [];5for (let i = 0; i < (env === "production" ? 3 : 1); i++) {6 instances.push(new aws.ec2.Instance(`web-${i}`, {7 ami: "ami-xxx",8 instanceType,9 }));10}
CLI:
1pulumi up # apply2pulumi preview # plan3pulumi destroy # destroy4pulumi stack output # outputs
Pulumi vs Terraform: Pulumi for complex logic (conditions, loops). Terraform simpler for simple configurations.