ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AWS学习与实践系列(四):Amazon S3 入门与实践

AWS学习与实践系列(四):Amazon S3 入门与实践

系列文章目录

第一章:AWS账号注册
第二章:IAM权限操作介绍
第三章:Amazon EC2介绍与实践
第四章:Amazon S3介绍与实践(本文)
第五章:AWS Lambda介绍与实践
第六章:AWS Glue介绍与实践
第七章:AWS数据处理联动Demo实践
本系列主要记录个人学习AWS过程中的基础知识、实际操作、遇到的问题以及学习心得。随着后续学习,将持续更新系列内容。


文章目录

  • 系列文章目录
  • 前言
  • 一、Amazon S3 是什么?
  • 二、S3 中几个重要的基本概念
    • 1.Bucket
    • 2.Object
    • 3. Object Key
    • 4. S3 中的“文件夹”
  • 三、创建我的第一个 S3 Bucket
    • 1. 进入 S3 Console
    • 2. 设置 Bucket Name
    • 3. 选择 AWS Region
  • 四、Block Public Access 设置
  • 五、创建 Bucket
  • 六、向 S3 上传第一个文件
  • 七、下载 S3 中的文件
  • 八、理解 S3 URI
  • 九、S3 Storage Class 初步认识
  • 十、S3 Versioning
  • 十一、S3 权限控制
  • 十二、删除测试 Object
  • 十三、删除测试 Bucket
  • 总结

前言

在上一篇中,我学习并实际操作了 Amazon EC2,完成了 EC2 实例创建、安全组配置以及连接测试。
这一篇继续学习 AWS 中另一个非常重要、也是实际项目中经常使用的服务:
Amazon S3(Amazon Simple Storage Service)
S3 和 EC2 的用途并不相同:
・EC2:提供计算能力,可以理解为云上的服务器
・S3:提供对象存储能力,用于保存文件、图片、日志、数据集、备份等各种数据
在我目前接触到的 AWS 数据处理场景中,S3 也是非常基础的一环。后续学习Lambda、Glue、Athena 以及数据处理 Demo时,都可能继续与 S3 配合使用。
因此,这一篇先从 S3 的基本概念开始,通过实际创建 Bucket、上传文件、创建文件夹、下载和删除对象等操作,熟悉 Amazon S3 的基本使用方式。


一、Amazon S3 是什么?

Amazon S3,全称:Amazon Simple Storage Service
它是 AWS 提供的对象存储服务(Object Storage)。
简单来说,我们可以把各种数据保存到 S3 中,例如:
・图片
・CSV
・JSON
・日志文件
・ZIP 压缩包
・文档
・备份文件
・数据处理过程中产生的输入/输出数据
但是需要注意:S3 并不能简单地理解成“云上的硬盘”。
传统硬盘或 EC2 的 EBS 通常属于块存储(Block Storage),而 S3 属于对象存储(Object Storage)。
在 S3 中,每一个文件都会作为一个Object(对象)来进行管理。

二、S3 中几个重要的基本概念

在真正开始操作之前,我先整理一下 S3 中几个最基础的概念。

1.Bucket

Bucket 可以理解为 S3 中用于保存对象的顶层容器。
例如:

my-aws-study-bucket

我们上传到 S3 中的数据都会存放在某个 Bucket 里面。
例如:

my-aws-study-bucket ├── test.txt ├── sample.csv └── images/└── aws.png

需要注意:Bucket Name 有自己的命名规则,而且创建 Bucket 时还需要选择 AWS Region。

2.Object

实际存储在 S3 中的数据称为:Object(对象)
例如上传的【test.txt】,这个文件在 S3 中就是一个 Object。

一个 S3 Object 不只是文件内容本身,还会包含该对象相关的信息,例如:
・Object Key
・Metadata
・Size
・Storage Class 等

3. Object Key

Object Key 可以简单理解为:对象在 Bucket 中的唯一名称。
例如【images/aws.png】就是这个对象的Key。

4. S3 中的“文件夹”

我们在 S3 Console 中会看到类似:

data/images/logs/

看起来和 Windows、Linux 中的目录非常相似。
但是从对象存储的角度来看,可以把它理解为使用 Object Key 的前缀形成了类似目录的组织方式。
例如:

data/sample.csv

可以理解为:

Bucket └── data/└── sample.csv

这也是为什么学习 S3 时需要逐渐建立 Bucket + Object + Key 的概念,而不只是按照传统文件系统来理解它。

三、创建我的第一个 S3 Bucket

了解基本概念以后,开始实际操作。

1. 进入 S3 Console

登录 AWS Management Console,在搜索框中输入:S3
选择:Amazon S3

进入 S3 管理页面。
然后点击:Create bucket
开始创建 Bucket。

2. 设置 Bucket Name

例如学习环境中可以使用:my-aws-study-s3-xxxx
我这里会给自己的学习 Bucket 设置一个容易识别的名称。

注意
S3 的 Bucket Name 有明确的命名规则。如果输入的名称不可用,AWS Console 会给出提示。因此实际创建时,按照 Console 的提示调整名称即可。

3. 选择 AWS Region

接下来选择 Bucket 所在的:AWS Region
这里我建议学习阶段先保持和前面创建 EC2 时使用的 Region 一致,这样以后进行:

