S3(Simple Storage Service)对象存储简介及使用
什么是S3服务
S3是一套基于HTTP协议并采用RESTful风格构建起来的Web存储管理服务
S3的一些特点
- 存储桶是S3用于数据存储的基础容器
- 存储桶中可以存储无限量的数据,每个对象最多5TB数据,使用开发人员分配的唯一密钥存储和检索每个对象
- 身份验证机制
- 访问接口使用基于标准的REST和SOAP接口,可以与任何Internet开发工具搭配使用
S3基本存储模型
两种存储单元:Bucket和Object,扁平化存储结构,可以横向增加Bucket和Object,理论上可以存储无数个Object。
- 对象(Object)
S3存储的最小单位,数据不透明,元数据透明,数据和元数据一起存,还可以指定自定义元数据。在存储桶中,对象将由密钥(名称)和版本 ID 进行唯一地标识。
- 存储桶(Bucket)
存储对象的容器,名称要全局唯一,并且命名需要符合英文国际域名的命名规则。对象名为mybucket
组成的URL为http://mybucket.s3.cephbook.com
。
传统文件系统向S3的转变
- 文件路径和数据存储
- 文件元数据存储
解决文件路径和数据存储
- 所有数据都存放在Bucket中,文件都是Object。
个人理解文件夹不需要管,在路径中直接用”/“区分就行了(这个分割符可以指定),因此也没有了文件夹的元数据信息。目录样式演示是模拟出来的对象的层次结构。删除目录可以理解为删除具有该前缀的所有对象。
1 | lihongbo01@cld-unknown212867:~/workspace/s3_workspace$ s3cmd ls s3://mybucket/in |
- 在key name中加上”/”来区分“文件夹”。
- 文件数据内容作为Content存储在Object内。
解决文件元数据存储
两种存储的元数据对应关系:
- key name -> 文件路径
- etag -> 文件md5
- metadata(File size, Last mode, MIME type) -> 文件的size/x-time这些
- ACL -> 文件的acl/uid/gid这些
- Content-Type -> MIME
MIME用于设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
S3的使用
s3cmd 命令行形式访问(连接到其他第三方S3服务为例)
安装
pip install s3cmd
默认s3cmd会读取当前用户的$HOME/.s3cfg,可以使用-c参数手工指定配置文件路径。
配置
1 | [default] |
使用实例
s3cmd –help 查看帮助
1 | lihongbo01@cld-unknown212867:~/workspace$ s3cmd ls |
其他常用命令如:
s3cmd get s3://new_bucket/file # 下载file到本地
s3cmd setacl s3://new_bucket/file --acl-public # 开启file的匿名访问权限,注意权限控制
s3cmd info s3://new_bucket/file # 查看object属性信息
s3cmd del s3://new_bucket --recursive --force # 递归删除bucket内的所有内容,慎用!
s3cmd signurl s3://new_bucket/file +30 # 生成临时的url访问链接(30s有效时长)。
s3cmd du s3://new_bucket # 查看bucket的信息
s3cmd cp src dst # 复制
s3cmd mv src dst # 移动
Python SDK使用S3
安装
pip install boto
boto 适用于Python 2.6 and 2.7环境,python 3.x推荐使用boto3
新建、删除bucket实例:
1 | # -*- coding: utf-8 -*- |
输出
1 | lihongbo01@cld-unknown212867:~/workspace/s3_workspace$ python s3sdk.py |
Python接口
bucket相关
1 | conn.create_bucket(bucket_name) # 新建bucket |
object相关
1 | key_ = bucket.new_key(key_name) # 生成一个key |