Terraform creates a default workspace whenever
terraform init is run.
Use cases for workspaces
terraform workspaces helps you to keep separate local or remote states within the same directory for specific resources or multiple environments that you want to manage.
A typical pattern used "without" workspaces is to create multiple working directories to separate configuration or environments. This results in complexity, dealing with repetition throughout multiple directories where state files, caches and modules exist.
terraform workspaces for state management can help keep Terraform code clean by reusing the same HCL from a single directory.
Managing Terraform workspaces
terraform workspace command will be used to create and manage workspaces.
. ├── infrastructure │ ├── main.tf │ ├── outputs.tf │ └── variables.tf
Below are some the workspace commands:
terraform workspace new
From a dedicated working directory we will create a workspace layout by executing the workspace new command. Consequently, this will create development, production and staging workspaces.
terraform workspace new dev terraform workspace new prod terraform workspace new stage
terraform workspace list
You may have noticed that creating a new workspace switched you directly into that created workspaces context. You can view the workspaces in your working directory with the workspace list command.
terraform workspace list default dev prod * stage
* represents the current workspace context.
terraform workspace select
To switch workspaces use the
terraform workspace select command.
Switch to the dev workspace:
terraform workspace select dev Switched to workspace "dev".
terraform workspace show
terraform workspace show will display the currently selected workspace.
terraform workspace show dev
terraform workspace delete
terraform workspace delete removes an existing workspace.
terraform workspace delete stage Deleted workspace "stage"!
Terraform will not allow you to delete a workspace if it contains active state or is your current workspace. If you have infrastructure deployed you will get a warning when attempting to delete that workspace. If you want to leave your infrastructure in place and delete the workspace you can use the -force flag.
terraform workspace delete dev Workspace "dev" is not empty. Deleting "dev" can result in dangling resources: resources that exist but are no longer manageable by Terraform. Please destroy these resources first. If you want to delete this workspace anyway and risk dangling resources, use the '-force' flag.