Introdução
Um nome de configuração mais claro não deve exigir a recriação de um armazenamento em uso. Renomeie o endereço do Terraform de um bucket de relatórios gerenciado, revise a diferença entre uma renomeação direta insegura e uma movimentação declarada e preserve seus dados originais.
Você precisa de experiência com importação/estado e planos do Terraform, adquirida no laboratório guiado anterior ou em prática equivalente. Este novo ambiente fornece seu próprio relatório gerenciado e uma referência financeira independente. Use o Terminal para o Terraform e o AWS View para os relatórios existentes; não é necessário ter uma conta pessoal da AWS.
Relação com certificações
| Certificação | Tarefa do exame | Prática |
|---|---|---|
| CloudOps Engineer – Associate (SOA-C03) | Tarefa 3.1, Habilidade 3.1.6 | Prática básica com Terraform: manter a infraestrutura por meio de alterações revisadas na configuração e no estado, preservando os recursos em uso. |
Visão geral do laboratório

Compare endereços lógicos e identidade remota
Nesta etapa, inspecione um diretório raiz do Terraform em funcionamento antes de renomear seu recurso. O diretório raiz e dois relatórios com versionamento são preparados de forma independente para este laboratório. O bucket de relatórios é gerenciado aqui; o armazenamento financeiro está fora deste diretório raiz.
cd /home/labex/project/report-refactor
terraform state list
O endereço original é aws_s3_bucket.reports. Leia seu ID remoto:
terraform state show aws_s3_bucket.reports
id = "rename-daily-reports" identifica o bucket AWS existente. Renomear um bloco do Terraform altera seu endereço lógico, não esse nome de bucket.
Leia a configuração fornecida e estabeleça uma referência inicial sem alterações pendentes:
cat main.tf
terraform plan
Espere No changes. No AWS View, expanda o relatório em rename-daily-reports; mantenha rename-finance-reference inalterado. Leia os mesmos bytes do relatório no Terminal:
aws s3 \
cp s3://rename-daily-reports/report.txt -
Espere Daily sales: 120 orders. O objetivo é alterar qual endereço gerencia esse armazenamento, preservando sua identidade e a versão original do objeto.
Descreva a renomeação com um bloco moved
Nesta etapa, observe por que uma renomeação direta de endereço parece destrutiva e, em seguida, informe ao Terraform que o novo endereço se refere ao mesmo recurso.
Um here-document escreve a configuração entre os marcadores HCL em main.tf; > substitui esse arquivo. Altere apenas o rótulo local do bloco para report_archive, mantendo o nome do bucket remoto e seus atributos inalterados:
cat > main.tf <<'HCL'
resource "aws_s3_bucket" "report_archive" {
bucket = "rename-daily-reports"
force_destroy = false
tags = { Owner = "reporting" }
}
HCL
Inspecione o resultado antes de qualquer aplicação:
terraform plan
Sem uma relação entre os endereços, o Terraform identifica a ausência do endereço antigo e um novo endereço sem estado. Espere 1 to add, 0 to change, 1 to destroy. Não aplique esse plano nem exclua o relatório para tornar a destruição possível.
Um bloco moved declara uma relação entre o endereço antigo e o novo. Diferentemente de alterar o nome do bucket AWS, isso registra uma refatoração da configuração. Coloque a declaração em um arquivo .tf separado; o Terraform lê em conjunto todos os arquivos .tf deste diretório raiz:
cat > moved.tf <<'HCL'
moved {
from = aws_s3_bucket.reports
to = aws_s3_bucket.report_archive
}
HCL
Salve e inspecione o plano corrigido:
terraform plan -out=rename.tfplan
Espere aws_s3_bucket.reports has moved to aws_s3_bucket.report_archive e 0 to add, 0 to change, 0 to destroy. O endereço planejado no estado muda, enquanto o recurso AWS não precisa ser recriado. Mantenha a declaração junto à configuração para que cópias mais antigas do estado também possam compreender a refatoração.
Aplique a migração de endereço e preserve o relatório
Nesta etapa, aplique o plano seguro salvo e confirme que apenas o endereço lógico mudou. Um plano salvo é executado sem outra solicitação de aprovação, portanto confirme primeiro que seu resumo não apresenta criações nem destruições.
terraform apply rename.tfplan
O resumo dos recursos deve mostrar 0 added, 0 changed, 0 destroyed. Inspecione o mapeamento resultante:
terraform state list
terraform state show aws_s3_bucket.report_archive
Apenas o novo endereço aparece na lista, e seu ID de bucket permanece rename-daily-reports. Verifique o relatório armazenado:
aws s3 \
cp s3://rename-daily-reports/report.txt -
O texto original continua sendo Daily sales: 120 orders. O AWS View ainda mostra os mesmos buckets de relatórios e financeiro; não se espera um novo cartão de recurso para uma renomeação lógica.
terraform plan
Espere No changes. A verificação independente também compara o VersionId original e o armazenamento vizinho e gera um plano da configuração atual em uma cópia descartável. Mantenha os dois relatórios em uso intactos para o próximo responsável pela manutenção.
Consulte a documentação sobre refatoração de recursos da HashiCorp para entender o papel das declarações moved preservadas na evolução de módulos.
Resumo
Você distinguiu um endereço do Terraform de um ID de recurso AWS, rejeitou um plano destrutivo de renomeação direta e aplicou uma declaração moved sem recriar o bucket nem o relatório.



