Renomeie recursos sem recriá-los

AWSBeginner
Pratique Agora

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

Diagrama conceitual: a tarefa de manutenção preserva a relação entre a configuração, o estado e o armazenamento de relatórios existente.

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.