Введение
После отдельных объектов опубликуйте изменяющуюся коллекцию. Синхронизируйте ежедневные отчёты, отличите инкрементальную передачу от зеркалирования и удалите устаревший отчёт, не затрагивая отдельный архив.
Сначала выполните работу Упорядочьте документы с помощью ключей и метаданных, включая понятия бакета, ключа, префикса и скачивания. Эта новая 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. Ваша операция зеркалирования затронула только выбранный префикс.
Резюме
Вы опубликовали изменяющийся каталог через sync, проверили сохранённое обновление и просмотрели зеркалирование перед --delete. В итоговом daily/ остались отчёты понедельника и среды; отдельный архив не изменился. Перед публикацией выбирайте направление передачи и область назначения.
Подробнее см. в документации AWS: Выбор передачи, предварительный просмотр и область удаления в S3 sync.



