Cambia el nombre de los recursos sin volver a crearlos

AWSBeginner
Practicar Ahora

Introducción

Un nombre más claro en la configuración no debería exigir volver a crear un almacenamiento que funciona. Cambia la dirección de Terraform de un bucket de informes gestionado, revisa la diferencia entre un cambio directo de nombre inseguro y un traslado declarado, y conserva sus datos originales.

Necesitas experiencia con la importación, el estado y los planes de Terraform adquirida en el laboratorio guiado anterior o mediante una práctica equivalente. Este entorno nuevo proporciona su propio informe gestionado y una referencia de finanzas independiente. Usa Terminal para Terraform y AWS View para los informes existentes; no necesitas una cuenta personal de AWS.

Relación con las certificaciones

Certificación Tarea del examen Práctica
CloudOps Engineer – Associate (SOA-C03) Tarea 3.1, habilidad 3.1.6 Práctica básica de Terraform: mantener infraestructura mediante cambios revisados en la configuración y el estado, conservando los recursos en funcionamiento.

Vista general del laboratorio

Diagrama conceptual: la tarea de mantenimiento conserva la relación entre la configuración, el estado y el almacenamiento de informes existente.

Compara las direcciones lógicas y la identidad remota

En este paso, inspecciona una configuración raíz de Terraform en funcionamiento antes de cambiar el nombre de su recurso. La configuración raíz y dos informes con versiones se preparan de forma independiente para este laboratorio. El bucket de informes se gestiona aquí; el almacenamiento de finanzas queda fuera de esta configuración raíz.

cd /home/labex/project/report-refactor
terraform state list

La dirección original es aws_s3_bucket.reports. Lee su ID remoto:

terraform state show aws_s3_bucket.reports

id = "rename-daily-reports" identifica el bucket existente de AWS. Cambiar el nombre de un bloque de Terraform modifica su dirección lógica, no este nombre del bucket.

Lee la configuración suministrada y establece una referencia inicial sin cambios pendientes:

cat main.tf
terraform plan

Debes ver No changes. En AWS View, despliega el informe de rename-daily-reports; deja rename-finance-reference sin cambios. Lee los mismos bytes del informe en Terminal:

aws s3 \
  cp s3://rename-daily-reports/report.txt -

Debes ver Daily sales: 120 orders. El objetivo es cambiar la dirección que gestiona este almacenamiento conservando su identidad y la versión original del objeto.

Describe el cambio de nombre con un bloque moved

En este paso, observarás por qué un cambio directo de la dirección propone acciones destructivas y, después, indicarás a Terraform que la nueva dirección hace referencia al mismo recurso.

Un documento incrustado escribe la configuración situada entre los marcadores HCL en main.tf; > sustituye ese archivo. Cambia únicamente la etiqueta local del bloque a report_archive, manteniendo sin cambios el nombre y los atributos del bucket remoto:

cat > main.tf <<'HCL'
resource "aws_s3_bucket" "report_archive" {
  bucket        = "rename-daily-reports"
  force_destroy = false
  tags = { Owner = "reporting" }
}
HCL

Inspecciona el resultado antes de aplicar cualquier cambio:

terraform plan

Sin una relación entre las direcciones, Terraform detecta que falta la dirección anterior y que existe una dirección nueva sin estado. Debes ver 1 to add, 0 to change, 1 to destroy. No apliques este plan ni elimines el informe para permitir la destrucción.

Un bloque moved declara una relación entre la dirección anterior y la nueva. En lugar de cambiar el nombre del bucket de AWS, esto registra una refactorización de la configuración. Coloca la declaración en un archivo .tf independiente; Terraform lee conjuntamente todos los archivos .tf de esta configuración raíz:

cat > moved.tf <<'HCL'
moved {
  from = aws_s3_bucket.reports
  to   = aws_s3_bucket.report_archive
}
HCL

Guarda e inspecciona el plan corregido:

terraform plan -out=rename.tfplan

Debes ver aws_s3_bucket.reports has moved to aws_s3_bucket.report_archive y 0 to add, 0 to change, 0 to destroy. El plan cambia la dirección en el estado, mientras que el recurso de AWS no necesita volver a crearse. Conserva la declaración junto con la configuración para que las copias anteriores del estado también puedan interpretar la refactorización.

Aplica la migración de dirección y conserva el informe

En este paso, aplicarás el plan seguro guardado y confirmarás que solo ha cambiado la dirección lógica. Un plan guardado se ejecuta sin otra solicitud de aprobación, por lo que primero debes confirmar que su resumen no incluye creaciones ni eliminaciones.

terraform apply rename.tfplan

El resumen de recursos debe mostrar 0 added, 0 changed, 0 destroyed. Inspecciona la correspondencia resultante:

terraform state list
terraform state show aws_s3_bucket.report_archive

Solo aparece la dirección nueva y el ID del bucket sigue siendo rename-daily-reports. Comprueba el informe almacenado:

aws s3 \
  cp s3://rename-daily-reports/report.txt -

El texto original sigue siendo Daily sales: 120 orders. AWS View sigue mostrando los mismos buckets de informes y de finanzas; un cambio de nombre lógico no debe generar una tarjeta de recurso nueva.

terraform plan

Debes ver No changes. La comprobación independiente también compara el VersionId original y el almacenamiento vecino y genera un plan de la configuración actual en una copia desechable. Deja intactos ambos informes en uso para quien continúe el mantenimiento.

Consulta la documentación sobre refactorización de recursos de HashiCorp para conocer el papel de las declaraciones moved conservadas en la evolución de los módulos.

Resumen

Has distinguido una dirección de Terraform de un ID de recurso de AWS, rechazado un plan destructivo generado por un cambio directo de nombre y aplicado una declaración moved sin volver a crear el bucket ni el informe.