Using multiple environments AWS CLI and profiles with CDK
So far we've been using the default cdk deploy command that uses the default AWS CLI profile that you have configured. However, AWS CLI and AWS CDK both supports using multiple profiles and environments. This is useful when you have multiple AWS accounts and you want to deploy your CDK stacks to different accounts.
Environments
When we intantiate a stack in CDK, we can pass an env parameter that specifies the environment in which the stack will be deployed. This environment contains the AWS account and region where the stack will be deployed.
E.g., working off a new CDK app, we typically have the following code in the app.py file:
import aws_cdk as cdk
from cdk_app.my_stack import MyStack
app = cdk.App()
my_stack = MyStack(
app,
"MyStack",
) #👈🏽 No env define
app.synth()
In the above code, we are not specifying the environment in which the stack will be deployed. This means that the stack will be deployed to the default AWS CLI profile that you have configured.
To specify the environment, we can pass an env parameter to the MyStack constructor:
import aws_cdk as cdk
from cdk_app.my_stack import MyStack
env = {
"account": "123456789012",
"region": "us-east-1",
} #👈🏽 Define the environment
app = cdk.App()
my_stack = MyStack(
app,
"MyStack",
env=env,
)
app.synth()
In the above code, we are specifying the environment in which the stack will be deployed. The env parameter is a dictionary that contains the account and region keys. The account key specifies the AWS account where the stack will be deployed, and the region key specifies the AWS region where the stack will be deployed.
Using multiple profiles
To use multiple profiles, you can utilise `--profile`` flag to configure and use a different profile.
E.g. while configuring a new profile:
aws configure --profile my_profile
To use this profile with CDK, you can pass the --profile flag to the cdk deploy command:
cdk deploy --profile my_profile
This will deploy the stack using the my_profile profile that you have configured.