EC2 ↓ S3 ↓ Lambda

这样的组合实践时,也比较容易管理自己的学习资源。

四、Block Public Access 设置

创建 S3 Bucket 时,会看到一个非常重要的设置:
Block Public Access settings for this bucket
也就是:
阻止公共访问(Block Public Access)
对于当前只是个人 AWS 学习和实验使用的 Bucket,我会继续保持:
Block all public access开启。

※如果没有明确的公开访问需求,就不应该为了“方便访问”而随意将 S3 Bucket 设置为 Public。

五、创建 Bucket

其他暂时不需要调整的设置,我先保持默认。
最后点击:Create bucket 完成创建。

创建成功之后,就可以在 Bucket 列表中看到刚刚创建的 Bucket。
至此,自己的第一个S3 Bucket就已经创建成功了。

六、向 S3 上传第一个文件

Bucket 创建完成以后,接下来做一个最简单但非常重要的操作:上传文件
进入刚刚创建的 Bucket。点击:Upload
然后准备一个本地测试文件,把它上传到 S3。


当然也可以创建文件夹并上传,让存储的文件分类更有层次感。

七、下载 S3 中的文件

接下来测试一下下载。
选择:上面上传的test.txt对象文件点击,看到下面的详细界面。
点击下载安久下载到本地即可。

八、理解 S3 URI

使用 S3 时,经常会看到这种地址:s3://my-aws-study-s3-xxxx/data/sample.csv
这个就是经常使用的:S3 URI
可以拆开理解:

s3://↓ my-aws-study-s3-xxxx ↓ data/sample.csv

也就是:s3://Bucket名称/Object Key
以后使用:
・AWS CLI
・Python boto3
・AWS Glue
・Amazon Athena
・AWS Lambda
等服务访问 S3 时,经常都会遇到类似的 S3 路径。

九、S3 Storage Class 初步认识

在 S3 中,并不是所有数据都必须采用相同的存储方式。
AWS 提供了不同的:Storage Class
来适应不同的数据访问需求。
例如有些数据:
・经常访问
・偶尔访问
・长期归档
・很长时间才会使用一次
这些场景对于存储成本、访问方式等方面的要求是不一样的。
对于我现在的入门学习阶段,并不需要马上记住每一种 Storage Class 的全部细节。
但要意识到:S3 不只是“把文件放进去”,实际架构设计中还需要考虑数据访问频率、保存周期以及成本。

十、S3 Versioning

S3 还有一个很有用的功能: Bucket Versioning
开启 Versioning 后,可以保留同一个 Object 的不同版本。
例如:sample.csv
第一次上传一个版本,之后重新上传同名 Object 时,可以形成不同版本。
这对于:
・防止误覆盖
・数据恢复
・数据版本管理
等场景非常有价值。
不过 Versioning 开启以后,也需要注意旧版本对象仍可能带来存储成本。

十一、S3 权限控制

学习 S3 时,还有一个非常重要的话题:
谁可以访问我的 Bucket 和 Object?
这就会再次涉及上一篇之前学习过的 IAM。
S3 的访问控制可能涉及:
・IAM User
・IAM Role
・IAM Policy
・Bucket Policy
・Block Public Access
・Object Ownership 等
因此前面学习的 IAM 并不是一个独立章节,而是会贯穿后面的 AWS 服务。
关系大概是:

IAM │ └── 控制“谁可以做什么” │ ↓ S3 │ ├── 创建 Bucket ├── 上传 Object ├── 下载 Object └── 删除 Object

这让我们对 IAM 的用途也比单独学习的时候更加直观。

十二、删除测试 Object

测试结束以后,我们可以尝试删除刚刚上传的文件。
选择测试 Object:test.txt
执行:Delete

按照 Console 的提示完成删除。

※删除测试数据前确认它确实是不再需要的数据。

十三、删除测试 Bucket

如果这个 Bucket 后面不再继续使用,可以在确认测试对象全部处理完成后删除测试 Bucket。
不过如果下一篇 Lambda 准备继续用这个 Bucket 做实验,也可以先保留它。
例如第五篇可以直接使用:

S3 ↓ 上传文件 ↓ 触发 Lambda ↓ Lambda 处理 Event ↓ 输出日志到 CloudWatch Logs

总结

通过这次 S3 学习和实际操作,我完成了:
・创建 S3 Bucket
・理解 Bucket、Object 和 Object Key
・上传测试文件
・创建类似目录的对象组织方式
・下载 Object
・理解 S3 URI
・初步认识 Storage Class
・初步认识 Versioning
・了解 S3 权限控制思路
・删除测试 Object
学习 S3 之前,我们比较容易把它理解为:
“AWS 上保存文件的地方。”
但实际学习以后,我觉得更准确的理解应该是:
S3 是 AWS 中非常基础的对象存储服务,同时也是很多数据处理、Serverless 和分析架构中的重要数据存储基础。
更重要的是,我开始把之前学习的几个 AWS 概念连接起来:

IAM → 控制访问权限 EC2 → 提供计算能力 S3 → 提供对象存储能力

这样学习以后,AWS 中不同服务之间的关系也开始逐渐清晰起来。
最后附上一张一起学习的小伙伴用AI总结的S3内容供参考。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进