Введение
Команда публикует каталог ежедневных отчётов CSV. Вы загрузите каталог, опубликуете изменения и удалите устаревший сохранённый отчёт, защитив отдельный архив.
Сначала выполните работу Упорядочьте документы с помощью ключей и метаданных, включая понятия бакета, ключа, префикса и скачивания. Эта новая VM предоставляет подключение CLI, локальные отчёты и бакет, содержащий только архив. Используйте Terminal для команд и расположенную рядом вкладку AWS View для наблюдения за изменениями.
Связь с сертификацией
Эта лабораторная работа помогает на практике изучить следующие темы экзаменов.
- Cloud Practitioner (CLF-C02) · Задача 3.6: Синхронизация каталогов и удаление в заданной области S3.
- Solutions Architect – Associate (SAA-C03) · Задача 3.1: Синхронизация каталогов и удаление в заданной области S3.
- Developer – Associate (DVA-C02) · Задача 1.3: Синхронизация каталогов и удаление в заданной области S3.
Опубликуйте подготовленный каталог отчётов
На этом шаге вы опубликуете два локальных отчёта в префиксе daily/ и разберётесь, как их имена файлов преобразуются в ключи объектов.
Перейдите в рабочий каталог с помощью cd (change directory — сменить каталог):
cd /home/labex/project
Изучите подготовленный каталог отчётов с помощью ls, который перечисляет локальные имена файлов:
ls reports
Список содержит monday.csv и tuesday.csv. Оба — файлы CSV: заголовок называет столбцы, а запятые разделяют значения каждой записи. Изучите отчёт понедельника с помощью cat, который выводит содержимое файла:
cat reports/monday.csv
date,orders
2026-09-28,120
Выведите содержимое подготовленного бакета. Для места S3 параметр --recursive показывает полные ключи во всём бакете:
aws s3 ls s3://labex-report-delivery/ --recursive
Присутствует только archive/retention.txt. Архив принадлежит отдельному рабочему процессу и должен сохраниться при вашей ежедневной синхронизации.
aws s3 sync принимает источник и назначение в таком порядке. Он рекурсивно рассматривает файлы исходного каталога; для sync не нужен --recursive. Каждое относительное имя файла становится ключом под префиксом назначения. Поэтому reports/monday.csv становится daily/monday.csv, а не daily/reports/monday.csv.
aws s3 sync reports/ s3://labex-report-delivery/daily/
Команда сообщает о загрузках понедельника и вторника; порядок вывода может отличаться. Снова выведите весь бакет:
aws s3 ls s3://labex-report-delivery/ --recursive
Вы должны найти три ключа: archive/retention.txt, daily/monday.csv и daily/tuesday.csv. AWS View показывает те же объекты. Нажмите daily/monday.csv, чтобы прочитать сохранённый двухстрочный отчёт CSV. Архив остаётся за пределами выбранного назначения daily/.
Синхронизируйте изменение и новый отчёт
На этом шаге вы обновите один отчёт, добавите другой и передадите эти изменения, не загружая неизменённый отчёт повторно.
Запуск sync с теми же источником и назначением безопасен, когда ни одна сторона не изменилась:
aws s3 sync reports/ s3://labex-report-delivery/daily/
Когда существующие файлы уже актуальны, строк загрузки нет. При передаче из локального каталога в S3 CLI учитывает, отсутствует ли ключ назначения, отличаются ли размеры или новее ли время изменения локального файла. Он не следит за каталогом непрерывно: вы запускаете sync, когда хотите опубликовать изменения.
Добавьте позднюю партию из 25 заказов в отчёт понедельника. printf выводит текст в кавычках; \n завершает строку. Оператор оболочки >> дописывает в локальный файл, а не заменяет его:
printf '2026-09-28,25\n' >> reports/monday.csv
Изучите трёхстрочный результат:
cat reports/monday.csv
date,orders
2026-09-28,120
2026-09-28,25
Создайте отчёт среды. Здесь > записывает новый файл, заменяя любое существующее содержимое по этому пути:
printf 'date,orders\n2026-09-30,150\n' > reports/wednesday.csv
До публикации сохранённый отчёт понедельника по-прежнему имеет две строки, а среда отсутствует в AWS View. Одно лишь редактирование локальных файлов не меняет S3.
Опубликуйте снова:
aws s3 sync reports/ s3://labex-report-delivery/daily/
Вы должны увидеть загрузки изменённого отчёта понедельника и нового отчёта среды. Вторник не изменился, поэтому не загружается. Это инкрементальная передача: она копирует изменения, а не безусловно копирует каждый файл.
В AWS View понедельник теперь показывает позднюю партию, и появляется среда. Скачайте понедельник по отдельному локальному пути, чтобы сравнить фактическое сохранённое содержимое:
aws s3 cp s3://labex-report-delivery/daily/monday.csv retrieved-monday.csv
cmp сравнивает файлы байт за байтом. Он завершается успешно, не выводя различий, когда содержимое совпадает. && выводит сообщение только после успешного сравнения:
cmp reports/monday.csv retrieved-monday.csv && echo 'Updated report matches'
Updated report matches
Это подтверждает, что обновление достигло хранилища; одно лишь сообщение об успешной команде не сказало бы, какие байты сохранены.
Пример ниже показывает раскрытый сохранённый отчёт понедельника после обновления. Среда присутствует, а отдельный архив остаётся в бакете:

