Terraform Workspaces
- Generally when we write terraform configuration, we would like to create multiple environments such as
- Developer
- System Test
- Performance Test
- Staging
- Production
- For all the environments our infrastructure is same, the arguments might differ, There might be some additional resources in some environments
- To handle this we would not creat multiple copies of infrastructure and create different backend configurations.
- To deal with single template and multi environments terraform introduced a concept called workspaces. Refer Here for the official docs
- Now lets explore terraform workspace cli
- Lets try to create two workspaces
- ST => System Test
- UAT => Staging
- Refer Here for some of the changes done
- Refer Here for the fixes done to the output variable
- Select the current workspace as ST
terraform workspace select ST
terraform apply -var-file="env/ST.tfvars"
- Now lets select the current workspace as UAT
terraform workspace select UAT
terraform apply -var-file="env/UAT.tfvars"
- Refer Here for some of the changes done to accomodate multi environments
- To set the current workspace we are using
terraform workspace select
, the other way of doing SETTF_WORKSPACE
to the active environment - Other environmental variables of terraform Refer Here
- Exercise: Try to create all the tag with with
env-<name>
tags = {
Name = format("%s-WebSg", terraform.workspace),
Env = terraform.workspace
}
- From CI/CD Engines when we need manage Terraform infra creation. From the Jenkins/Azure DevOps pipelines, You will have an agent/node where terraform is installed and credentials configured/passed
# if the terraform code is available in some git try to configure the git to clone
terraform init
terraform workspace select <build-parameter>
terraform apply -var-file=<varfile> -auto-approve
- Next Steps:
- Reusable Templates => Modules => Registry
- Creating a Module and using community module