0 XP
Módulo 7 · Terraform e Ansible

Backend remoto, lock e separação de ambientes

Avançado 45 min+25 XPTerraformS3DynamoDB

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.tf

Nota 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 orfao

Backend 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.tfvars

Por 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. 1. Qual a função do lock no backend remoto?

  2. 2. O que acontece sem lock com dois applies ao mesmo tempo?

  3. 3. Forma mais segura de isolar prod?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima