Sincroniza un directorio de informes

AWSBeginner
Practicar Ahora

Introducción

Un equipo publica un directorio de informes CSV diarios. Subirás el directorio, publicarás cambios y eliminarás un informe almacenado obsoleto protegiendo un archivo independiente.

Completa primero Organiza documentos con claves y metadatos, incluidos sus conceptos de bucket, clave, prefijo y descarga. Esta VM nueva proporciona la conexión de la CLI, los informes locales y un bucket que solo contiene el archivo. Utiliza Terminal para los comandos y la pestaña AWS View, a su lado, para observar tus cambios.

Relación con las certificaciones

Este laboratorio ofrece práctica para los siguientes temas de examen.

Publica el directorio de informes preparado

En este paso, publicarás dos informes locales en el prefijo daily/ y comprenderás cómo sus nombres de archivo se corresponden con claves de objetos.

Entra en el espacio de trabajo con cd (cambiar de directorio):

cd /home/labex/project

Inspecciona el directorio de informes preparado con ls, que enumera sus nombres de archivo locales:

ls reports

La lista contiene monday.csv y tuesday.csv. Ambos son archivos CSV: una cabecera indica las columnas y las comas separan los valores de cada registro. Inspecciona el informe del lunes con cat, que muestra el contenido de un archivo:

cat reports/monday.csv
date,orders
2026-09-28,120

Enumera el bucket preparado. Para una ubicación de S3, --recursive muestra las claves completas de todo el bucket:

aws s3 ls s3://labex-report-delivery/ --recursive

Solo está presente archive/retention.txt. El archivo pertenece a un flujo de trabajo independiente y debe conservarse durante tu sincronización diaria.

aws s3 sync recibe un origen y un destino, en ese orden. Considera recursivamente los archivos del directorio de origen; no necesitas --recursive para sync. Cada nombre de archivo relativo se convierte en una clave bajo el prefijo de destino. Por tanto, reports/monday.csv se convierte en daily/monday.csv, en lugar de daily/reports/monday.csv.

aws s3 sync reports/ s3://labex-report-delivery/daily/

El comando informa de subidas del lunes y del martes; su orden en la salida puede variar. Enumera de nuevo todo el bucket:

aws s3 ls s3://labex-report-delivery/ --recursive

Deberías encontrar tres claves: archive/retention.txt, daily/monday.csv y daily/tuesday.csv. AWS View muestra los mismos objetos. Haz clic en daily/monday.csv para leer el informe CSV almacenado de dos líneas. El archivo permanece fuera del destino daily/ que seleccionaste.

Sincroniza un cambio y un informe nuevo

En este paso, actualizarás un informe, añadirás otro y transferirás esos cambios sin volver a subir un informe que no ha cambiado.

Ejecutar sync con el mismo origen y destino es seguro cuando ninguno de los dos ha cambiado:

aws s3 sync reports/ s3://labex-report-delivery/daily/

No hay líneas de subida cuando los archivos existentes ya están actualizados. En las transferencias de local a S3, la CLI considera si falta la clave de destino, si los tamaños difieren o si el archivo local tiene una hora de modificación más reciente. No vigila continuamente el directorio: ejecutas sync cuando quieres publicar cambios.

Añade un lote tardío de 25 pedidos al informe del lunes. printf muestra el texto entre comillas; \n termina la línea. El operador >> del shell añade contenido a un archivo local en lugar de reemplazarlo:

printf '2026-09-28,25\n' >> reports/monday.csv

Inspecciona el resultado de tres líneas:

cat reports/monday.csv
date,orders
2026-09-28,120
2026-09-28,25

Crea el informe del miércoles. Aquí > escribe un archivo nuevo, reemplazando cualquier contenido existente en esa ruta:

printf 'date,orders\n2026-09-30,150\n' > reports/wednesday.csv

Antes de publicar, el informe almacenado del lunes sigue teniendo dos líneas y el del miércoles no aparece en AWS View. Editar solo los archivos locales no cambia S3.

Publica de nuevo:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Deberías ver subidas del informe del lunes modificado y del nuevo informe del miércoles. El martes no ha cambiado, así que no se sube. Esta es una transferencia incremental: copia los cambios en lugar de copiar indiscriminadamente todos los archivos.

En AWS View, el lunes ahora muestra el lote tardío y aparece el miércoles. Descarga el lunes a una ruta local independiente para poder comparar el contenido realmente almacenado:

aws s3 cp s3://labex-report-delivery/daily/monday.csv retrieved-monday.csv

