0 XP

DEVOPSQUEST

Minha Trilha
Módulo 7 · Terraform e Ansible

State remoto: migração, contenção de concorrência e recuperação

Avançado 55 min+25 XPTerraformAmazon S3AWS CLI

Objetivos desta aula

  • Migrar state local sem perder vínculos
  • Configurar lock nativo no S3
  • Distinguir permissões do state e do lockfile
  • Investigar locks antes de removê-los
  • Planejar recuperação com versionamento

O backend já foi apresentado; esta aula aprofunda operação segura do state. Migrar não é simplesmente copiar um arquivo para S3: o Terraform precisa passar a usar a localização correta sem criar um segundo inventário independente. Faça a mudança em janela controlada, sem outros plans ou applies.

Prepare o backend antes da migração. O bucket precisa existir com versionamento, bloqueio público, criptografia e acesso restrito. Use uma configuração de bootstrap separada ou infraestrutura corporativa existente; não dependa do backend que ainda está tentando criar.

O lockfile nativo do S3 exige Terraform >= 1.10 e use_lockfile = true. Padronize essa versão em todas as máquinas e pipelines que acessam o state. Uma configuração compatível não protege contra clientes antigos que não adotam o mesmo mecanismo de lock.

As permissões são distintas: a role precisa ler e gravar o objeto de state e listar o prefixo necessário no bucket; no objeto .tflock, precisa também excluir o lock ao terminar. Se houver SSE-KMS, as permissões da chave entram na análise. Não conceda DeleteObject ao state sem necessidade operacional.

Execute init -migrate-state após configurar o backend e confirme a migração solicitada. Não confunda com reconfigure: -reconfigure aceita uma configuração de backend sem migrar o state anterior. Compare inventário antes/depois e só prossiga quando estiver certo de conta, bucket e chave.

Com concorrência legítima, aguarde o lock, não o desative. -lock-timeout=5m dá tempo para outra operação terminar. O lock coordena um state específico; não serializa automaticamente stacks diferentes que alteram o mesmo recurso por desenho incorreto.

Um lock aparentemente preso exige investigação de execução ativa: confira job, operador, horário e logs. Só use force-unlock após confirmar que o dono não está mais escrevendo e preservar evidências. Destravar um apply ainda vivo pode permitir duas gravações concorrentes.

Recuperação é procedimento ensaiado, não restauração impulsiva de versão. Pare os escritores, preserve state atual, identifique a versão boa e reconcilie o que mudou na AWS desde então. Após recuperar sob controle, execute plan e revise; restaurar um state antigo não desfaz recursos já criados ou removidos.

Na prática

Backend parcial e configuração do ambiente

hcl

# backend.tf no módulo raiz; o bucket é criado por bootstrap separado.
terraform {
  required_version = ">= 1.10, < 2.0"
  backend "s3" {}
}
# Salve o conteúdo abaixo em dev.s3.tfbackend, sem credenciais.
# bucket       = "cloudshop-tfstate-CONTA"
# key          = "dev/infra.tfstate"
# region       = "us-east-1"
# encrypt      = true
# use_lockfile = true
# Troque CONTA pelo identificador do bucket privado já provisionado.

Janela de migração e validação do inventário

bash

# Execute no diretório raiz correto, sem outros escritores ativos.
set -euo pipefail
umask 077
# Backup sensível fora do repositório; aplique a política de retenção do time.
terraform state pull > /tmp/cloudshop-before-migration.tfstate
terraform state list > /tmp/cloudshop-before-migration.txt
terraform init -migrate-state -backend-config=dev.s3.tfbackend
terraform state list > /tmp/cloudshop-after-migration.txt
diff -u /tmp/cloudshop-before-migration.txt /tmp/cloudshop-after-migration.txt
# Revise qualquer diferença; este comando não aplica mudanças.
terraform plan -lock-timeout=5m
# Não use -lock=false para contornar outro job.

Por que isso importa

Procedimentos de migração e recuperação evitam perder o vínculo entre código e infraestrutura durante incidentes.

Erro comum

Usar -reconfigure achando que ele transfere automaticamente o state local para o backend remoto.

Dica de produção

Teste recuperação em ambiente isolado e registre responsáveis, permissões de emergência e tempo de restauração.

Alerta de segurança

Backups de state contêm dados sensíveis: restrinja acesso, criptografe o armazenamento durável e nunca publique em artifacts abertos.

Pergunta de entrevista

Como migrar state local para S3 e comprovar que nenhum recurso perdeu seu vínculo?

Glossário

bootstrap
Etapa inicial que provisiona dependências necessárias à infraestrutura principal.
lockfile S3
Objeto .tflock usado pelo backend para coordenar operações sobre o state.
migrate-state
Opção do init que conduz a transferência do state ao mudar o backend.
reconfigure
Opção do init que descarta a configuração anterior de backend sem migrar o state.
versionamento S3
Manutenção de versões de objetos para recuperação e auditoria.

Conexão com o CloudShop

Migrar o state de dev do CloudShop em janela controlada, comparar inventários e documentar investigação de lock órfão.

Quiz da aula

  1. 1. Qual versão mínima suporta use_lockfile no backend S3?

  2. 2. Antes de force-unlock, o que é indispensável?

  3. 3. Restaurar uma versão antiga de state desfaz mudanças na AWS?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima