桶和对象
让我们详细讨论S3中桶和对象的各个方面。
存储桶
从一般意义上讲,__存储桶__ 是由 AWS S3 提供并可用的公共云存储资源。 存储桶类似于文件或文件夹,它们包含数据以及一些描述性元数据。存储桶本质上是对象的容器,并提供对自身的访问管理控制。

存储桶的特性
- 用作存储对象的容器。
- 我们为存储桶分配的名称必须在全球范围内唯一,因为所有 AWS 账户共享相同的 DNS 兼容命名空间。
- 默认情况下,每个账户最多可创建 100 个存储桶。
- 通过提交支持工单,可以将默认限制提升至 1000 个。
- 为了确保 S3 数据能够以低延迟访问,应将存储桶部署在靠近我们地理位置的位置。
- 存储桶的区域只能在创建时选择,一旦创建后无法更改。
- 存储桶的所有权不能从一个 AWS 账户转移到另一个账户。
- 存储桶不能嵌套,即无法在一个存储桶内创建另一个存储桶。
- 只能删除空的存储桶,这意味着只有当存储桶中不包含任何对象时才能被删除。
存储桶的命名规则
- 存储桶名称长度必须在 3 到 63 个字符之间。
- 名称只能包含小写字母、数字、点号和连字符。
- 名称必须以字母或数字开头和结尾。
- 名称不能采用 IP 地址格式,例如:
127.8.45.12。
存储桶的用途
- 数据存储
- 数据归档
- 数据备份
- 灾难恢复
- 静态网站托管
- 应用程序托管
- 存储数据的分析
- 数据湖
- 移动应用程序
- 物联网(IoT)设备
- 媒体托管(图片、视频、音频等)
上述大部分应用场景已在前一章中讨论过。
对象
__对象__ 是我们上传到存储桶中的数据文件。我们可以上传到存储桶的数据包括但不限于图像文件、视频文件、文本文件和文件夹。这些数据文件本身包含描述其特性的元数据。
我们可以在对象上执行多种操作,例如上传、下载、删除或移动对象。

对象的特性
- 对象是上传到存储桶中的文件,包含描述数据文件的元数据。
- 每个对象包含三部分:数据、键(key)和元数据。
- 对象可以被读取、下载和移动。
- 每个对象都有一个唯一的键值,用于单独标识该对象。
- 对象大小可以从 0 KB 到 5 TB 不等。
- 上传到 S3 的任何文件都会以 S3 对象的形式存储。
- 通过 AWS 管理控制台,最大可上传 160 GB 的文件作为对象。
- 若需上传超过 160 GB 的文件,必须使用 AWS CLI、AWS SDK 或 AWS REST API。
- 下载 S3 对象时会产生数据传输费用。
对象的组成部分
键(Key)
键 是为每个对象分配的唯一名称。键用于区分不同的对象。
版本 ID
S3 会为对象生成一个版本 ID(字符串),并将其分配给该对象。键与版本 ID 的组合用于唯一标识对象。
元数据
元数据 是一组键值对,例如:
1{ 2 name: "object1" 3 key : "value" 4}
这是与存储在键值对中的数据文件相关的信息。
值(Value)
值 指的是存储在存储桶中的内容,即字节序列。其大小范围从 0 KB 到 5 TB。
子资源(Subresources)
如其名称所示,子资源 与其它资源(如对象或存储桶)相关联,用于存储特定于对象的信息。
访问控制信息
默认情况下,存储桶中的对象是私有的。但可以根据需要更改访问权限。访问控制信息 是用于控制其他用户访问对象的依据。
上传对象
上传方式
- 可以使用 AWS SDK、AWS REST API 或 AWS CLI 在一次操作中上传对象。
- 如果希望将单个对象作为一个整体上传,可通过 AWS 管理控制台轻松完成;若需分块上传,则需使用 AWS SDK、AWS REST API 或 AWS CLI。
删除对象
对象删除可通过以下任意方式实现:
- AWS 管理控制台
- AWS SDKs
- AWS REST API
- AWS CLI
删除选项
- 删除单个对象
- 批量删除多个对象
键(Key)
我们可以在一个存储桶中上传多个对象。但如果这样做,就需要能够区分这些对象。
为了在存储桶中区分多个对象,每个对象都会被分配一个唯一的标识符,称为“键”。每个存储桶中的对象都有且仅有一个键。
正如姓名、学号和班级共同定义一名学生一样,存储桶名、键和版本 ID 的组合可以唯一标识每一个对象。
