QingStor 兼容 AWS S3 接口

为了使众多基于 AWS S3 开发的应用程序、开发工具及第三方服务,在不修改代码的前提下,更容易的接入到 QingStorQingStor 现已提供兼容 AWS S3 的接口。

如果用户的后台系统正在使用 AWS S3 存储数据,现在不需要修改任何程序代码,直接接入到 QingStor。并且 AWS S3 生态中提供的各类客户端工具 (AWS SDK, CLI),现在也可以无缝接入到 QingStor 中继续使用。

目前 QingStor 已经兼容AWS S3 所有主要功能的接口 ,后续随着 QingStor 功能的不断丰富,还会进一步提高兼容程度。更多兼容相关的内容,可查阅 官方文档

访问方式

QingStor 原生接口一样,AWS S3 兼容接口也支持两种形式的访问地址。

qingstor_s3_0

这里的访问地址AWS S3 语境里被称为 Endpoint

当用户使用以上任何一种风格 URL 发起请求时,将开始以 AWS S3 接口访问 QingStor。除了请求 Host 不同,所有请求头、请求正文、签名方式都应该符合 AWS S3 的规范。也就是说,从应用的视角看到的仿佛是 AWS S3 服务,但实际上操作的是 QingStor

签名验证

QingStor 兼容接口同时支持签名方法 AWS Signature Version 2 AWS Signature Version 4

在签名过程中,用户需要使用 QingCloud 密钥对 (QingCloud Access Key) 替换 AWS 密钥对 (AWS Access Key)Signature V4 版本中,使用 QingCloud Zone 替换 AWS Region

使用示例

大多数基于 AWS S3 开发的工具都有自定义访问地址的方法,下面以一些常用工具为例,说明如何接入 QingStor

 AWS SDK for Python

1. 安装 Boto 类库:

$ pip install boto

2. 编写程序:

$ cat boto-to-qingstor.py
import boto
conn = boto.connect_s3(
aws_access_key_id='PLLZOBTTZXGBNOWUFHZZ',
aws_secret_access_key='MnIjI58zC8AX07xotHXcm6grwFgOXhaJQHkTCX2X',
host='s3.pek3a.qingstor.com'
)
bucket = conn.get_bucket('mybucket')
key = bucket.get_key("mykey")

AWS CLI

1. 安装 AWS CLI 工具:

pip install awscli

2. 编辑配置文件:

$ cat ~/.aws/config
[profile qingstor]
region = pek3a
output = json
s3 =
signature_version = s3v4

3. 设置访问密钥:

$ cat ~/.aws/credentials
[qingstor]
aws_access_key_id = PLLZOBTTZXGBNOWUFHZZ
aws_secret_access_key = MnIjI58zC8AX07xotHXcm6grwFgOXhaJQHkTCX2X

4. 命令行执行:

$ aws s3api put-object --bucket mybucket --key puppy.jpg --body ~/Pictures/puppy.jpg --endpoint-url 'https://s3.pek3a.qingstor.com' --profile qingstor
{
"ETag": "\"c3872b49cb244269aad8cd4275a41c4a\""
}

s3fs

1. 安装 s3fs 工具 (Ubuntu 为例):

apt-get install s3fs

2. 设置访问密钥:

# cat /root/.s3fs/credentials
PLLZOBTTZXGBNOWUFHZZ:MnIjI58zC8AX07xotHXcm6grwFgOXhaJQHkTCX2X

3. 挂载 bucket 到本地目录:

# mkdir -p /mnt/mybucket
# s3fs mybucket /mnt/mybucket -o passwd_file=/root/.s3fs/credentials -o url=http://s3.pek3a.qingstor.com
# df -T | grep s3fs
s3fs fuse.s3fs 274877906944 0 274877906944 0% /mnt/mybucket

4. 测试文件系统操作:

# echo 'hello world' > /tmp/hello.txt
# cp -v /tmp/hello.txt /mnt/mybucket/
‘/tmp/hello.txt’ -> ‘/mnt/mybucket/hello.txt’
# ls -l /mnt/mybucket/hello.txt
---------- 1 root root 4635 Aug 11 23:26 /mnt/mybucket/hello.txt
# cat /mnt/mybucket/hello.txt
hello world

Transmit for iOS

1. 首先在AppStore 下载应用 Transmit

2. 打开应用添加新的 Server,选择 Amazon S3 并在 Address 处填写 s3.qingstor.com (注意这里与上文提到的访问地址有所不同,因为 Transmit 首屏需要获取所有的 bucket 列表,所以需要填写 QingStor global 的地址)

3. 填入在 QingCloud 控制台申请的密钥对,点击保存

4. 设置完成,点击文件夹进入查看文件列表

