published: 30th of September 2021
Pulumi is an infrastructure as code tool that helps you build and manage environments such as AWS, Azure and GCP with the programming languages you already know.
In this post, I will show you how to get up and running with Pulumi.
The following software was used in this post.
Pulumi allows you to build infrastructure with the programming languages you know. Unlike other tools that have a DSL, Pulumi instructions are written in a choice of supported programming languages. Which, at the time of writing are as follows:
Ensure that you have a supported runtime installed. For this post, I will be using Node.js with Typescript. Instructions to install Node.js on Ubuntu 2004 can be found here.
Pulumi requires access to credentials with sufficient permissions to make changes to your infrastructure. I will be using AWS for this post. For instructions on installing the AWS CLI and setting up your credentials see this post.
Head here to create a Pulumi account. The account is free to use for indiviuals and is used as a storage backend for your Pulumi projects state data.
An access token is required to login and use your Pulumi account. Create a token here.
The Pulumi application is installed in your $PATH via an installer script.
curl -fsSL https://get.pulumi.com | sh
# Output
=== Installing Pulumi v3.13.2 ===
+ Downloading https://get.pulumi.com/releases/sdk/pulumi-v3.13.2-linux-x64.tar.gz...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 61.0M 100 61.0M 0 0 5308k 0 0:00:11 0:00:11 --:--:-- 5597k
+ Extracting to /home/bradmin/.pulumi/bin
+ Adding $HOME/.pulumi/bin to $PATH in /home/bradmin/.zshrc
=== Pulumi is now installed! 🍹 ===
+ Please restart your shell or add /home/bradmin/.pulumi/bin to your $PATH
+ Get started with Pulumi: https://www.pulumi.com/docs/quickstart
Once Pulumi is installed, restart your shell environment and confirm you have access to the pulumi command.
# In a new shell
pulumi version
# Output
v3.13.2
Create a new directory for your project and use the pulumi login command to login to your Pulumi account. You will need to enter the access token created in the previous step.
mkdir testing123 && cd testing123
pulumi login
# Output
Manage your Pulumi stacks by logging in.
Run `pulumi login --help` for alternative login options.
Enter your access token from https://app.pulumi.com/account/tokens
or hit to log in using your browser :
Initialise a new AWS project that uses the Typescript language with the pulumi new aws-typescript command and follow the prompts.
pulumi new aws-typescript
# Output
This command will walk you through creating a new Pulumi project.
Enter a value or leave blank to accept the (default), and press .
Press ^C at any time to quit.
project name: (testing123)
project description: (A minimal AWS TypeScript Pulumi program)
Created project 'testing123'
Please enter your desired stack name.
To create a stack in an organization, use the format / (e.g. `acmecorp/dev`).
stack name: (dev)
Created stack 'dev'
aws:region: The AWS region to deploy into: (us-east-1)
Saved config
Installing dependencies...
added 125 packages, and audited 126 packages in 26s
31 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Finished installing dependencies
Your new project is ready to go!
To perform an initial deployment, run 'pulumi up'
This will create a Stack which is an isolated, independently configurable instance of a Pulumi program. This stack belongs to the dev environment.
The following files and folders were created which gets a minimal config setup with the required dependencies.
Looking at the index.ts file you can see that it is setup to create an S3 bucket named my-bucket .
// index.ts
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";
// Create an AWS resource (S3 Bucket)
const bucket = new aws.s3.Bucket("my-bucket");
// Export the name of the bucket
export const bucketName = bucket.id;
With this minimal config we can deploy the project with the pulumi up command and create an S3 bucket.
pulumi up
# Output
Previewing update (dev)
View Live: https://app.pulumi.com/bwks/testing123/dev/previews/8c12d94d-1c88-43c6-b989-a0ebd2b4c9db
Type Name Plan
+ pulumi:pulumi:Stack testing123-dev create
+ └─ aws:s3:Bucket my-bucket create
Resources:
+ 2 to create
Do you want to perform this update? yes
Updating (dev)
View Live: https://app.pulumi.com/bwks/testing123/dev/updates/1
Type Name Status
+ pulumi:pulumi:Stack testing123-dev created
+ └─ aws:s3:Bucket my-bucket created
Outputs:
bucketName: "my-bucket-c9ab4c7"
Resources:
+ 2 created
Duration: 20s
Confirm the bucket was created with the aws s3 ls command.
aws s3 ls
# Output
2021-10-02 20:46:30 my-bucket-c9ab4c7
To remove all the resources in this project that are managed by pulumi, use the pulumi destroy command.
pulumi destroy
# Output
Previewing destroy (dev)
View Live: https://app.pulumi.com/bwks/testing123/dev/previews/1ab42c39-a78f-4d6a-a68d-6ed6d66e1d5e
Type Name Plan
- pulumi:pulumi:Stack testing123-dev delete
- └─ aws:s3:Bucket my-bucket delete
Outputs:
- bucketName: "my-bucket-c9ab4c7"
Resources:
- 2 to delete
Do you want to perform this destroy? yes
Destroying (dev)
View Live: https://app.pulumi.com/bwks/testing123/dev/updates/2
Type Name Status
- pulumi:pulumi:Stack testing123-dev deleted
- └─ aws:s3:Bucket my-bucket deleted
Outputs:
- bucketName: "my-bucket-c9ab4c7"
Resources:
- 2 deleted
Duration: 6s
The resources in the stack have been deleted, but the history and configuration associated with the stack are still maintained.
If you want to remove the stack completely, run 'pulumi stack rm dev'.
This deletes the AWS resouces, but it does not remove the Stack from being managed by pulumi. To delete the Stack use the pulumi stack rm command.
pulumi stack rm
# Output
This will permanently remove the 'dev' stack!
Please confirm that this is what you'd like to do by typing ("dev"): dev
Stack 'dev' has been removed!
You can confirm that the stack is removed with the pulumi stack ls command.
pulumi stack ls
# Output
NAME LAST UPDATE RESOURCE COUNT URL
In this post, we installed and configured Pulumi to manage our AWS environemnt using the Typescript provider. We created a stack which was used to deploy an S3 bucket to our AWS account. Finally, we destroyed the AWS resources and removed the stack from Pulumi management.
https://www.pulumi.com/docs/get-started/aws/begin/