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 liststate 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.appA 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 planRemovendo 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.legacyBlocos 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.mainBackups 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 rmpara alterações imperativas.- Blocos
movedpara renomeações declarativas. - Blocos
removedpara 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
- Backends de estado remoto
- Bloqueio e consistência do estado
- Importando recursos existentes
- Refatorando o estado com moved e removed