继上次在 亚马逊云科技 页面试用了 EC2 云主机 之后,最近又试用了 亚马逊云科技 的对象存储服务 Amazon S3。和上次一样,我把试用的过程记录下来,希望对你有用。
对象存储的概念
在介绍如何使用亚马逊云科技的对象存储服务之前,我们应当建立对象存储的概念。对象存储和我们更为熟悉的文件存储一样,都是存储数据的形式。我们首先回顾一下日常使用的文件存储。
文件存储
一个文件在操作系统里看起来是个图标,可以拷贝到移动硬盘上、通过网络分享给同伴,可以组织为树形结构:文件放在文件夹中,文件夹又可以放在更高一级的文件夹里。这一切都非常符合人类的直觉,如下图所示:
( ☝树状的组织形式 )
文件存储还有一个特点,就是自带元信息,比如文件格式、协议版本、文件大小、访问权限、创建时间等,这些元信息都随着文件的 “图标” 一起携带或者修改。
( ☝Windows 中显示的文件元信息 )
以二进制角度观察一个文件,就能看到文件的开头部分并不是数据,而是保存着很多元信息。比如 PDF 文件格式,总是以 %PDF
开头,用 xxd
命令查看:
$ xxd dictionary.pdf
00000000: 2550 4446 2d31 2e35 0a25 e2e3 cfd3 0a0a %PDF-1.5.%......
00000010: 3120 3020 6f62 6a0a 3c3c 2f54 7970 6520 1 0 obj.<</Type
00000020: 2f43 6174 616c 6f67 0a2f 5061 6765 7320 /Catalog./Pages
00000030: 3220 3020 520a 2f50 6167 654c 6179 6f75 2 0 R./PageLayou
00000040: 7420 2f54 776f 436f 6c75 6d6e 5269 6768 t /TwoColumnRigh
00000050: 740a 2f4f 7574 6c69 6e65 7320 3636 3320 t./Outlines 663
00000060: 3020 523e 3e0a 656e 646f 626a 0a0a 3636 0 R>>.endobj..66
……
可以看到,文件的开头以 ASCII 码形式记录了文件的格式(PDF)、协议的版本(1.5),还有数据段长度等信息。这些信息随着文件的数据一起复制、传输。
这样的存储方式,对人类非常友好,方便复制、传输、权限控制。但是,在文件数量增多的时候,元信息产生的存储开销便不可忽略,而且按照元信息中的字段 搜寻文件的过程 比如找出一个月内创建的所有文件 会变得非常耗时,从而遇到性能瓶颈。另外,单个文件的大小受到 许多因素限制, 比如 FAT32单个文件大小限制 4GB,最大文件数量:228-19 而不能无限制的增长。
打个比方
文件就像快递包裹,内容物就是要传送的数据,外包装箱上自带了标签,标签上记录了订单号、寄件人、收件人等与此包裹相关的所有信息。这样包装的好处就是方便运输、派送,方便集中在更大的邮包里,进一步可以放进卡车、集装箱里运输,而且外观符合寄件人和收件人的感受,是最直观的存储方法。
( ☝自带标签的快递包裹 )
然而没有免费的午餐,方便总是有代价的:每个包裹都必须包含外面的纸盒和里面的泡沫,还有纸盒内的空隙,这些都是除了内容物以外的开销。当快递包裹数量多起来后,这些开销的数量便不可忽略,加在一起会占据很大的存储空间,使存储效率低下的问题摆在桌面上,于是我们经常会听说 “双11” 时快递站的 “爆仓”。
( ☝爆仓的包裹 )
另外,树状的管理结构虽然符合人类组织管理的直觉,但是在寻找单个包裹时,却增加了难度,就像你要去 “快递转运中心” 寻找属于自己的包裹一样,需要按层级找到某一辆卡车、集装箱、邮包,才能找到自己想要的。同样的,寻找单个文件时,必须先找到其上层所有父级目录。
为了解决上述问题,发展出了另一类存储方法。货物 紧密的、平等地 放在一起,没有空隙、没有层级关系。就像宜家的货仓:
( ☝宜家的货架 )
宜家展厅内的标签上方白色部分记录了货物的元信息,下方的红色部分则标记了位于仓库里的位置,方便顾客在仓库中寻找。
( ☝宜家的标签 )
比如上图中的货物元信息可以表示为:
{
"Catetory": "Children's chair",
"Name": "MAMMUT",
"Colour": "Pink",
"descriptions":[
"Perfect for small children...",
"Easy to assemble,...",
],
"AvailbleColours":[
"Red",
"White",
"Blue"
],
"Price": 799,
"Designers":[
"M Kjelstrup",
"A Ostgaard",
]
}
这些元信息可以贴在货物上,作为货物的基本描述。下面会了解到,对象存储的元信息是随着存储对象一起保存的。
上图标签中的索引位置可以如下表达:
{"SELF_SERVE AREA": "603.823.22", "RACK": 4, "LOC": 4}
很明显这种存储形式的空间效率高,可以存放很大尺寸的货物,不限制货物类型。对应到数据存储上来,就是对存储的数据规模和数据类型不作限制。
又比如停车场,其内容物就是一辆辆紧密排列的汽车,只要停车场面积够大,对车子的类型并没有限制,你可以停放摩托车、小汽车、大卡车甚至坦克、飞机,停放好之后,只需要记录车位的号码就可以随时找到。
( ☝车位编号 )
以上就是对象存储的思想。
对象存储
对象存储的思想总结下来有这些特点:
- 数据集中存放,扁平化组织,没有树状的形式,不需要关心确切存储的位置,就像你拿着标签到停车场取车,并不需要关心车子停在哪一层。 该沿着怎样的路径才能找到 相比之下,从文件系统中获取文件时就必须提供准确的路径
- 用唯一的标签索引数据
- 适合 一次写入,多次读取 WORM, Write-Once,Read-Many
- 由于存储效率高,单位容量的价格比文件存储低
- 方便以 Rest API 方式读取
- 一旦写入,数据便不能修改
对象存储的应用场合有
- 一次写入、多次读取
- 大规模分发数据(如CDN)
- 大数据分析
- 用于人工智能的训练数据
- 云备份存档
一些对象存储的术语
和文件存储一样,对象存储也有符合自身特点的一些术语。了解了对象存储的概念后,就容易明白对象存储的术语了。下面简单介绍:
数据桶(Bucket)
上面提到,对象存储的数据是扁平化组织的,没有树状的层级结构。这个扁平化组织的 “场地” 就称为 “存储桶”。在存储桶内,对存放内容的数据容量、对象个数、数据格式、数据类型几乎都没有限制,用户不需要考虑底层的种种 限制因素。 比如操作系统类型、物理硬盘的大小 关于 Amazon S3 的存储桶,可以参考 这篇文档。
存储对象(Object)
存储对象就是真实存储的内容,正像前面提到的停车场模型,一个对象只需要两部分:数据和元数据。关于 Amazon S3 的存储对象,可以参考 这篇文档。
键(Key)
获取存储对象的数据,只需要一个数据桶内唯一标识符即可。这个标识符称为 “键”。从这个角度看,可以把数据桶看作从 “键” 到 “存储对象” 的一张映射表。关于 Amazon S3 的键的使用,可以参考 这篇文档。
版本控制(Versioning)
对象存储的数据桶本质上是一张映射表,修改映射关系的操作相对比较容易,所以对象存储可以很方便的保留数据的每次修改。对于用户来说,备份、还原指定版本都 非常方便。 相比之下,文件系统默认不提供版本控制:同名文件被覆盖后,正常情况下是无法找回的 默认情况下,Amazon S3 禁用版本控制,如果需要可以明确的启用即可。关于 Amazon S3 的版本控制,可以参考 这篇文档。
REST API
一种使用 HTTP 访问对象存储的方式,与编程语言无关。当存储服务开放 REST API 后,用户就可以使用客户端或者自己编写程序,以标准的 HTTP 接口方便地创建数据桶、提取存储数据、删除对象等等 操作。 相比之下,文件系统默认不提供 HTTP 接口,对文件的增删改查必须通过操作系统提供的接口。
SDK
为了方便用户以编程形式请求 REST API,对象存储服务商还会提供各类编程语言的 SDK 和示例代码。SDK将底层的 HTTP 请求语句封装为简单的语句,大大简化了用户的编程任务。
Amazon S3 简介
亚马逊云科技 的 S3 服务是 Simple Storage Service 的简称。Amazon S3 已经成为事实上的行业标准,其他公司在推出对象存储服务时,总是不约而同的声明兼容Amazon S3接口。Amazon S3 提供的存储服务、访问管理、安全性、日志监控等等功能为用户提供了可靠的数据保障。
根据亚马逊云科技的页面显示,目前 Amazon S3 免费试用的配额是:
您可以免费开始使用 Amazon S3。注册后,亚马逊云科技 新客户将每个月获得 S3 Standard 存储类中的 5GB Amazon S3 存储空间、20,000 个 GET 请求、2,000 个 PUT、COPY、POST 或 LIST 请求以及 100 GB 的数据传出量。
准备工作
为了能顺利试用 Amazon S3 对象存储云服务器,需要事先具备以下条件:
一台联网的电脑
创建存储桶
进入控制台后,点击左上角的服务按钮,从菜单中部找到 “存储”,就可以在子菜单里找到 S3,如下图所示:
( ☝菜单入口 )
控制台中会列出你当前拥有的存储桶。
( ☝存储桶列表 )
如果是第一次访问Amazon S3服务,你名下没有存储桶,会自动跳转到创建存储桶的页面,点击最醒目的橘红色按钮,进入 “创建存储桶” 界面。
( ☝创建存储桶按钮 )
然后配置存储桶的各项参数。
存储桶名称
存储桶名称在 所在的分区 目前有三个分区:标准区域、中国区域 和 GovCloud (US) 内必须是必须是唯一的,并遵循存储桶命名规则。
最基本的命名规则有:
- [3, 63] 个字符
- 只能包含小写字母、数字、句点、连字符(中划线)
- 必须以字母或者数字开头和结尾
- 不能采取IP地址格式
如果填入非法的名称,会在提交时发出警告:
( ☝存储桶名称不能包含大写 )
填入正确的名称:
( ☝正确的存储桶名称 )
对象所有权
这里的对象所有权是指桶级别的设置,可以用来控制上传到桶内的对象的所有权。但目前 Amazon S3 中的大多数使用场景都不再要求使用 ACL。所以这里建议将 ACL 保持为默认的禁用状态。
公开访问权限
公开访问,即从互联网上访问到存储桶内的对象。对于不同的应用需求,可能需要放开或者关闭公开访问权限。比如,CDN和托管静态网站,就需要放开权限;如果是云备份或是训练数据,则需要关闭公开访问。
默认情况下,Amazon S3 存储桶会关闭公开访问权限。这里暂时先保留默认的关闭公开访问设置。
存储桶版本控制
上面 讲过存储桶的版本控制概念。这里先保留默认的关闭版本控制功能。
存储桶标签
接下来可以为存储桶添加标签,用标签可以方便的管理组织多个桶。为存储桶添加标签不是必须的,由于这次仅试用一个桶,所以不添加标签,保留无标签的配置。
存储桶内对象的加密
任何数据都有一定的私密性,所以在 Amazon S3 服务端硬盘上保存的数据都是经过加密过的。按加密方式的不同,可以是 SSE-S3、SSE-KMS、DSSE-KMS 等。这里使用默认的 SSE-S3 加密类型。
对象锁定
上面 见过,对象存储适合 “一次写入,多次读取” 的应用场合。在这类应用中,往往希望写入的数据不会被再次修改或者覆盖,从而保证数据读取的一致性。这时候可以启用对象锁定设置。对象锁定设置仅适用于受版本控制的存储桶,所以这里保留默认的禁用设置。
当上面的所有设置都完成后,点击页面最下方的橘红色 “创建存储桶” 按钮。会看到绿色的创建成功提示。
( ☝成功提示 )
从存储桶的列表中能看到刚刚创建的桶名称:
( ☝桶列表 )
桶的标志
成功创建存储桶之后,我们可以看到存储桶有一个目标名称:S3://lfhacks.com
( ☝目标名称 )
点击这个目标名称就可以进入存储桶的配置界面。下面来看如何配置存储桶。
配置存储桶
在存储桶的详情界面,有一些标签可以用来配置存储桶。
( ☝配置存储桶 )
下面逐一查看:
对象列表
在对象标签页,列出当前桶下所有存储对象的列表。
( ☝存储桶配置项 )
上传数据
存储桶成功创建以后,我们自然希望首先向存储桶中上传数据。点击桶的名称,可以进入到桶中查看对象列表。
( ☝对象列表 )
可以看到现在桶里面是没有任何对象。点击上传按钮,可以将本地的文件上传到桶里面。
在上传的界面中,可以将文件拖到虚线框内完成上传动作。
( ☝上传界面 )
上传过程中会有传输状态的提示。
( ☝上传过程 )
上传结束后提示上传成功。
( ☝上传结果 )
返回到对象列表,可以看到刚刚上传的文件,和可用的操作,包括打开、删除、移动、重命名等。
( ☝对象列表 )
查看数据对象
点击对象的名称,可以进一步查看对象的属性。
( ☝对象属性 )
在对象的概览里面有一条叫对象 URL,这个 URL 用于 公开访问。 即从互联网的任何角落都可以匿名访问
( ☝对象URL )
但是因为 前面创建桶 的时候,没有允许公开访问,所以这里点击url,会看到提示拒绝访问(Access denied)。
( ☝拒绝访问 )
为了能让这个文件从互联网访问,我们需要同时关闭所在桶的ACL和当前账户的ACL:
( ☝设置公共访问权限 )
关闭当前账户的ACL
( ☝当前账户的ACL )
关闭所在桶的ACL
( ☝所在桶的ACL )
这样就可以单独设置该文件的权限
( ☝设置单个文件的公开访问权限 )
设置读取权限时,会有警告提示劝你三思。
( ☝警告 )
当开启了该文件的公共访问权限后,就可以使用 对象URL 从互联网上不经任何认证访问到该文件。
( ☝使用对象URL公开访问文件的效果 )
创建文件夹
正如前面所讲,Amazon S3 是扁平的组织结构,而不是类似常见文件系统中所看到的层次结构。但是为了用户使用上的方便,在控制台页面仍然提供了 “创建文件夹” 操作。
( ☝创建文件夹界面 )
在上图中,我创建了一个名为 “Folder” 的文件夹。返回对象列表后,就能看到刚刚创建的文件夹:
( ☝创建文件夹 )
除了手动创建文件夹的方法以外,还可以在上传界面直接拖入文件夹的方式创建文件夹。
( ☝上传文件夹 )
上传文件夹后,返回对象列表界面可以看到刚刚创建的文件夹:
( ☝上传文件夹 )
对象操作
在选中几个对象之后,支持一些操作。除了基本的复制和移动外,有一个比较实用的功能就是“计算总大小”。可以查看所选择对象(包括文件或文件夹)的总占用空间。
( ☝对象操作 )
设置桶属性
在桶属性的标签页,可以查看到当前桶的基本属性的概述,还可以设置桶的各方面属性:
存储桶概述
可以查看桶所在的区域、资源名称和创建日期。
( ☝查看桶属性 )
启用版本控制
当启用版本控制后,上传一个同名文件并不会覆盖已经存在的文件,而且创建一个新的版本。这样做虽然占用了更多的空间,但是可以避免意外操作,或者方便的保存一个文件的多个快照版本。
另外,版本控制还可以为删除操作设置门槛,必须经过多点认证(MFA)后才可以实施删除操作。为文件的安全存储多了一道保障。
( ☝版本控制 )
为桶添加标签
为方便组织管理,可以为桶添加任意键值对的标签(tag),例如:
键 | 值 |
---|---|
Project | Tomato |
Level | Prod |
设置效果如下:
( ☝添加标签 )
存储加密类型
可以查看当前使用的加密类型:
( ☝添加标签 )
静态网站托管
在 亚马逊云科技产品免费试用攻略(1) - 注册账户 一文中讲述了利用对象存储开静态网站的方法。可以将整个桶设置为托管静态网站。
( ☝设置静态网站托管 )
设置权限
由于用户需求的多样性,存储桶内的对象如何被外部访问是个复杂的问题。可以由以下三者单独或者共同决定访问逻辑:
- 访问控制列表(ACL)
- 接入点策略
- 存储桶策略
权限关系简图如下:
( ☝ S3 存储桶权限设置 )
屏蔽公共访问权限
这个设置是设置在 ACL 和 存储桶策略前方的一道总开关,类似对外部访问的防火墙。可以用来阻止所有的公开访问,不需要再单独使用桶策略和ACL
( ☝屏蔽公共访问权限 )
存储桶策略
用 JSON 格式精细化的设置单个用户对单个资源的访问权限。基本格式如下:
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Akua"
},
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket1/*",
"arn:aws:s3:::amzn-s3-demo-bucket1"
]
}
]
}
其中 Statement
条目下有多条策略,每条策略包含以下字段,其含义为:
字段名 | 含义 |
---|---|
Resource | 本条策略所针对的资源,可以是对象、桶、访问接入点等等 |
Action | 针对资源的操作,比如列出、获取、等等,可以使用通配符*表示全部操作 |
Effect | 操作的允许逻辑,可以是 allow 或者 deny |
Principal | 本条策略所针对的用户 |
Condition | 满足一定条件下,本条策略生效,例如来源IP地址等 |
访问控制列表(ACL)
访问控制列表(ACL) 用于向其他账户授予基本的读/写权限,这一点类似于 Linux 文件系统的权限控制,根据用户、用户组赋予单个存储对象或者整个桶的权限。
( ☝访问控制列表 )
存储桶指标
在指标标签页可以查看桶的静态和动态使用情况。例如总大小、对象总数等。
( ☝存储桶指标 )
还可以按照自身需求创建自定义的筛选器,将分析的对象缩小到一定的范围内,比如最近一周创建的对象,等等。
创建接入点
为了更方便的访问数据桶,还可以为数据桶创建一个或多个接入点。
( ☝创建接入点 )
创建好接入点后,就可以从互联网上沿着接入点访问到桶内的资源。
试用总结
以上就是这次免费试用 Amazon S3 的过程,只是浮光掠影地感受了 Amazon S3 的冰山一角。希望以后有时间能继续深入地探寻 Amazon S3 的魅力。
最后请注意:当你不再试用对象存储的时候,请记得删除桶,不然如果超过了免费期,会自动从你 注册 时候预留的信用卡中扣除费用。
下一篇将介绍亚马逊云科技的哪款产品,请拭目以待,持续关注。
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
系列: 亚马逊产品试用
精彩评论
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/aws-s3/ ,且不得用于商业用途。