在 S3 中保存作品素材

AWSBeginner
立即练习

介绍

作品站需要保存图片和作品清单。创建私有 S3 存储,上传素材并取回副本,确认保存的内容没有变化。

请先完成前三节。本节提供新网站与本地素材;下一节再通过实例角色连接私有图片。 每节使用独立的新环境,无需保留上一节的资源、文件或凭据。工具、连接和无关素材均已准备好。

认证考点

认证 考试任务 练习内容
AWS Certified Cloud Practitioner (CLF-C02) Task 3.6 使用 S3 对象存储保存应用素材,并区分存储与 EC2 计算。

实验概览

概念图:本地素材上传到私有 S3,再取回并检查字节。

创建私有作品存储

本步骤,你将创建一个 S3 Bucket,并明确启用公开访问阻止。

EC2 运行网站代码。Amazon S3 将文件作为对象(object)保存在Bucket中。计算与存储分开后,素材不必只有服务器上的一份副本。

进入准备好的目录:

cd /home/labex/project

加载本节标识并显示 Bucket 名称:

source website.env
echo "$PORTFOLIO_BUCKET"

PORTFOLIO_BUCKET 是为本节准备的唯一名称,Bucket 尚未创建。S3 Bucket 名称在 AWS 分区中必须全局唯一,因此使用这个名称,不要改成常见的 portfolio。

CLI 的 s3 提供便捷文件操作;mb 表示创建 Bucket,s3:// 表示 S3 位置:

aws s3 mb "s3://$PORTFOLIO_BUCKET"

应出现 make_bucket 确认。当前连接使用 us-east-1,新 Bucket 也位于该 Region。

新的 S3 存储默认私有。Block Public Access 防止公开 ACL 或策略意外开放访问。查看提供好的四项配置:

cat private-access.json

每个 true 启用一项保护。通过较底层的 s3api 操作应用该文件:

aws s3api put-public-access-block --bucket "$PORTFOLIO_BUCKET" --public-access-block-configuration file://private-access.json

读回配置:

aws s3api get-public-access-block --bucket "$PORTFOLIO_BUCKET"

确认四项均为 true。AWS View 应出现你的 Bucket,显示 No objects。另一个 reference Bucket 保存无关数据,不要修改它。

上传并取回设计素材

本步骤,你将保存设计师网站的三张封面和作品列表,再取回与原文件完全一致的 AURA 封面。

准备好的 portfolio-assets/ 包含四个文件:images/aura-brand.webp 是 AURA 护肤品牌封面,images/forma-chair.webp 是蓝色家具封面,images/echo-record.webp 是唱片视觉封面,projects.json 提供作品详情的标题、说明和图片引用。

WebP 是网页使用的一种图片格式。网站代码、字体和编译好的 Tailwind CSS 已准备好,无需安装前端工具、生成图片或编写网页。

对象的 Key 是它在 Bucket 中的名称。images/aura-brand.webp 使用 images/ 前缀,但 S3 并不需要真正的文件夹。cp 表示复制,--recursive 复制本地目录内的所有文件,并保留相对路径作为对象名称:

aws s3 cp portfolio-assets/ "s3://$PORTFOLIO_BUCKET/" --recursive

应看到四条 upload,分别说明源文件与目标位置。读取对象列表:

aws s3api list-objects-v2 --bucket "$PORTFOLIO_BUCKET"

在 Contents 中确认上面的四个 Key,AWS View 应显示相同清单。大小与时间可以不同。

反向复制 AURA 封面到另一个本地文件名:

aws s3 cp "s3://$PORTFOLIO_BUCKET/images/aura-brand.webp" downloaded-aura.webp

cmp 比较文件字节,一致时没有输出:

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

没有输出并返回提示符,说明图片从存储原样取回。若不同,检查 Key 并重新上传提供好的原图。

私有存储任务已完成,网站暂时仍读取服务器上的本地图片与作品列表。下一节再为应用授权 S3 读取;不要公开 Bucket。

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

仅清理自己的作品存储

本步骤,你将删除四个上传对象、空 Bucket 和网站实例,保留参考数据。

只使用刚检查过的 PORTFOLIO_BUCKET。rm --recursive 删除这个自有 Bucket 的全部四个对象,不要把名称换成参考 Bucket:

aws s3 rm "s3://$PORTFOLIO_BUCKET/" --recursive

应看到四条 delete。rb 删除空 Bucket:

aws s3 rb "s3://$PORTFOLIO_BUCKET"

显示实例 ID,并对照 AWS View:

echo "$INSTANCE_ID"

仅终止该服务器:

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

等待完成:

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

AWS View 应不再显示自己的 Bucket,实例为 terminated。参考 Bucket 与 keep.txt 必须保留,准备好的网络也不删除。下一节提供独立的新资源。

总结

你创建私有 S3 Bucket,上传图片和作品清单,并确认下载副本与原图一致。你区分计算与存储,并仅清理指定资源。

官方参考:S3 对象、CLI 的 S3 文件命令、Block Public Access。