Зеркалируйте только префикс daily
На этом шаге вы удалите устаревший отчёт в назначении, защитив посторонний архив.
Назначение sync — daily/; archive/ остаётся за его пределами.

Отчёт вторника больше не входит в опубликованную ежедневную коллекцию. Удалите только этот локальный файл с помощью rm (remove — удалить). Это команда локальной файловой системы, поэтому она не удаляет объект S3:
rm reports/tuesday.csv
Снова выполните обычный sync:
aws s3 sync reports/ s3://labex-report-delivery/daily/
Выведите префикс назначения:
aws s3 ls s3://labex-report-delivery/daily/ --recursive
Вторник по-прежнему появляется. По умолчанию sync копирует недостающие или обновлённые файлы, но оставляет лишние объекты в назначении. Одно лишь удаление исходного файла не удаляет сохранённую копию.
Зеркалирование поддерживает набор файлов назначения в соответствии с источником, включая удаления. --delete удаляет ключи назначения, которым не соответствует исходный файл. Сначала объедините его с --dryrun, который показывает предполагаемые операции, не выполняя их:
aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete --dryrun
Пробный запуск должен перечислить только удаление daily/tuesday.csv. Понедельник и среда соответствуют источнику, а archive/retention.txt находится вне daily/. Точно сохраняйте префикс назначения: использование корня бакета включило бы архив в область операции.
Проверив предполагаемое удаление, выполните ту же операцию без --dryrun:
aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete
Команда сообщает об удалении вторника. Изучите весь бакет, чтобы проверить и исчезнувшее, и сохранившееся:
aws s3 ls s3://labex-report-delivery/ --recursive
Оставшиеся ключи — daily/monday.csv, daily/wednesday.csv и archive/retention.txt. В AWS View откройте объект архива и подтвердите, что он по-прежнему содержит Keep the archive outside daily synchronization. Ваша операция зеркалирования затронула только выбранный префикс.
Удалите ресурсы хранилища этой работы
На этом шаге вы удалите отчёты и архив, созданные для упражнения, затем удалите пустой бакет.
Архив должен был сохраниться при ежедневном зеркалировании, но он также является временным ресурсом этого упражнения. Теперь его можно безопасно удалить явно. Сначала удалите два объекта ежедневных отчётов рекурсивной операцией, ограниченной daily/:
aws s3 rm s3://labex-report-delivery/daily/ --recursive
Вывод подтверждает два удаления отчётов. Удалите архив по полному ключу:
aws s3 rm s3://labex-report-delivery/archive/retention.txt
Подтвердите, что бакет пуст:
aws s3 ls s3://labex-report-delivery/ --recursive
Успешная команда без строк объектов подтверждает пустоту. Теперь aws s3 rb (remove bucket — удалить бакет) может удалить контейнер:
aws s3 rb s3://labex-report-delivery
Вывод — remove_bucket: labex-report-delivery. Проверьте оставшиеся бакеты:
aws s3 ls
Строк бакетов не осталось. AWS View показывает No buckets после успешного запроса состояния. Ваши локальные файлы отчётов остаются для просмотра; удаление ресурсов хранилища не удаляет эти локальные копии.
Резюме
Вы опубликовали локальный каталог отчётов в префиксе S3, повторили sync без изменений, загрузили изменённый и новый отчёты и сравнили полученное обновление с источником. Вы увидели, что обычный sync сохраняет лишние объекты назначения, затем предварительно просмотрели и выполнили зеркалирование с --delete, ограниченное daily/.
Архив пережил эту операцию, поскольку находился вне префикса назначения. Вы проверили новое состояние и сохранённые данные перед удалением всех ресурсов хранилища работы. В будущих процессах выбирайте источник, назначение и границы удаления до запуска sync.



