介绍
新图片可能覆盖访客期望看到的内容。启用版本管理,发布提供好的错误草稿,恢复原图,并用实际页面确认效果。
请先完成私有素材连接实验。本节独立提供已通过角色读取图片的网站;版本管理与新增版本由你完成。 每节使用独立的新环境,无需保留上一节的资源、文件或凭据。工具、连接和无关素材均已准备好。
认证考点
| 认证 | 考试任务 | 练习内容 |
|---|---|---|
| AWS Certified Cloud Practitioner (CLF-C02) | Task 3.6 | 通过 S3 版本历史保留并恢复应用素材。 |
实验概览

保留正确封面的版本
本步骤,你将启用版本管理,并为正确的 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、取回对象版本。



