Введение
Включите версии S3, опубликуйте неверный черновик, верните прежние байты и удалите только свои версии.
Сначала выполните предыдущие работы портфолио. Среда предоставляет собственные ресурсы и необходимые возможности прежних этапов. Переносите знания, а не экземпляры, файлы или учётные данные.
Связь с сертификацией
| Сертификация | Задачи | Практика |
|---|---|---|
| AWS Certified Cloud Practitioner (CLF-C02) | Task 3.6 | Сохранять и восстанавливать содержимое с версиями S3. |
Обзор

Сохраните правильную версию
На этом шаге вы включите версии и сохраните VersionId. Сначала проверьте AURA. Обычное чтение возвращает актуальную версию, VersionId выбирает определённую. Проверьте косметическую упаковку на обложке AURA. Четыре начальные версии имеют ID null; новые версии создаются только для images/aura-brand.webp.
Перейдите в проект.
cd /home/labex/project
Загрузите и покажите bucket.
source website.env
echo "$PORTFOLIO_BUCKET"
Включите Status=Enabled.
aws s3api put-bucket-versioning --bucket "$PORTFOLIO_BUCKET" --versioning-configuration Status=Enabled
Прочитайте Enabled. Ранее созданный объект сохраняет null; включение не выдаёт ему новый ID задним числом.
aws s3api get-bucket-versioning --bucket "$PORTFOLIO_BUCKET"
put-object загружает файл body; сохраните и покажите ORIGINAL_VERSION. Обратная косая черта в конце переносит продолжение той же команды на следующую строку.
ORIGINAL_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body portfolio-assets/images/aura-brand.webp --content-type image/webp \
--query VersionId --output text)
echo "$ORIGINAL_VERSION"
Проверьте косметическую упаковку на обложке AURA. Четыре начальные версии имеют ID null; новые версии создаются только для images/aura-brand.webp.
Наблюдайте неверное обновление
На этом шаге вы опубликуете намеренно неправильный черновик под тем же Key.
Загрузите aura-draft.webp и сохраните DRAFT_VERSION.
DRAFT_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body aura-draft.webp --content-type image/webp \
--query VersionId --output text)
echo "$DRAFT_VERSION"
aura-draft.webp содержит изображение пластинки ECHO. После загрузки в Key AURA карточка показывает пластинку вместо косметики. FORMA и ECHO остаются прежними; правильная ранняя версия сохраняется в S3. Список содержит версии бакета. Проверяйте строки с Key images/aura-brand.webp; три остальных Key сохраняют null.
aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"
aura-draft.webp содержит изображение пластинки ECHO. После загрузки в Key AURA карточка показывает пластинку вместо косметики. FORMA и ECHO остаются прежними; правильная ранняя версия сохраняется в S3.

Верните прежнее изображение
На этом шаге вы получите сохранённую версию и опубликуете её байты как текущие.
get-object с version-id выбирает ORIGINAL_VERSION; последнее имя — локальное назначение.
aws s3api get-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION" recovered-aura.webp
cmp без вывода подтверждает совпадение байтов.
cmp portfolio-assets/images/aura-brand.webp recovered-aura.webp
Загрузите восстановленный файл и сохраните RESTORED_VERSION.
RESTORED_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body recovered-aura.webp --content-type image/webp \
--query VersionId --output text)
echo "$RESTORED_VERSION"
Обновите: AURA снова показывает косметику. Скачивание само не меняет текущую версию; публикация восстановленных байтов создаёт RESTORED_VERSION. FORMA, ECHO и projects.json сохраняются.

Удалите учебные версии
На этом шаге вы удалите ровно три новые версии, сохранив null. Удаление Key без ID может добавить delete marker, а не удалить исторические байты.
Удалите только RESTORED_VERSION.
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$RESTORED_VERSION"
Удалите только DRAFT_VERSION.
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$DRAFT_VERSION"
Удалите только ORIGINAL_VERSION из первого шага.
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION"
Убедитесь, что остался лишь null. Список содержит версии бакета. Проверяйте строки с Key images/aura-brand.webp; три остальных Key сохраняют null.
aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"
Завершите временный сервер.
aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"
Дождитесь конечного состояния.
aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"
Сохраните bucket, исходный null и контрольные данные. Версии остаются включены. Следующая работа независима.
Резюме
Вы вернули изображение из сохранённой версии и удалили только созданные в упражнении версии.
Официальные источники: S3 Versioning, retrieving object versions.



