桶、对象与区域
创建 S3 桶、上传对象、了解键命名方式,并了解 S3 如何在一个区域内复制数据。
桶、对象与区域 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是 Amazon S3?
Amazon Simple Storage Service (S3) 是 AWS 的对象存储服务,旨在从互联网上的任何位置存储和检索任意数量的数据。S3 通过在所选 Region 内的多个 Availability Zone 中使用多个设备冗余存储对象,提供11 个 9 的持久性(99.999999999%)。它可以无限扩展,没有容量限制,并支持大小从 0 字节到 5 TB 的对象。S3 是无数 AWS 架构的基础,可用于提供静态网站、构建数据湖、存储备份,以及执行更多操作。
S3 存储桶:顶层容器
S3 存储桶是用于存放对象的全局唯一命名容器。存储桶在特定 AWS Region 中创建,但其名称必须在全球所有 AWS 账户中保持唯一(因为名称会成为 URL 的一部分)。存储桶名称必须包含 3–63 个字符,使用小写字母,以字母或数字开头,且不能包含下划线或大写字母。最佳实践是加入您的账户 ID 或随机 Suffix,以避免与其他账户发生名称冲突。
# Create an S3 bucket in a specific region
aws s3api create-bucket \
--bucket my-company-data-20240101 \
--region us-west-2 \
--create-bucket-configuration LocationConstraint=us-west-2S3 对象和 Key
S3 中的对象由数据(文件内容)、Key(对象在存储桶中的唯一名称)、元数据(系统定义和用户定义的键值对)以及可选的版本 ID 组成(前提是已启用版本控制)。Key 是完整的类路径字符串,例如 photos/2024/summer/beach.jpg。S3 采用扁平结构——不存在真正的目录,只有看起来像目录的 Key 前缀。对象最大大小为 5 TB;对于大于 100 MB 的对象,请使用 Multipart Upload,以获得更好的性能和可靠性。
# Upload an object
aws s3 cp ./report.pdf s3://my-company-data-20240101/reports/2024/report.pdf
# List objects with a specific prefix
aws s3 ls s3://my-company-data-20240101/reports/2024/S3 URL 格式
S3 对象可以通过两种 URL 格式访问。路径式:https://s3.<region>.amazonaws.com/<bucket>/<key>(新存储桶已逐步弃用此格式)。虚拟主机式:https://<bucket>.s3.<region>.amazonaws.com/<key>(当前标准格式)。存储桶名称会成为子域名,因此存储桶名称必须符合 DNS 规范。对于预签名 URL 和 CloudFront 分配,您始终会看到虚拟主机式格式。理解 URL 结构有助于您正确配置存储桶策略和 CORS。
# Generate a pre-signed URL valid for 1 hour (3600 seconds)
aws s3 presign s3://my-company-data-20240101/reports/2024/report.pdf \
--expires-in 3600S3 数据一致性模型
自 2020 年 12 月起,Amazon S3 自动为所有 Region 中的所有操作提供强读后写一致性,包括新对象的 PUT、覆盖写入和 DELETE,且不收取额外费用。这意味着写入成功后,任何后续读取都会返回对象的最新版本。与之前的最终一致性模型相比,这是一个重大改进;它消除了写入后读取延迟或重试逻辑的需求,从而简化了应用程序设计。
S3 和 Region:数据驻留
创建 S3 存储桶时,您需要指定一个 Region,并且您的数据会保留在该 Region 中,除非您明确配置复制。AWS 会在该 Region 内的多个 AZ 之间复制数据,以提高持久性,但不会自动将数据移动到其他 Region。这种区域性数据驻留对于合规性非常重要:如果法规要求数据保留在 EU,请在 eu-west-1 或其他 EU Region 中创建存储桶,这样您的数据就不会离开 EU。
# Find the region of an existing bucket
aws s3api get-bucket-location \
--bucket my-company-data-20240101大型对象的 Multipart Upload
对于超过 5 GB 的对象,必须使用 Multipart Upload;对于超过 100 MB 的对象,建议使用该功能。它会将对象划分为多个分段(每个分段最小 5 MB,最多 10,000 个分段),独立地(并行)上传每个分段,然后将它们合并为最终对象。如果某个分段失败,您只需重试该分段。使用 aws s3 cp 命令处理大型文件时,AWS CLI 和 SDK 会自动处理分段上传——您无需手动实现。
# The CLI uses multipart automatically for large files
aws s3 cp large-file-50GB.tar.gz s3://my-bucket/ \
--storage-class STANDARD
# Or use s3api to control multipart manually
aws s3api create-multipart-upload \
--bucket my-bucket \
--key large-file-50GB.tar.gzS3 对象元数据
每个 S3 对象都有由 AWS 设置的系统元数据(Content-Type、Content-Length、ETag、Last-Modified),以及可选的用户定义元数据(以 x-amz-meta- 为前缀的自定义键值对)。元数据与对象一同存储,并会在下载对象时通过 HTTP 响应标头返回。Content-Type 对 Web 提供尤其重要——如果上传 HTML 文件时没有设置 Content-Type: text/html,浏览器可能会将其作为下载文件提供,而不是进行渲染。
# Upload with explicit Content-Type metadata
aws s3 cp index.html s3://my-website-bucket/ \
--content-type 'text/html' \
--metadata 'author=alice,env=production'使用 S3 托管静态网站
Amazon S3 可以充当静态网站主机,直接从存储桶提供 HTML、CSS、JavaScript、图像及其他文件。在存储桶属性中 Enable 静态网站托管,指定索引文档(index.html)和可选的错误文档(404.html)。存储桶的网站终端节点 URL 格式为:http://<bucket>.s3-website.<region>.amazonaws.com。如需 HTTPS 和自定义域名支持,请在 S3 静态网站存储桶前配置 CloudFront 分配。
# Enable static website hosting
aws s3api put-bucket-website \
--bucket my-website-bucket \
--website-configuration '{"IndexDocument":{"Suffix":"index.html"},"ErrorDocument":{"Key":"404.html"}}'S3 Transfer Acceleration
S3 Transfer Acceleration 会通过最近的 CloudFront Edge Location 路由数据,然后经由 AWS 的私有骨干网络将数据传输到 S3 存储桶所在的 Region,从而加快长距离对象上传。客户端不会直接上传到 S3 终端节点,而是上传到类似 my-bucket.s3-accelerate.amazonaws.com 的加速终端节点。Transfer Acceleration 会按 GB 收取少量费用,但对于地理位置距离存储桶所在 Region 较远的用户,可能显著提升上传速度。
# Enable Transfer Acceleration on a bucket
aws s3api put-bucket-accelerate-configuration \
--bucket my-company-data-20240101 \
--accelerate-configuration Status=EnabledS3 对象标记
对象标签是附加到 S3 对象上的键值对,用于对对象进行分类和管理。标签可用于:生命周期规则(转换带有特定标签的对象或使其过期)、访问控制(IAM 和存储桶策略根据标签值设置条件)、成本分配(Cost Explorer 按标签跟踪 S3 支出),以及清单和分析。每个对象最多可以拥有 10 个标签。标签可以在上传时添加,也可以在对象创建后更新,而不会修改对象本身的数据。
# Add tags to an existing object
aws s3api put-object-tagging \
--bucket my-company-data-20240101 \
--key reports/2024/report.pdf \
--tagging '{"TagSet":[{"Key":"env","Value":"production"},{"Key":"owner","Value":"finance"}]}'快速检查
测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。
课程回顾
在本课中,您学习了:S3 存储桶具有全局唯一的名称,并与特定 Region 关联;对象采用扁平的 Key 结构存储,并支持元数据和标签;以及 S3 通过多 AZ 冗余提供强读后写一致性和 11 个 9 的持久性。接下来,我们将学习使用存储桶策略和 ACL 控制 S3 访问。
常见问题解答
「桶、对象与区域」课时是免费的吗?
是的 — 「桶、对象与区域」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「桶、对象与区域」这节课中我会学到什么?
创建 S3 桶、上传对象、了解键命名方式,并了解 S3 如何在一个区域内复制数据。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「桶、对象与区域」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。