恢复误覆盖的作品素材

AWSBeginner
立即练习

介绍

新图片可能覆盖访客期望看到的内容。启用版本管理,发布提供好的错误草稿,恢复原图,并用实际页面确认效果。

请先完成私有素材连接实验。本节独立提供已通过角色读取图片的网站;版本管理与新增版本由你完成。 每节使用独立的新环境,无需保留上一节的资源、文件或凭据。工具、连接和无关素材均已准备好。

认证考点

认证 考试任务 练习内容
AWS Certified Cloud Practitioner (CLF-C02) Task 3.6 通过 S3 版本历史保留并恢复应用素材。

实验概览

概念图:从保存的 VersionId 取回原图,重新发布为当前图片。

保留正确封面的版本

本步骤,你将启用版本管理,并为正确的 AURA 封面创建有标识的版本。

打开网站,确认 AURA 显示护肤品包装,FORMA 显示蓝色椅子,ECHO 显示唱片。加载本节标识:

cd /home/labex/project
source website.env
echo "$PORTFOLIO_BUCKET"

S3 Versioning 为同一 Key 保留多个版本,普通读取返回最新版,指定 VersionId 则读取特定版。启用它:

aws s3api put-bucket-versioning --bucket "$PORTFOLIO_BUCKET" --versioning-configuration Status=Enabled

读回配置:

aws s3api get-bucket-versioning --bucket "$PORTFOLIO_BUCKET"

应看到 Status: Enabled。启用后不会补发早期上传的命名版本,四个提供好的对象保留 null 初始版。本节只为 images/aura-brand.webp 新增版本。

put-object 上传 --body 指定的文件。将新的 VersionId 保存并显示。行末反斜杠把同一条命令续到下一行,复制整个代码块:

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"

这个 ID 标识版本,不是 Key 或 Bucket。保留 Terminal 会话,后续恢复和清理使用它。刷新页面,AURA 包装图仍应正常。

观察错误的封面更新

本步骤,你将把选错的图片传到 AURA 的 Key,观察真实页面变化。

aura-draft.webp 包含 ECHO 的唱片图,相当于上传时选错文件。传到同一 Key 后会成为新的当前版本,早期版本仍保留:

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 卡片应显示唱片,而不是护肤品包装;AURA 标题没变,因此能直接看出图片不匹配。FORMA 与 ECHO 的图保持原样。

读取 Bucket 的版本清单:

aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"

只观察 Key: images/aura-brand.webp 的行,其他三个 Key 仍保留提供好的 null 版本。相同 Key 有不同 VersionId,IsLatest: true 指向当前版本。应有初始 null 与本节两个新增版本。历史来自 S3,本地副本不等于版本保护。

真实实验检查点示例,标识因环境而异。

恢复早期的 AURA 封面

本步骤,你将取回保存的正确版本,再把恢复的字节公开为新的当前对象。

get-object 取回对象,--version-id 选择早期正确版本,末尾文件名是本地目标:

aws s3api get-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION" recovered-aura.webp

比较原图与取回的字节:

cmp portfolio-assets/images/aura-brand.webp recovered-aura.webp

无输出表示一致。再次上传恢复的文件,并保存新版本 ID:

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 应重新显示护肤品包装。单独下载早期版不会改变线上对象,重新上传才让它成为当前版。错误版本仍在历史中,FORMA、ECHO 和 projects.json 没有改变。

真实实验检查点示例,标识因环境而异。

清理本节创建的版本

本步骤,你将仅移除三个新增版本,保留预置原图,并终止网站实例。

不带版本 ID 的删除可能创建 delete marker,而不是清除历史字节。本节使用保存的准确 ID,先删除恢复版本:

aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$RESTORED_VERSION"

删除错误草稿版本:

aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$DRAFT_VERSION"

删除第一步创建的正确命名版本:

aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION"

读取剩余历史:

aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"

AURA 的历史应只剩预置的 null 版本。保留它、其他两张封面、projects.json、Bucket 和参考数据;版本管理保持启用,初始图片仍完整。

终止一次性服务器并等待完成:

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"
aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"

AWS View 应显示 terminated,下一节独立提供网站与日志环境。

版本清单包含整个 Bucket;只检查 AURA 的 Key 是否只剩 null,其他三份素材的 null 保持不变。

总结

你启用 S3 版本管理,保存正确版本,观察错误覆盖,再把早期字节恢复为最新版本。实际网站确认恢复成功。清理时只删除本节新增版本,保留预置原图。

官方参考:S3 Versioning、取回对象版本。