Backend remoto, lock e separação de ambientes
Objetivos desta aula
- Configurar backend S3 com lock
- Separar ambientes com segurança
- Proteger o state
Assim que uma segunda pessoa toca a infraestrutura, o state precisa sair da sua máquina. O padrão na AWS é bucket S3 com versionamento e criptografia, mais lock (DynamoDB nas versões clássicas, ou lockfile S3 nas mais recentes). Lock impede execuções concorrentes, e versionamento permite recuperar um state corrompido.
Para ambientes, dois caminhos: workspaces (mais simples, mesmo backend, chaves diferentes) ou diretórios por ambiente com tfvars próprios (mais explícito e mais comum em produção, porque permite permissões diferentes por conta e evita apply acidental no ambiente errado).
Independentemente da escolha, rode plan automaticamente em cada PR de infraestrutura e exija aprovação para apply em produção. Infraestrutura merece o mesmo rigor de revisão que código de aplicação — na prática, mais.
1. Por que backend remoto
State local some com o notebook e impede trabalho em equipe. Backend S3 guarda o state versionado e criptografado, acessível a quem tem permissão.
2. Lock
Dois applies simultâneos corrompem o state. Desde o Terraform 1.10, o backend S3 faz lock nativo com use_lockfile = true; antes era usada uma tabela DynamoDB.
3. Separando ambientes
Prefira diretórios separados (envs/dev, envs/prod) com states e contas distintos a workspaces: o isolamento é explícito e um erro em dev não toca prod.
4. Lendo saídas de outro state
terraform_remote_state ou, melhor, parâmetros no SSM permitem que o stack da aplicação leia o ID da VPC criada pelo stack de rede.
5. Checagem final
Você deve configurar backend S3 com lock e mostrar que um segundo apply simultâneo é bloqueado.
Na prática
Backend com lock e estrutura por ambiente
hcl
# backend.tf
terraform {
backend "s3" {
bucket = "cloudshop-tfstate"
key = "dev/infra.tfstate"
region = "us-east-1"
encrypt = true
use_lockfile = true # lock nativo no S3 (Terraform >= 1.10)
}
}
# estrutura de diretorios
# infra/
# modules/network/
# modules/app/
# envs/dev/main.tf -> module "network" { source = "../../modules/network" }
# envs/staging/main.tfNota de segurança: O bucket de state deve ter versionamento, bloqueio de acesso público e política restrita às roles de deploy.
Operações com state
bash
terraform init -reconfigure
terraform workspace list
terraform state pull > backup-state.json # copia de seguranca antes de operar
terraform state mv aws_instance.old aws_instance.api
terraform import aws_s3_bucket.assets cloudshop-assets
terraform force-unlock <LOCK_ID> # somente se o lock ficou orfaoBackend S3 com lock nativo
hcl
terraform {
backend "s3" {
bucket = "cloudshop-tfstate-123456789012"
key = "envs/dev/network.tfstate"
region = "us-east-1"
encrypt = true
use_lockfile = true # lock sem DynamoDB (Terraform >= 1.10)
}
}Estrutura por ambiente
text
infra/
modules/network/ modules/app/
envs/dev/ main.tf backend.tf dev.tfvars
envs/staging/ main.tf backend.tf staging.tfvars
envs/prod/ main.tf backend.tf prod.tfvarsPor que isso importa
State compartilhado sem lock é a receita comprovada de infraestrutura corrompida em equipe.
Erro comum
Comitar terraform.tfstate no Git — e com ele senhas e endpoints internos.
Dica de produção
Contas AWS separadas por ambiente é a isolação mais forte; dentro da mesma conta, use roles distintas por ambiente.
Alerta de segurança
force-unlock sem confirmar que ninguém está aplicando pode corromper o state de vez.
Pergunta de entrevista
Como você organizaria Terraform para três ambientes com times diferentes?
Glossário
- backend
- Onde o Terraform armazena o state e coordena o lock.
- workspace
- Instâncias separadas de state dentro da mesma configuração.
- backend
- Onde o Terraform guarda o state e faz lock.
- state lock
- Bloqueio que impede duas execuções simultâneas sobre o mesmo state.
- workspace
- Múltiplos states para a mesma configuração.
Conexão com o CloudShop
Mover o state do CloudShop para S3 com lock e criar os ambientes dev e staging.
Quiz da aula
1. Qual a função do lock no backend remoto?
2. O que acontece sem lock com dois applies ao mesmo tempo?
3. Forma mais segura de isolar prod?
Minhas anotações
Salvo automaticamente neste navegador.