Next-levelinfrastructure as code for humans and agents.
Ship cloud infrastructure at the speed of AI with languages and tools that stay out of your way.
The complete platform for infrastructure teams
From open source IaC to AI-driven workflows, Pulumi gives platform teams all they need to build and scale cloud infrastructure.
A unified platform built on real programming languages that covers the full infrastructure stack, so your team can focus on shipping.
Real languages
Write infrastructure code in TypeScript, Python, Go, C#, or Java — the same languages your team already uses to build software.
Secure by default
Meet compliance requirements with encrypted secrets, dynamic credentials, and full audit trails. Pulumi is SOC 2 Type II certified.
AI for infrastructure
Generate, debug, and refactor your infrastructure code with built-in best practices and full organizational context.
Take advantage of your language of choice to build reusable components and share them with package managers like npm, PyPI, and NuGet. Get all of the benefits of your IDE, including type checking, code navigation, inline docs, testing, and more.
The first AI agent built for infrastructure. Pulumi Neo understands your code and organizational context, respects your policies, and executes complex tasks end-to-end — with or without a human in the loop.
A single interface across all of your secrets. Pull in Vault, AWS Secrets Manager, Azure Key Vault, and more, plus support for short-lived creds with OIDC.
Use natural language queries to find managed and unmanaged resources — even across clouds. Enforce policies, track compliance in real-time, and find vulnerabilities before they become incidents.
Define golden paths for approved infrastructure with configurable components and customizable templates that enable developers while keeping platform teams in control.
See how engineering teams use Pulumi to ship infrastructure faster, improve security, and reduce cloud complexity.
New Release:Building for the Agentic Era
index.ts
TypeScript
- TypeScript
- Python
- Go
- C#
- Java
- YAML
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";
const vpc = new awsx.ec2.Vpc("vpc");
const azs = await aws.getAvailabilityZones({ state: "available" });
const subnets = azs.names.map((az, i) =>
new aws.ec2.Subnet(`subnet-${i}`, {
vpcId: vpc.vpcId,
cidrBlock: `10.0.${i}.0/24`,
availabilityZone: az,
})
);
Copy
import pulumi_aws as aws
import pulumi_awsx as awsx
azs = aws.get_availability_zones(state="available")
vpc = awsx.ec2.Vpc("vpc")
for i, az in enumerate(azs.names):
aws.ec2.Subnet(f"subnet-{i}",
vpc_id=vpc.vpc_id,
cidr_block=f"10.0.{i}.0/24",
availability_zone=az,
)
Copy
package main
import (
"fmt"
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws"
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ec2"
awsx "github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/ec2"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
vpc, _ := awsx.NewVpc(ctx, "vpc", nil)
azs, _ := aws.GetAvailabilityZones(ctx, &aws.GetAvailabilityZonesArgs{State: pulumi.StringRef("available")}, nil)
for i, az := range azs.Names {
ec2.NewSubnet(ctx, fmt.Sprintf("subnet-%d", i), &ec2.SubnetArgs{
VpcId: vpc.VpcId,
CidrBlock: pulumi.String(fmt.Sprintf("10.0.%d.0/24", i)),
AvailabilityZone: pulumi.String(az),
})
}
return nil
})
}
Copy
using System.Linq;
using Pulumi;
using Pulumi.Aws;
using Pulumi.Aws.Ec2;
return await Deployment.RunAsync(() =>
{
var vpc = new Pulumi.Awsx.Ec2.Vpc("vpc");
var azs = GetAvailabilityZones.Invoke(new() { State = "available" });
var subnets = azs.Apply(result =>
result.Names.Select((az, i) =>
new Subnet($"subnet-{i}", new()
{
VpcId = vpc.VpcId,
CidrBlock = $"10.0.{i}.0/24",
AvailabilityZone = az,
})
).ToList()
);
});
Copy
package myproject;
import com.pulumi.Pulumi;
import com.pulumi.aws.ec2.Vpc;
import com.pulumi.aws.ec2.Subnet;
import com.pulumi.aws.ec2.SubnetArgs;
import com.pulumi.aws.AwsFunctions;
import com.pulumi.aws.inputs.GetAvailabilityZonesPlainArgs;
public class App {
public static void main(String[] args) {
Pulumi.run(ctx -> {
var vpc = new Vpc("vpc");
var azs = AwsFunctions.getAvailabilityZonesPlain(
GetAvailabilityZonesPlainArgs.builder()
.state("available")
.build()
).join();
var names = azs.names();
for (int i = 0; i < names.size(); i++) {
new Subnet("subnet-" + i, SubnetArgs.builder()
.vpcId(vpc.id())
.cidrBlock("10.0." + i + ".0/24")
.availabilityZone(names.get(i))
.build());
}
});
}
}
Copy
variables:
azs:
fn::invoke:
function: aws:getAvailabilityZones
arguments:
state: available
resources:
vpc:
type: awsx:ec2:Vpc
subnet-0:
type: aws:ec2:Subnet
properties:
vpcId: ${vpc.vpcId}
cidrBlock: "10.0.0.0/24"
availabilityZone: ${azs.names[0]}
subnet-1:
type: aws:ec2:Subnet
properties:
vpcId: ${vpc.vpcId}
cidrBlock: "10.0.1.0/24"
availabilityZone: ${azs.names[1]}
Copy
Trusted by over 4,000 innovative companies
"Pulumi helped our team to ship a new product faster. We needed one tool to set up and manage multi-cloud, multi-region Kubernetes clusters that infrastructure and applications teams could use collaboratively."
Justin Fitzhugh
VP of Cloud Platform Engineering
Don't just write IaC — compose it
Meet Neo, your AI platform engineer
Centralized configuration & secrets
Insights & governance
Learn more about insights & governance
Self-service infrastructure
Trusted by 4,000+ innovative companies
\ \
“There’s no question that, if we had gone down the traditional infrastructure automation route, it would have taken us a week or a week and a half to do one deployment of the cluster […] When we demonstrated to people that what used to take a week and a half now, with Pulumi, took under a day, they were shocked.”\ \ Raman Hariharan, Director of Cloud Platform Engineering, Snowflake](/content/case-studies/snowflake/index.html)
\ \
“The infrastructure team acts as groundkeepers of our Pulumi practices, not gatekeepers, but promoters for the entire org.”\ \ Paul Cioanca, Platform Engineer at Supabase](/content/case-studies/supabase/index.html)
\ \
“Pulumi supercharged our infrastructure team by helping us create reusable building blocks that developers can leverage to provision new resources and enforce organizational policies for logging, permissions, resource tagging, and security."\ \ Igor Shapiro, Principal Engineer, Lemonade](/content/case-studies/lemonade/index.html)
\ \
“Terraform relies on HCL and lacks support for concepts like classes, objects and inheritance.\ An equivalent deployment would take more lines of code while yielding IaC that is less reusable.”](/content/case-studies/unity/index.html)
Open source. Built by engineers for engineers.
Join the Pulumi community, and let’s build together.
I love @PulumiCorp so much because it is like 50% of the reason why we dared to build https://planton.cloud. An equivalent of 50K lines of declarative infra code has been put behind APIs to support the features on the platform with https://www.pulumi.com/docs/using-pulumi/automation-api/
There is no way around the fact that devops is complicated but @PulumiCorp is a game changer for me. Blows away CloudForamtion, TerraForm, CDK, etc.
The developer experience of Pulumi is just sublime. As a prior Terraform user, the grass is substantially greener on this side. I'm so glad I made the switch two years back. Using Terraform for my current use case would be a massive downgrade.
Give Pulumi a shot and you will never look back @PulumiCorp
Deploying cloud resources using @PulumiCorp is just amazing. Why would anybody bother with JSON, YAML or some other DSL?
Been using Pulumi with Typescript for a IaaC managing k8s and stateful databases. Don't see myself going back to using terraform after this.
our team at @devseed is now gravitating toward using https://pulumi.com/docs/iac/comparisons/terraform/ instead of terraform because it's all in python so it is easier to onboard new people to the tool and makes it easier to manage the same infra definition in different test, staging, and deploy envs.
It wouldn't have been possible to build Sparky without @PulumiCorp. Shout out to the team and community for helping us get up and running!
New gig uses @PulumiCorp to manage AWS infra. Initially I was skeptical and was tempted to go back to Terraform, but after using pulumi imports and discovering the ability to write tests easily, I'm a convert. (1/4)
There is no way around the fact that devops is complicated but @PulumiCorp is a game changer for me. Blows away CloudForamtion, TerraForm, CDK, etc.
Give Pulumi a shot and you will never look back @PulumiCorp
Deploying cloud resources using @PulumiCorp is just amazing. Why would anybody bother with JSON, YAML or some other DSL?
There is no way around the fact that devops is complicated but @PulumiCorp is a game changer for me. Blows away CloudForamtion, TerraForm, CDK, etc.
Give Pulumi a shot and you will never look back @PulumiCorp
Deploying cloud resources using @PulumiCorp is just amazing. Why would anybody bother with JSON, YAML or some other DSL?
There is no way around the fact that devops is complicated but @PulumiCorp is a game changer for me. Blows away CloudForamtion, TerraForm, CDK, etc.
It wouldn't have been possible to build Sparky without @PulumiCorp. Shout out to the team and community for helping us get up and running!
It wouldn't have been possible to build Sparky without @PulumiCorp. Shout out to the team and community for helping us get up and running!
Give Pulumi a shot and you will never look back @PulumiCorp
Deploying cloud resources using @PulumiCorp is just amazing. Why would anybody bother with JSON, YAML or some other DSL?
There is no way around the fact that devops is complicated but @PulumiCorp is a game changer for me. Blows away CloudForamtion, TerraForm, CDK, etc.
Give Pulumi a shot and you will never look back @PulumiCorp
Deploying cloud resources using @PulumiCorp is just amazing. Why would anybody bother with JSON, YAML or some other DSL?
There is no way around the fact that devops is complicated but @PulumiCorp is a game changer for me. Blows away CloudForamtion, TerraForm, CDK, etc.
Give Pulumi a shot and you will never look back @PulumiCorp
It wouldn't have been possible to build Sparky without @PulumiCorp. Shout out to the team and community for helping us get up and running!
It wouldn't have been possible to build Sparky without @PulumiCorp. Shout out to the team and community for helping us get up and running!
It wouldn't have been possible to build Sparky without @PulumiCorp. Shout out to the team and community for helping us get up and running!