qingstor_s3_1 qingstor_s3_3 qingstor_s3_2

 

 

 

 

 

 

 

兼容工具

理论上所有基于 AWS S3 接口开发的客户端,只要涉及的接口实现了兼容,都可以直接对接 QingStor

实际测试中,我们已经证实可以兼容的工具包括:

  • AWS SDK for Python / PHP / Java / Ruby
  • AWS Command Line Interface (CLI)
  • s3fs
  • Hadoop s3a / distcp
  • ownCloud external storage
  • Transmit for iOS / macOS
  • Commvault

QingStor 对象存储支持存储空间策略

存储空间策略是 QingStor 存储空间(bucket)的子资源(subresource),允许用户更细粒度的控制存储空间的访问。 其语义主要由用户、 资源、动作、及条件运算符组合定义。例如仅允许指定用户以指定站点为 Referer 以下载存储空间中的某单个文件,或者防止外链等。

qingstor_policy_0

策略属性

  • resource
    策略中需要制定控制的资源,可以指定为某些 object, 或者 bucket
  • user
    策略所应用到的用户
  • effect
    当用户请求特定操作时的效果。可以是允许或者拒绝
  • condition
    存储空间策略生效的条件。支持匹配 `Referer` 元素。可用来做防盗链
  • action
    设置是否允许(或拒绝)资源的操作

配置示例

  1. 在 bucket 页面点击设置->存储空间策略->添加规则
  2. 配置添加规则qingstor_policy_1
  3. 点击保存,生效设置
  4. 配置生成的 bucket policy
    {
        "statement": [
    	{
    	     "id": "hotlink-whitelist",
    	     "user": "*",
    	     "action": "get_object",
    	     "effect": "allow",
    	     "resource": ["foo-bucket/*"],
    	     "condition": {
    		 "string_like": {"Referer": "*.example.com"},
    		 "string_not_like": {"Referer": "*.service.example.com"}
    	      },
    	}
        ]
    }

以上配置将允许从 `*.example.com` 但除了 `*.service.example.com` 以外的链接到 QingStor 用以访问 bucket:`foo-bucket` 下所有 object 的请求被允许。

更多详细介绍请参考相关文档: QingStor Bucket Policy

QingStor 支持对象拷贝、剪切和重命名

QingStor 新增了 object copy 接口,使用此接口可将 QingStor 对象从源存储空间复制到目标存储空间,更详细的信息可 参考文档

在 QingStor Web 界面上,我们也实现了对象拷贝、剪切和重命名的支持。

剪切和复制对象

在文件列表上右键 -> 剪切/复制

qingstor_copy_0

粘贴到目标文件夹

qingstor_copy_1

文件重命名

在文件列表上右键 -> 重命名

qingstor_copy_2

对话框里填写新文件名

qingstor_copy_3

QingStor 对象存储推出数据同步工具 qsctl

qsctl 是青云对象存储服务的高级命令行工具。它提供了更强大的类 UNIX 命令,使管理对象存储的资源变得像管理本地资源一样方便。利用该工具,你可以快速地将数据在本地和 QingStor 对象存储之间迁移或同步。

支持命令

  • ls
    列出所有的存储空间,或给定存储空间给定前缀下的所有对象
  • cp
    复制本地文件到QingStor存储空间,或复制QingStor对象到本地
  • mb
    创建一个新的存储空间
  • rb
    删除一个空的存储空间,或强制删除一个非空的存储空间
  • mv
    移动本地文件到QingStor存储空间,或移动QingStor对象到本地
  • rm
    删除一个QingStor对象或给定前缀下的所有对象
  • sync
    在本地目录和QingStor目录之间同步

使用示例

列出存储空间 <mybucket> 下的所有对象:

$ qsctl ls qs://mybucket
Directory test/
2016-04-03 11:16:04 4 Bytes test1.txt
2016-04-03 11:16:04 4 Bytes test2.txt

同步 QingStor 目录到本地文件夹:

$ qsctl sync qs://mybucket/test/ test/
File 'test/README.md' written
File 'test/commands.py' written

qsctl 的帮助和手册十分详细,查看 qsctl 的参数和简易教程,可以通过 -h 参数打印出来:

$ qsctl -h
$ qsctl <command> -h

若要查看 qsctl 的详细手册和示例,可运行:

$ qsctl help
$ qsctl <command> help

使用文档

qsctl 支持主流的操作系统(包括 Linux, Windows,以及 Mac),安装起来非常方便,使用 pip 工具即可,具体步骤可参考 官方文档

QingStor 支持跨源资源共享 (CORS)

跨源资源共享 (Cross-Origin Resource Sharing,简称 CORS) 是 HTML5 提供的标准跨源解决方案,具体可以参考 W3C CORS规范

