さくらのクラウド オブジェクトストレージをRubyから操作する

More than 3 years have passed since last update.


さくらのクラウド オブジェクトストレージ


大容量データに対応したオブジェクトストレージサービスで、S3互換のAPIを備えています


http://cloud.sakura.ad.jp/specification.php#section-object


S3とさくらオブジェクトストレージの差分


  • AWS signature version


    • S3: v4

    • さくら: v2



  • endpoint


    • S3: s3.amazonaws.com

    • さくら: b.sakurastorage.jp




RubyでS3につなぐのに使えるライブラリ

下記2つのライブラリがデファクトっぽい。


aws / aws-sdk-ruby

AWSの公式SDK


fog / fog

色々なクラウドサービスに対応したライブラリ。S3への接続部分は独自実装。

carrierwaveuploader/carrierwaveがS3にファイルをアップロードするのに使ってる。


Rubyからさくらのオブジェクトストレージを操作する

ruby: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]


aws-sdk (2系)

require 'aws-sdk'

s3 = Aws::S3::Client.new(
access_key_id: 'xxx',
secret_access_key: 'yyyy' ,
endpoint: 'https://b.sakurastorage.jp',
region: 'us-west-2', # 多分なんでもいい
signature_version: 's3' # v2みたいなもんっぽい
)
p s3.get_object(bucket: 'test-bucket', key: "sample_file.txt").body.read


fog (fog-aws (0.9.2))

require 'fog/aws'

# create a connection
con = Fog::Storage.new({
provider: 'AWS',
aws_access_key_id: 'xxx',
aws_secret_access_key: 'yyyy',
host: 'b.sakurastorage.jp',
endpoint: 'https://b.sakurastorage.jp',
aws_signature_version: 2
})

d = con.directories.get("test-bucket")
p d.files.get('sample_file.txt').body

※クレデンシャルの管理には気をつけてね。