Pular para conteúdo

Workspaces

Workspaces permitem que um único conjunto de arquivos .tf gerencie múltiplos ambientes isolados, cada um com seu próprio estado.


O Problema que Workspaces Resolvem

Você quer ter infraestrutura de dev e prod usando o mesmo código. Sem workspaces, você precisaria de diretórios separados ou gerenciar estados manualmente.


Como Funcionam

# Listar workspaces (começa com apenas "default")
terraform workspace list

# Criar e mudar para workspace "dev"
terraform workspace new dev

# Criar e mudar para workspace "prod"
terraform workspace new prod

# Ver workspace atual
terraform workspace show

# Mudar de workspace
terraform workspace select dev

Cada workspace tem seu próprio arquivo de estado no backend. No S3, por exemplo:

s3://meu-bucket-state/
├── env:/
│   ├── dev/
│   │   └── terraform.tfstate
│   └── prod/
│       └── terraform.tfstate
└── terraform.tfstate     ← workspace "default"

Usando o Workspace no Código

locals {
  env = terraform.workspace   # "dev", "prod", "default"

  instance_type = {
    dev  = "t3.micro"
    prod = "t3.large"
  }

  instance_count = {
    dev  = 1
    prod = 3
  }
}

resource "aws_instance" "app" {
  count         = local.instance_count[local.env]
  instance_type = local.instance_type[local.env]

  tags = {
    Environment = local.env
  }
}

Limitações dos Workspaces

Workspaces são simples de usar, mas têm limitações:

Limitação Impacto
Mesmo backend para todos os workspaces Se o backend cair, todos os ambientes ficam inacessíveis
Difícil restringir quem pode aplicar em qual workspace Sem RBAC nativo
Estado "invisível" para novos desenvolvedores Requer documentação de qual workspace usar
Não isolam providers ou contas AWS Dev e prod podem compartilhar a mesma conta

Para projetos grandes em que isolamento completo importa (contas AWS separadas, backends separados), prefira diretórios separados por ambiente ao invés de workspaces.


Workspaces vs. Diretórios

Workspaces Diretórios separados
Isolamento de estado Parcial (mesmo backend) Total (backends independentes)
Isolamento de conta AWS ✅ (provider por diretório)
Simplicidade Alta Baixa (mais repetição)
Escalabilidade para times grandes Limitada Alta
Quando usar Projetos pequenos/médios Produção crítica, múltiplas contas

Próximo

➡️ Segurança