0Pricing
Terraform Infrastructure as Code · Aula

Refatorando o estado com moved e removed

Renomeie e reestruture recursos com segurança, sem destruir a infraestrutura, usando comandos de manipulação do estado e os blocos declarativos moved e removed.

Refatorando o estado com moved e removed é uma aula grátis de Terraform Infrastructure as Code no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Terraform Infrastructure as Code, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Terraform Infrastructure as Code inclui 4 aulas no total.

O problema da renomeação

Quando você renomeia um recurso na configuração, o Terraform vê o endereço antigo desaparecer e um novo surgir. Por padrão, ele destrói e recria o recurso, o que pode causar indisponibilidade ou perda de dados.

As ferramentas de refatoração do estado permitem informar ao Terraform que um recurso apenas mudou de lugar.

Inspecionando o estado

Comece listando o que é acompanhado no estado. O comando terraform state list mostra o endereço de cada recurso gerenciado.

terraform state list

state mv imperativo

A abordagem clássica é terraform state mv, que reescreve o endereço de um recurso no estado. Aqui, renomeamos uma instância de aws_instance.web para aws_instance.app.

terraform state mv aws_instance.web aws_instance.app

A desvantagem de state mv

state mv é uma ação manual e única da CLI. Ela não é registrada no código, portanto os colegas que executarem a mesma alteração em suas máquinas terão de repeti-la. Isso é propenso a erros em fluxos de trabalho colaborativos.

Blocos moved declarativos

O bloco moved registra uma renomeação na sua configuração. O Terraform o aplica automaticamente para todos durante o próximo plano; depois, você pode remover o bloco.

moved {
  from = aws_instance.web
  to   = aws_instance.app
}

Movendo para um módulo

Os blocos moved também lidam com o encapsulamento de recursos em um módulo. O endereço de destino inclui o caminho do módulo.

moved {
  from = aws_instance.app
  to   = module.compute.aws_instance.app
}

Verificando com um plano

Depois de adicionar um bloco moved, execute terraform plan. Uma movimentação correta não mostra destruição nem criação, apenas uma alteração de endereço. Se ainda aparecer uma substituição, o bloco está incorreto.

terraform plan

Removendo do estado

Às vezes, você quer que o Terraform pare de gerenciar um recurso sem destruir a infraestrutura real. O comando imperativo é terraform state rm.

terraform state rm aws_instance.legacy

Blocos removed declarativos

As versões mais recentes do Terraform oferecem um bloco removed. Com lifecycle { destroy = false }, ele remove o recurso do estado, mas deixa a infraestrutura real intacta.

removed {
  from = aws_instance.legacy

  lifecycle {
    destroy = false
  }
}

Dividindo arquivos de estado

Em projetos grandes, terraform state mv -state-out pode mover recursos entre arquivos de estado separados, o que é útil ao dividir um monólito em pilhas aplicadas de forma independente.

terraform state mv -state-out=network.tfstate \
  aws_vpc.main aws_vpc.main

Backups e segurança

O Terraform grava um arquivo .backup antes de modificar o estado. Ainda assim, ao usar backends remotos, sempre confirme que o estado não está bloqueado por um colega antes de realizar operações manuais, para evitar corrupção.

Verificação rápida

Teste seus conhecimentos sobre refatoração.

Recapitulação: refatoração segura do estado

Agora você pode reestruturar a infraestrutura sem destruí-la:

  • state mv / state rm para alterações imperativas.
  • Blocos moved para renomeações declarativas.
  • Blocos removed para remover do controle sem destruir.
  • Sempre verifique com um plano que não mostre substituições.

Perguntas Frequentes

A aula “Refatorando o estado com moved e removed” é grátis?

Sim — o texto completo de “Refatorando o estado com moved e removed” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Terraform Infrastructure as Code, atualize para CoddyKit PRO. O curso de Terraform Infrastructure as Code inclui 4 aulas no total.

O que vou aprender em “Refatorando o estado com moved e removed”?

Renomeie e reestruture recursos com segurança, sem destruir a infraestrutura, usando comandos de manipulação do estado e os blocos declarativos moved e removed. Você pratica Terraform Infrastructure as Code com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Terraform Infrastructure as Code?

Nenhuma experiência prévia é necessária. Terraform Infrastructure as Code no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Refatorando o estado com moved e removed”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Terraform Infrastructure as Code?

Sim. Cada aula de Terraform Infrastructure as Code inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Backends de estado remoto
  2. Bloqueio e consistência do estado
  3. Importando recursos existentes
  4. Refatorando o estado com moved e removed
← Voltar para Terraform Infrastructure as Code