cmp compara archivos byte a byte. Termina correctamente sin mostrar diferencias cuando los contenidos coinciden. && muestra el mensaje solo después de esa comparación correcta:

cmp reports/monday.csv retrieved-monday.csv && echo 'Updated report matches'
Updated report matches

Esto confirma que la actualización llegó al almacenamiento; un mensaje de comando correcto por sí solo no indicaría qué bytes se almacenaron.

El ejemplo siguiente muestra el informe almacenado del lunes desplegado después de la actualización. El miércoles está presente y el archivo independiente permanece en el bucket:

Directorio de informes actualizado y archivo conservado

Crea un espejo únicamente del prefijo diario

En este paso, eliminarás un informe obsoleto del destino protegiendo el archivo ajeno a la tarea.

El destino de sync es daily/; archive/ permanece fuera de ese alcance.

Alcance del prefijo de sincronización

El informe del martes ya no forma parte de la colección diaria publicada. Elimina solo ese archivo local con rm (eliminar). Este es un comando del sistema de archivos local, así que no elimina un objeto de S3:

rm reports/tuesday.csv

Ejecuta de nuevo sync normal:

aws s3 sync reports/ s3://labex-report-delivery/daily/

Enumera el prefijo de destino:

aws s3 ls s3://labex-report-delivery/daily/ --recursive

El martes sigue apareciendo. De forma predeterminada, sync copia los archivos que faltan o se han actualizado, pero conserva los objetos adicionales en el destino. Eliminar solo un archivo de origen no elimina su copia almacenada.

Un espejo mantiene el conjunto de archivos del destino alineado con el origen, incluidas las eliminaciones. --delete elimina las claves de destino que no tienen un archivo de origen correspondiente. Primero combínalo con --dryrun, que muestra las operaciones previstas sin realizarlas:

aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete --dryrun

La simulación debería enumerar únicamente la eliminación de daily/tuesday.csv. El lunes y el miércoles coinciden con el origen, y archive/retention.txt está fuera de daily/. Mantén exacto el prefijo de destino: utilizar la raíz del bucket incluiría el archivo en el alcance.

Después de comprobar la eliminación prevista, ejecuta la misma operación sin --dryrun:

aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete

El comando informa de la eliminación del martes. Inspecciona todo el bucket para comprobar tanto lo que desapareció como lo que se conservó:

aws s3 ls s3://labex-report-delivery/ --recursive

Las claves restantes son daily/monday.csv, daily/wednesday.csv y archive/retention.txt. En AWS View, abre el objeto del archivo y confirma que sigue mostrando Keep the archive outside daily synchronization. Tu operación de espejo solo afectó al prefijo elegido.

Elimina los recursos de almacenamiento del laboratorio

En este paso, limpiarás los informes y el archivo creados para este ejercicio y después eliminarás el bucket vacío.

El archivo debía conservarse durante el espejo diario, pero también es un recurso desechable perteneciente a este ejercicio. Ahora es seguro eliminarlo explícitamente. Primero elimina los dos objetos de informes diarios mediante una operación recursiva restringida a daily/:

aws s3 rm s3://labex-report-delivery/daily/ --recursive

La salida confirma las dos eliminaciones de informes. Elimina el archivo por su clave completa:

aws s3 rm s3://labex-report-delivery/archive/retention.txt

Confirma que el bucket está vacío:

aws s3 ls s3://labex-report-delivery/ --recursive

Un comando correcto sin filas de objetos demuestra que está vacío. aws s3 rb (eliminar bucket) ahora puede eliminar el contenedor:

aws s3 rb s3://labex-report-delivery

La salida es remove_bucket: labex-report-delivery. Comprueba los buckets restantes:

aws s3 ls

No quedan filas de buckets. AWS View muestra No buckets después de una consulta correcta del estado. Tus archivos de informes locales permanecen para revisarlos; eliminar los recursos de almacenamiento no elimina esas copias locales.

Resumen

Publicaste un directorio local de informes en un prefijo de S3, repetiste sync sin cambios, subiste un informe modificado y uno nuevo, y comparaste una actualización recuperada con su origen. Observaste que sync normal conserva los objetos adicionales del destino y después revisaste y realizaste un espejo con --delete restringido a daily/.

El archivo se conservó durante esa operación porque estaba fuera del prefijo de destino. Verificaste tanto el estado nuevo como los datos conservados antes de limpiar todos los recursos de almacenamiento del laboratorio. Para futuros flujos de trabajo, elige el origen, el destino y el alcance de eliminación antes de ejecutar sync.