Pular para o conteúdo principal

Workspaces no Terraform

Introdução​

Os workspaces no Terraform permitem que você utilize o mesmo conjunto de código para gerenciar vários ambientes de forma isolada, como dev, hml e prod. Cada workspace possui seu próprio estado independente, o que evita conflitos entre ambientes.

Essa abordagem é muito últil quando você quer reaproveitar a mesma infraestrutura, mas separando os dados e aplicações por ambiente.

O que é um Workspace​

Um workspace é uma instância do estado do Terraform. Por padrão, você está no workspace default. Ao criar novos workspaces, o Terraform cria um estado separado para cada um, permitindo gerenciar recursos distintos com o mesmo código.

Explicação técnica​

  • Cada workspace é associado a um arquivo de estado independente
  • O nome do workspace pode ser usado dentro do código com terraform.workspace
  • Ideal para projetos pequenos ou médios com ambientes bem separados
  • Não é substituto de repositórios ou pipelines separados, mas é uma opção válida para organizar estados

Comandos​

terraform workspace list
terraform workspace new dev
terraform workspace new hml
terraform workspace new prod

terraform workspace select dev
terraform plan
terraform apply

Exemplo prático​

main.tf​

variable "location" {
default = "eastus"
}

provider "azurerm" {
features {}
}

resource "azurerm_resource_group" "rg" {
name = "rg-${terraform.workspace}"
location = var.location
}

Etapas no terminal​

terraform init
terraform workspace new dev
terraform apply

terraform workspace new prod
terraform apply

Output esperado​

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:
azurerm_resource_group.rg:
name = "rg-dev"
location = "eastus"

Ao mudar para o workspace prod:

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:
azurerm_resource_group.rg:
name = "rg-prod"
location = "eastus"

Melhores práticas​

  • Use nomes consistentes para ambientes (dev, hml, prod)
  • Sempre verifique o workspace ativo com terraform workspace show
  • Combine com terraform.workspace no código para diferenciar recursos
  • Não use workspaces para isolação de times ou projetos distintos
  • Evite misturar com backends que já segmentam por ambiente (como buckets separados)

Workspaces são ótimos aliados quando você precisa reaproveitar código com ambientes diferentes sem complicar a estrutura do projeto.