介绍
一个团队将财务和 HR 文档存储在同一个 S3 存储桶中。你将为它们设置有意义的名称和属性,读取一份报表,并删除财务组的文档,同时保留 HR 文档直到最终清理。
请先完成 在 S3 中存储和读取文件。这个全新 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 对象键、前缀与对象元数据。
选择对象键并上传团队文档
在本步骤中,你将在一个存储桶中使用有意义的对象键区分两个部门的文档。
本地目录在你的机器上保存文件;存储桶在 S3 中保存对象。使用 cd(更改目录)进入已准备好的工作目录:
cd /home/labex/project
提供的 documents 目录包含两个小型文本文件。cat 打印它们的内容,让你了解即将存储的数据:
cat documents/revenue.csv
month,revenue
2026-09,42000
CSV 文件用逗号分隔列。这里的两列是月份和收入;后面的每一行是一条记录。
cat documents/welcome.txt
Welcome to the reporting team.
使用 aws s3 mb(创建存储桶)创建桶。s3:// 标识存储位置,而不是本地路径:
aws s3 mb s3://labex-team-documents
命令报告 make_bucket: labex-team-documents。
财务对象键将为 finance/2026-09/revenue.csv。斜杠使名称易于分组,但 S3 不会创建文件系统目录:整个字符串是一个对象键。前缀 finance/ 将财务文档分组;更长的前缀 finance/2026-09/ 将范围缩小到一个月。
Content-Type 是描述文件媒体格式的标准元数据。text/csv 表示逗号分隔的文本。自定义元数据包含你自己的描述性键值对。这里的 department=finance 和 period=2026-09 描述报表,不会授予权限或改变内容。
这个示例将对象键的前缀与剩余名称分开展示;元数据属于对象。

aws s3 cp 将第一个路径复制到第二个路径。--content-type 显式设置格式。--metadata 接收用逗号分隔的 name=value 键值对。引号使元数据参数保持为一个整体。行尾的反斜杠让同一条命令继续到下一行:
aws s3 cp documents/revenue.csv s3://labex-team-documents/finance/2026-09/revenue.csv \
--content-type text/csv \
--metadata 'department=finance,period=2026-09'
上传消息包含目标对象键。为欢迎文档使用它自己的对象键和属性进行上传。text/plain 表示没有专门文档格式的普通文本:
aws s3 cp documents/welcome.txt s3://labex-team-documents/hr/welcome.txt \
--content-type text/plain \
--metadata 'department=hr'
使用 ls(列出)和 --recursive 显示整个桶中的完整对象键,而不是按类似文件夹的前缀分组:
aws s3 ls s3://labex-team-documents/ --recursive
两行分别以 finance/2026-09/revenue.csv 和 hr/welcome.txt 结尾;时间戳会有所不同。AWS View 显示同一个存储桶中的两个对象键。你通过名称组织了对象,无需为每个部门创建独立存储桶。
查看属性并读取报表
在本步骤中,你将选择一个部门的对象,查看元数据,并证明下载的报表与源文件一致。
aws s3api 提供单个 S3 API 操作。更高层的 aws s3 命令处理常见文件流程;两者操作相同的对象。list-objects-v2 列出对象记录。--bucket 指定容器,--prefix 将 S3 返回的对象键限定为以该字符串开头的键:
aws s3api list-objects-v2 --bucket labex-team-documents --prefix finance/
在 Contents 中找到 finance/2026-09/revenue.csv。响应中没有 HR 对象,因为 hr/welcome.txt 不以 finance/ 开头。前缀过滤名称,不过滤自定义元数据:仅有 department=finance 不会使名称不同的对象键进入这个结果。
head-object 读取对象属性,不下载正文。提供完整对象键,包括前缀:
aws s3api head-object --bucket labex-team-documents --key finance/2026-09/revenue.csv
响应包含设为 text/csv 的 ContentType、ContentLength(存储的字节数),以及包含 department 和 period 的 Metadata 对象。时间戳、ETag 等其他字段描述存储的对象。元数据与存储副本关联,不与原始本地文件关联。
在 AWS View 中,点击 finance/2026-09/revenue.csv。展开的卡片展示 Content-Type、自定义元数据和实际存储的 CSV 内容。将它们与 CLI 响应比较。
这个示例展示展开的财务对象,属性和内容都从存储中读取:

下载时,将 S3 URI 作为源,将新的本地文件名作为目标。目标名称不必与对象键相同:
aws s3 cp s3://labex-team-documents/finance/2026-09/revenue.csv retrieved-revenue.csv
查看读取到的内容:
cat retrieved-revenue.csv
它应显示与你之前查看的内容相同的两行 CSV。cmp 逐字节比较两个本地文件;匹配时没有输出。Shell 的 && 只在比较成功后显示消息:
cmp documents/revenue.csv retrieved-revenue.csv && echo 'Report content matches'
Report content matches
这证明读取保留了报表的字节内容。本地文件包含内容;需要查看存储在 S3 中的属性时,使用 head-object。
只删除财务前缀下的对象
在本步骤中,你将清除财务文档,同时保留 HR 文档。
共享存储桶可能包含无关工作。删除整个桶,或以桶根路径作为递归删除目标,会影响两个部门。应选择具体的 finance/ 前缀。末尾斜杠是前缀的一部分,可使 finance-archive.csv 等名称不在操作范围中。
aws s3 rm 删除对象。--recursive 将操作应用到全部匹配的对象键,--dryrun 列出计划操作,但不执行。先预览准确范围:
aws s3 rm s3://labex-team-documents/finance/ --recursive --dryrun
预演输出只包含 finance/2026-09/revenue.csv,不得包含 hr/welcome.txt。此时对象仍然存在。
移除 --dryrun,执行已检查的操作:
aws s3 rm s3://labex-team-documents/finance/ --recursive
输出确认财务对象键已删除。再次查询存储桶:
aws s3 ls s3://labex-team-documents/ --recursive
只剩下 hr/welcome.txt。在 AWS View 中展开剩余对象:欢迎消息和 department=hr 元数据未变。成功的列表查询和读取证明你删除了预定范围,同时保留了另一个部门的文档。
清理剩余实验资源
在本步骤中,你将删除剩余的实验文档和空存储桶。
财务操作期间,HR 对象受到保护。两个部门的资源都属于本练习,所以现在可以按准确对象键删除剩余对象,无需使用宽泛的递归目标:
aws s3 rm s3://labex-team-documents/hr/welcome.txt
输出确认 HR 对象键已删除。删除容器前,检查桶内内容:
aws s3 ls s3://labex-team-documents/ --recursive
命令成功,没有对象行。只有存储桶为空时,rb(删除存储桶)才能删除它:
aws s3 rb s3://labex-team-documents
输出为 remove_bucket: labex-team-documents。确认存储服务仍响应:
aws s3 ls
在这个全新工作区中,没有存储桶行。AWS View 显示 No buckets;Unavailable 消息则表示页面无法确定状态。本地源文档和下载文档仍可用于检查。
总结
你通过完整对象键和前缀组织了两个部门的文档,设置了标准和自定义元数据,通过 S3 API 查看属性,并比较下载字节与源文件。你还预览了限定前缀的删除操作,保留无关文档,并清理剩余实验资源。
使用前缀按名称进行可预测的分组,使用元数据描述对象。有意识地选择删除范围,并验证应当保留的资源。