QingStor 已经支持 CORS ,可以允许您对 QingStor 下的存储空间 (Bucket) 进行 CORS 规则的配置, 从而可以创建直接与 QingStor 进行富交互的 web application,以及限制源对您在 QingStor 中资源的访问,参考 QingStor Bucket CORS

典型场景和示例

当浏览器端使用 AJAX 直接访问 QingStor 的数据时,则需要利用 CORS 来实现跨源浏览器与 QingStor 直接通信。

例如,网站的某些静态图片资源存储在 QingStor 的 “images” 这个 bucket 中。如果网站想利用 JavaScript AJAX 取回或者上传图片。当向 bucket 直接发起 GET, POST 请求时,是不被允许的。此时则需要设置 CORS 的规则。

设置示例

主要配置项:

  • allowed_origin
    用户所期望的跨源请求来源,可以用 “*” 来进行通配
  • allowed_methods
    设置源所允许的 HTTP 方法。可指定以下值的组合: “GET”, “PUT”, “POST”, “DELETE”, “HEAD”, 或者使用 “*” 来进行设置
  • allowed_headers
    设置源所允许的 HTTP header 。 可以用 “*” 来进行通配
  • expose_headers
    设置客户能够从其应用程序(例如从 JavaScript XMLHttpRequest 对象)进行访问的 HTTP 响应头
  • max_age_seconds
    设置在预检请求(Options)被资源、HTTP 方法和源识别之后,浏览器将为预检请求缓存响应的时间(以秒为单位)

操作流程:

  1. 在 bucket 页面点击设置 -> CORS -> 添加请求源qingstor_cors_0
  2. 配置添加请求源qingstor_cors_1
  3. 配置完成
    qingstor_cors_2

以上示例配置, 将使您从 http://your-domain.com 发出的对 QingStor bucket 的 AJAX 跨源 GET, POST 请求成功执行,同时缓存预检请求300s,并能从 AJAX 的返回结果中访问到任意的 HTTP header。

QingStor 对象存储服务正式商用

qingstor

2016 年 9 月 13 日,QingStor 对象存储服务(Object Storage)正式启动商用,同时开放的还有 CDN 加速服务,所有青云QingCloud 用户可以在北京 3 区(PEK3)使用上述两项服务。商用的第一个月为缓冲期,缓冲期结束后( 10 月 13 日)开始计费。立即体验

QingStor 对象存储于今年 1 月 8 日启动公测,随后进行了为期 8 个月的试运行。在公测期间,用户在 QingStor 对象存储累计上传文件数量超过 100 亿,容量达到 1PB ,文件类型包括静态网页、音频、视频、文档、日志、映像等。

在大量公有云用户多样化的应用场景中,QingStor 对象存储在性能(高并发)、可用性、稳定性等方面得到了充分的验证。同时,QingStor 对象存储已经在借贷宝、泰康人寿等多套私有云生产环境中部署上线,承担了重要的存储引擎角色,为客户的互联网业务提供强大助力。

QingStor 对象存储特性介绍

QingStor 对象存储为用户提供可无限扩展的通用数据存储服务,具有安全可靠、简单易用、高性能、低成本等特点。其突出优势概括如下:

  • 无限水平扩展:系统可无限水平扩展,且在存储容量水平扩展时,数据存取的性能线性提升。可承载无限存储空间,每个存储空间的容量亦可无限扩展。
  • 高可靠:实时多副本,无单点故障,具备无条件的数据恢复能力。
  • 通用数据存储:可存储任意数量、任意类型、任意大小的非结构化数据。
  • 与计算紧密结合:与 QingCloud IaaS 资源可通过内网进行数据传输,保证更高效的数据传输与处理,且因内网传输免费,用户将节省大量成本。
  • 标准用户接口:提供标准、规范且简单的 RESTful API,及主流语言的 SDK ,并提供详尽的 API 文档。
  • 网络加速:集成 QingCloud CDN ,自动选择离用户最近的边缘节点,使得数据传输速度最优化。

