Logical Rabbit.

さくらのVPS

Ruby用「さくらのクラウド オブジェクトストレージ」アクセスライブラリ

Overview

さくらインターネットが提供している「さくらのクラウド オブジェクトストレージ」へのアクセスを簡便にするための、Rubyライブラリです。 (This page is Japanese version only.)

Github: kmamiya/sakura_object_storage_rails

※当初Ruby on Rails用としていましたが、よくよく考えるとRailsへの依存まったく無いので純Rubyライブラリとして組みなおしました。

「さくらのクラウド オブジェクトストレージ」はAmazon S3互換を謳っており、Amazon S3用のライブラリ/ツールを使用すれば概ねアクセスできますが、さくら側が下位互換なので一部使用できない機能があります。と、いうか使用できない機能を除くと、オブジェクトをアップロード、ダウンロード、一覧取得して削除、といった基本機能だけが残ります。

こうなるとS3用ライブラリでは機能過剰になるし、使えるのかどうかよくわからない機能が呼び出し可能になっているより、いっそ専用ライブラリを作ってしまったほうが気楽かな、と思った次第。

逆にこのライブラリがAmazon S3用に使用できるかと言うと…。試していないので分かりませんが、一応使えそうな気はします。あまり意味は無いように思いますけど。

  • 「さくらのクラウド オブジェクトストレージ」APIのうち、以下の機能をサポートしています。
    1. オブジェクト一覧の取得 (GET /)
    2. 特定オブジェクトの取得 (GET /ObjectName)
    3. オブジェクトのアップロード ( 「さくらのクラウド オブジェクトストレージ」側の仕様により最大4GB) (PUT)
    4. 特定オブジェクトの削除 (DELETE)
    5. 特定オブジェクトの情報取得(オブジェクト本体を取得しないので動作が軽い。ETagとLastModfiledが取得可能です。) (HEAD)
  • 以下の機能はサポートしていません。今後実装する予定も未定です。
    1. マルチパートアップロード機能

マルチパートアップロードは(これを実装すればAPIフルサポートになるので)当初実装しようと思ったのですが、よく考えると通常アップロード機能で4GBまで対応しているし、そもそも4GB以上のファイルを扱うことあるかな? と考えたら使わないような気がしてきました。なにしろオブジェクトストレージ自体が100GB超えると課金増えますし。

ということで、マルチパートアップロードは 私が必要ないので 実装は未定です。

使用方法

  1. まず、使用するバケットは 「さくらのクラウド オブジェクトストレージ」の管理画面上で作成しておいてください(これはAPIでは実行できないのです)
  2. アクセスに必要なAPIキーとAPI秘密鍵を確保しておいてください

サンプルコード部分はGiHubのREADMEそのまんまですが。

require 'sakura_object_storage'

instance = SakuraObjectStorage::Storage.new( bucket_name, api_key, api_secret_key )

# Create an object.
body = 'object contents.'
instance.put_object('object name', body, body.size)

# Get list
list = instane.get_object_list[:contents]

# Get an object
obj = instance.get_object('object name')

# Get an information of object
info = instance.get_object_info('object_name')
etag = info['ETag']
last_modified = info['LastModified']

# Delete an object
instance.delete_object('object name')

インストール方法

現状Gemを作っていませんので、以下のようにGitHubからの取得をお願いします。

gem 'sakura_object_storage', git: 'https://github.com/kmamiya/sakura_object_storage_ruby.git'

※Gemも作れるようになったのですが、これ何処に公開しましょうかね…RubyGems?

ライセンス

MIT License