Ruby 聊聊又拍云存储 S3 协议的使用

upyun · 2023年07月20日 · 最后由 huacnlee 回复于 2023年07月20日 · 407 次阅读

近期,有细心的同学发现,在又拍云控制台中的云存储产品中增加了针对 S3 协议标准的兼容支持,授权用户通过 S3 协议标准对存储空间的数据进行读写操作。此配置操作之前是由人工协助的方式提供给用户使用的,现为方便大家自助使用,将其在控制台上做了统一的配置开放。

可能有部分用户对 S3 协议了解不多,那我们就来简单介绍下 S3。

S3 是 Simple Storage Service 的缩写,即简单存储服务。S3 协议由亚马逊公司推出,原本是专门针对 Amazon S3 而产生的,在 URL 中,指定一个 Amazon S3 桶的位置以及用来读写该桶中文件的前缀。用户可以定义只读外部表使用 S3 桶中现有的数据文件作为表数据,或者创建可写外部表将来自于 INSERT 操作的数据存储到 S3 桶中的文件。发展至今,S3 协议已经发展成为一个非常强大的数据管理接口。与传统的文件系统接口不同,它为应用程序开发人员提供了一种通过丰富的 API 集控制数据的方法。

S3 API

S3 API 是一个应用程序编程接口,为云存储提供上传、检索、列出和删除对象的能力。S3 API 支持标准的 REST(Representational State Transfer)和 SOAP(Simple Object Access Protocol)协议,目前,HTTP 上的 SOAP 支持已弃用,SOAP 仍可在 HTTPS 上使用。SOAP 目前已不支持再在 HTTP 上使用,也不支持主流 S3 功能,强烈建议您使用 REST 协议访问,REST 协议也是 S3 主要的访问协议。

REST 协议是一种基于 HTTP 协议的轻量级协议,使用标准的 HTTP 请求方法(GET、PUT、DELETE 等)和状态码(200、404、403 等)来进行对象存储服务的操作。使用 S3 协议,您可以通过编写简单的程序或使用 AWS 提供的 SDK(Software Development Kit)来访问和管理又拍云存储中的数据对象,例如上传和下载文件、删除和复制文件等。

又拍云支持的 S3 API 如下图所示:

签名认证和 API 路径

又拍云存储同时兼容 AWS Signature Version 2 和 AWS Signature Version 4,均实现了请求头签名和参数签名方式。

又拍云存储的路径风格格式为:https://s3.api.upyun.com//,bucket 名字作为路径使用的一部分,类似于又拍云存储目前使用的 RESTful API  路径形式。

虚拟主机风格格式为:https://.s3.api.upyun.com/。

S3 协议使用示例

在了解了 S3 API 的基本信息后,下面我就 S3 API 使用做个简单示例。

WinScp(Windows 用户)

  1. 下载 WinSCP。

  2. 打开程序,新建会话。

文件协议:Amazon S3

主机名:s3.api.upyun.com

端口:默认(443) 

访问密钥:从云存储控制台中获取,对应 AccessKey。

私密访问密钥:从云存储控制台中获取,对应 SecretKey。

  1. 连接成功,进入配置管理界面。

Cyberduck(windows、Mac 用户)

1. Cyberduck 客户端下载。

  1. 打开客户端,选择新建连接。

文件协议:Amazon S3

服务器:s3.api.upyun.com

端口:默认(443) 

访问密钥 ID: 从云存储控制台中获取,对应 AccessKey。

访问私钥:从云存储控制台中获取,对应 SecretKey。

  1. 连接成功,进入管理配置页面,操作和 FTP 客户端大同小异。

Postman(API 开发者)

1. 以获取 testautomata 存储根目录列表为例,打开 Postman 后,配置请求地址与请求参数。

依照 List Objects 的 API 文档组织请求方法、请求地址与请求参数,各参数释义参考又拍云存储 S3 协议文档。

请求方法:GET

URL 地址:https://testautomata.s3.api.upyun.com/?list-type=2&delimiter=/

  1. 配置 API 接口鉴权,Postman 内置 S3 鉴权,可在 Authorization 选项卡下进行配置。

type:选择 AWS Signature

AccessKey:从云存储控制台中获取

SecretKey:从云存储控制台中获取

Service Name: s3

  1. 发起请求,获取存储列表数据。

目前又拍云存储在控制台上已开放 S3 协议的统一配置获取,您可以使用任何兼容 S3 的工具来操作又拍云存储,还不赶紧来试试~

既然已经有了 S3 支持,我也给 GoBackup 增加了 UpYun 的存储支持

不过 UpYun 这个 storage_class 不支持低频存储啊。并且根据我测试,如果 Bucket 的低频存储,也不能用 S3 协议上传文件。

https://github.com/gobackup/gobackup/pull/185

需要 登录 后方可回复, 如果你还没有账号请 注册新账号