QingStor 对象存储功能介绍

  • 分段上传:支持对文件进行分段上传,最大支持 10,000 段,每段大小最大可达 5G,一方面帮助用户将大文件在尽可能短的时间内上传,另一方面允许用户存储最大至 50TB 的文件。
  • 断点续传:下载支持断点续传,保障用户在网络质量较差的环境中仍能够顺利下载资源。
  • 安全:基于对称加密的请求认证方式;
    • 支持通过 SSL 加密数据传输;
    • 支持在服务端通过AES-256 加密算法加密文件内容,加密所用密钥可由用户提供,也可由服务端生成;
    • 多维访问控制
      • 存储空间访问控制列表 (Bucket ACL), 为存储空间级别的访问控制,用户可将存储空间的读、写、或读写权限开放给单个或多个 QingCloud 用户。
      • 存储空间策略 (Bucket Policy), 语义涵盖 API ACL, 及 Resource ACL。通过存储空间策略,用户可向其他青云QingCloud 用户赋予相应存储空间及其对象的访问权限,对象指定方式支持通配。
  • 多维度监控:监控项包括内网出/入流量、外网出/入流量、容量、内网 API 调用次数、外网 API 调用次数,及容量。各条目监控最小粒度均为 1 小时。
  • 网络加速
    • 支持与 QingCloud CDN 的集成。QingCloud CDN 精选主流 CDN 厂商优质节点,全面覆盖各运营商,无盲区。
    • 自动选择离用户最近的节点,使得数据的下载速度最优化。
  • 外部镜像:用于帮助用户将业务所依赖的第三方对象存储无缝切换至 QingStor™ 对象存储。
  • 表单:上传帮助用户便捷地将小文件通过 HTML 表单上传至存储空间。
  • Copy:用于在不同的 QingStor™ 存储空间之间复制对象。此操作要求请求者对源存储空间拥有可读权限,对目标存储空间拥有可写权限。
  • CORS:跨源资源共享 (CORS) 定义了在某个域名下的 Web Applications 对另一个域名下资源的访问规则。通过配置 CORS 规则,用户不但可以创建直接与对象存储进行富交互的 Web Application,也可以指定哪些请求源有权限访问其在对象存储中的资源。
  • 域名别名:存储空间域名别名。如果用户希望通过自定义的域名访问 QingStor™ 的存储空间,可以将其设置为该存储空间的域名别名。

QingStor 对象存储生态

  • AWS S3 兼容:完美对接在 AWS S3 API 之上构建的工具及服务,极大地丰富了用户使用 QingStor 对象存储的方式。
  • Qsctl 高级命令行工具:提供了更强大的类 Unix 命令,使管理 QingStor 对象存储的资源变得像管理本地资源一样方便。
  • SDK:QingStor 对象存储已提供 Python SDK,近期还将提供 Go、Ruby、PHP、Java 的 SDK,方便开发者开发出更有创造力的产品。

QingStor 对象存储基础应用场景

场景一:海量通用文件存储

QingStor 对象存储服务提供了安全、可靠的数据存储服务,适用于静态网页、图片、音视频、日志、映像等各种类型文件的存储,支持用户通过控制台、API、SDK 等各种方式进行读写。同时 QingStor 对象存储系统可无限水平扩展,且在存储容量水平扩展时,数据存取的性能线性提升。相较于块存储,可以更好地满足企业海量数据的存储和访问需求,同时节约了大量的存储成本。

场景二: 数据分析&挖掘:

QingStor 对象存储作为海量数据存储池,将会与 QingCloud 平台上的计算资源紧密整合,尤其是 QingCloud 大数据平台(如 Hadoop、Spark、 Storm 等),从而实现高性能、低成本的数据分析与挖掘,提升企业数据价值。

场景三: 互联网应用加速:

QingCloud 精选主流 CDN 厂商优质节点,全面覆盖各运营商,无盲区;自动选择离用户最近的边缘节点,使得数据的传输速度最优化。为互联网应用的图片、音视频以及应用分发提供最佳的用户体验。

场景四: 数据备份:

QingStor 对象存储服务通过兼容基于 AWS S3 API 构建的工具与服务,支持主流的备份软件,结合快速的数据存取性能、高度的服务可靠性和数据安全性、细粒度的权限控制及简单易用的接口,向用户提供更高性能、更可靠、更低成本的数据备份方案,帮助企业节约本地存储成本、维护成本和人力资源成本。

QingStor 对象存储快速上手

QingCloud 用户可以在控制台选择北京3区(PEK3)通过图形化界面来创建存储空间( Bucket ) 并上传文件(具体操作请点击阅读原文查看),同时我们推荐大家通过 API、SDK 以及命令行工具来管理和使用 QingStor 对象存储。

QingStor 对象存储 12 个月免费用

QingStor 对象存储将从存储容量、流量、API 请求数三个维度进行阶梯计费,并为用户创建的第 1 个存储空间(Bucket)提供 12 个月赠送套餐,从用户创建的第 1 个存储空间之日算起,在未来 12 个月免费赠送:

  • 10 GB 存储空间
  • 1 万次 PUT、POST、DELETE 请求
  • 10 万次 GET、HEAD 请求
  • 50 GB 下载流量

PS:免费政策只对用户创建的第 1 个存储空间有效。当 12 个月的免费试用过期或使用量超过了免费限额,按照资费标准按需支付。

更多详情请见《QingStor 指南》