为了使众多基于 AWS S3 开发的应用程序、开发工具及第三方服务,在不修改代码的前提下,更容易的接入到 QingStor,QingStor 现已提供兼容 AWS S3 的接口。
如果用户的后台系统正在使用 AWS S3 存储数据,现在不需要修改任何程序代码,直接接入到 QingStor。并且 AWS S3 生态中提供的各类客户端工具 (如 AWS SDK, CLI),现在也可以无缝接入到 QingStor 中继续使用。
目前 QingStor 已经兼容AWS S3 所有主要功能的接口 ,后续随着 QingStor 功能的不断丰富,还会进一步提高兼容程度。更多兼容相关的内容,可查阅 官方文档。
访问方式
和 QingStor 原生接口一样,AWS S3 兼容接口也支持两种形式的访问地址。
这里的“访问地址“在 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. 设置完成,点击文件夹进入查看文件列表
兼容工具
理论上所有基于 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