3.2 Installing and Configuring the AWS and AWSX Providers

Now that we have our project boilerplate, we will add 2 Pulumi providers:

  1. AWS Classic, which gives us all the fundamental AWS resources, like VPC subnets.
  2. AWSx, which contains higher level Pulumi components, like a full, production-ready VPC that includes subnets, NAT gateways, routing tables, and so on.

At the time of writing, AWSx is in beta and may change before its official 1.0 release. If you encounter any issues with AWSx, please file a GitHub issue.

Step 1 — Install the AWS and AWSx Packages

Pulumi created a virtualenv for us when we created our iac-workshop-ecs project. We’ll need to activate it to install dependencies:

source venv/bin/activate

Add the following content to requirements.txt:

pulumi_aws>=5.0.0,<6.0.0
pulumi_awsx>=1.0.0-beta.9,<2.0.0

Run the following command to install the AWS and AWSx packages:

pip3 install -r requirements.txt

Step 2 — Import the AWS Package

Now that our packages are installed, we need to import them as part of our project.

Add the following to the top of your __main.py__:

import pulumi_aws as aws
import pulumi_awsx as awsx

✅ After this change, your __main__.py should look like this:

"""A Python Pulumi program"""

import pulumi
import pulumi_aws as aws
import pulumi_awsx as awsx

Step 3 — Configure an AWS Region

Configure the AWS region you would like to deploy to, replacing us-east-1 with your AWS region of choice:

pulumi config set aws:region us-east-1

Note that the previous command will create the file Pulumi.dev.yaml which contains the configuration for our dev stack. (Stacks are logical groupings of Pulumi resources.) We will be working with a single Pulumi stack in this tutorial, but we could define additional stacks to deploy our infrastructure to different regions/accounts with different parameters. To learn more about Pulumi stacks, see Stacks in the Pulumi docs.

(Optional) Step 4 — Configure an AWS Profile

If you are using an alternative AWS profile, you can tell Pulumi which to use in one of two ways:

  • Using an environment variable: export AWS_PROFILE=<profile name>
  • Using configuration: pulumi config set aws:profile <profile name>