Introducción
Te haces cargo de un bucket de informes en funcionamiento que se creó fuera de Terraform. Incorpóralo a su gestión sin volver a crearlo ni reescribir su informe. Después, revisa y aplica un pequeño ajuste de configuración, dejando intacto el almacenamiento vecino del equipo de finanzas.
Ya debes conocer la configuración de Terraform, las direcciones de recursos, init, plan, apply y el estado local, además de las operaciones básicas con objetos de S3. En este entorno nuevo ya están preparados Terraform, su proveedor de AWS, la configuración de acceso y dos buckets de informes independientes. No necesitas una cuenta personal de AWS ni recursos de un laboratorio anterior.
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: incorporar almacenamiento existente y revisar y aplicar un cambio gestionado sin destruir recursos. |
Vista general del laboratorio

Inspecciona el almacenamiento existente y la configuración deseada
En este paso, compara el recurso que ya existe en AWS con la configuración que vas a gestionar. AWS View, encima de Terminal, muestra los mismos recursos de S3 que lee tu CLI. Despliega report.txt en la tarjeta handover-daily-reports para inspeccionar los datos del informe; finance-reference-reports pertenece a otro equipo y debe permanecer sin cambios.
Una dirección de recurso de Terraform, como aws_s3_bucket.reports, identifica un bloque de configuración. El nombre del bucket identifica el recurso remoto de AWS. El estado registra la correspondencia entre esas dos identidades. Un archivo de configuración por sí solo no establece esa correspondencia.
Entra en el directorio raíz preparado y lee la configuración deseada del bucket:
cd /home/labex/project/report-storage
cat main.tf
El argumento bucket selecciona handover-daily-reports. Owner debe seguir siendo reporting; la nueva etiqueta ManagedBy registrará el traspaso de la gestión. force_destroy = false impide que Terraform vacíe automáticamente un bucket que contiene objetos durante una eliminación posterior. Es un ajuste del comportamiento de Terraform, independiente del informe almacenado en el bucket.
Inspecciona las etiquetas existentes:
aws s3api \
get-bucket-tagging \
--bucket handover-daily-reports
Al principio solo existe Owner=reporting. Recupera el informe original en la salida estándar, usando - como destino:
aws s3 \
cp s3://handover-daily-reports/report.txt -
Informe esperado:
Daily sales: 120 orders
Inicializa el directorio de trabajo. init instala el proveedor con la versión fijada para este directorio raíz; no importa ni crea el bucket:
terraform init
Inspecciona las acciones propuestas sin aplicarlas:
terraform plan
El plan propone 1 to add porque este directorio raíz todavía no tiene una correspondencia con un recurso gestionado. El bucket ya existe; esto evidencia que falta su asociación en el estado, no que tengas permiso para sustituir el almacenamiento. No apliques este plan de creación. En el siguiente paso se establece explícitamente la correspondencia.
Antes de continuar, confirma manualmente que sabes identificar el bucket de informes, leer su informe y distinguirlo del almacenamiento de finanzas. La comprobación en segundo plano de este paso de inspección verifica la conservación de los recursos suministrados, no si has comprendido el plan mostrado.
Importa el bucket existente y revisa la diferencia
En este paso, asociarás el bucket existente con la dirección prevista de Terraform. El comando import de la CLI lee un recurso remoto y registra su identidad en el estado. No genera la configuración deseada ni importa todos los objetos del bucket.
Ejecuta la importación indicando primero la dirección de la configuración y después el nombre del bucket existente:
terraform import aws_s3_bucket.reports handover-daily-reports
Busca Import successful!. Comprueba qué dirección está ahora gestionada:
terraform state list
Dirección esperada:
aws_s3_bucket.reports
Lee sus atributos:
terraform state show aws_s3_bucket.reports
Tanto id como bucket deben identificar handover-daily-reports. report.txt sigue almacenado en S3; importar un bucket no incorpora el objeto a una dirección aws_s3_object independiente. El bucket de finanzas no debe aparecer en el estado de este directorio raíz.
La importación no garantiza que el plan quede inmediatamente vacío. Algunos ajustes proceden del servicio remoto; otros, como force_destroy, describen el comportamiento del propio Terraform y pueden necesitar un ajuste de configuración después de la importación. Una diferencia de este tipo no significa que tu informe se haya dañado.
Guarda un plan para revisarlo. -out=handover.tfplan guarda las acciones previstas para que, en el siguiente paso, puedas aplicar exactamente el mismo plan revisado:
terraform plan -out=handover.tfplan
Lee el plan guardado:
terraform show handover.tfplan
Debes ver una actualización en el mismo recurso (~), la incorporación de la etiqueta ManagedBy=Terraform y, posiblemente, el ajuste de force_destroy a false. El resumen debe ser:
Plan: 0 to add, 1 to change, 0 to destroy.
Si el plan propone eliminar, sustituir o crear recursos, un nombre de bucket diferente o cambios en el almacenamiento de finanzas, detente y revisa el directorio raíz, la dirección del recurso y el ID de importación. No resuelvas un plan inesperado eliminando el informe existente.
Aplica el ajuste y confirma la conservación
En este paso, aplicarás únicamente el plan que has revisado y demostrarás que el informe original se conserva. Al proporcionar un plan guardado a apply, este se ejecuta directamente, sin una segunda solicitud de aprobación. Ejecútalo solo después de confirmar que el resumen del paso anterior no incluye creaciones ni eliminaciones:
terraform apply handover.tfplan
Debes ver Resources: 0 added, 1 changed, 0 destroyed. El bucket ya está gestionado y la etiqueta de traspaso coincide con la configuración.
Lee las etiquetas actuales para comprobar el resultado en AWS:
aws s3api \
get-bucket-tagging \
--bucket handover-daily-reports
Deben aparecer tanto Owner=reporting como ManagedBy=Terraform; el orden de las etiquetas no importa.
Vuelve a leer el informe:
aws s3 \
cp s3://handover-daily-reports/report.txt -
Debe seguir conteniendo Daily sales: 120 orders. En AWS View, despliega ambos informes y confirma que siguen disponibles el contenido del informe y la referencia de finanzas. Ajustar una etiqueta no requiere un bucket nuevo ni reescribir un objeto.

Comprueba la convergencia entre la configuración actual, el estado y la información actualizada del recurso de AWS:
terraform plan
Resultado esperado:
No changes. Your infrastructure matches the configuration.
Un plan sin cambios no basta por sí solo para demostrar un traspaso seguro: también has comprobado la dirección del recurso prevista y los datos originales, mientras que la comprobación en segundo plano compara la versión original del objeto y el almacenamiento vecino y genera un plan de la configuración actual en una copia desechable para confirmar la convergencia. Conserva ambos buckets para este traspaso. No ejecutes terraform destroy: el informe sigue en uso. En un traspaso real, protege el estado como datos operativos sensibles y organiza el acceso para quien continúe el mantenimiento; no incorpores a un repositorio público archivos de estado ni planes guardados que contengan valores sensibles.
Para obtener más contexto, consulta el flujo de importación mediante CLI de HashiCorp.
Resumen
Has comparado un bucket existente con la configuración de Terraform, importado su identidad en la dirección prevista del estado y revisado un ajuste sin destrucción de recursos antes de aplicarlo. Has confirmado un plan sin cambios y conservado el informe original y el almacenamiento de finanzas. La importación establece la gestión; la revisión de la configuración determina qué debe cambiar Terraform a continuación.



