Webサービスやアプリを開発して運営するのが趣味です。



ConoHa オブジェクトストレージ用 Ruby クライアント

2014年10月13日 23:45

そこそこ信頼できるオブジェクトストレージとしてConoHaを使い出しました。ちょくちょくAWS S3は使っていたんですけど、無限にダウンロードし続けるバグを書いてしまったせいで6万円以上無駄にパケ死してしまったということがあり、個人ではなるべく使いたくないという気持ちでいっぱいになっています。その点ConoHaは転送量無料で100GB/450円/月と、S3の転送量課金に怯える貧民にとってはとてもいいサービスとなっています。

オブジェクトストレージが嬉しいケース

自分の場合です。普通にもっとたくさんある。

  • アプリケーションと別の場所に静的ファイルを設置できる
    • アプリサーバーが複数台必要になった場合ほぼ必要になります
    • アプリサーバーが壊れても復活できる
  • とりあえずここに置いておけばファイルは安全
    • オブジェクトストレージは何重にもファイルを保存してるので安心感ある
    • アプリサーバーが壊れても復活できる

ConoStorage

現在のConoHaオブジェクトストレージ管理画面では作成と削除のみ行えるようになっており、ほとんど使えません。というかブラウザから使う画面なんてほとんどないのでRubyから扱えるようにクライアントを書いた。最初は openstack gem を使って操作していたんだけど、Web公開前提で使うのがかなり分かりづらかったしAPIリファレンス網羅するのはもだいぶ分かりづらい感じがあった。

Usage

gem install cono_storage
require 'cono_storage'

client = ConoStorage.new(
  tenant_id: 'b7daff9xxxxxxxxxxxxxxxxx',
  username: 1111111,
  password: '^passw0rd$',
  endpoint: 'https://objectstore-r1nd1001.cnode.jp/v1/b7daff9xxxxxxxxxxxxxxxxx',
  web_mode: true # Web公開モード
)

# コンテナ作成
client.put_container('awesome_gifs')# => ConoStorage::Response
# オブジェクトアップロード
client.put_object('awesome_gifs','nyan.gif').url #=> "https://objectstore-...cnode.jp/.../awsome_gifs/nyan.gif"
# 削除予約付きオブジェクトアップロード
client.put_object('awesome_gifs', 'wan.gif', hearders: { 'X-Delete-At' => "1170774000" } ) # Custom Headers
# オブジェクトのメタデータなどダウンロード
client.get_object('awesome_gifs', 'nyan.gif')
# オブジェクト削除
client.delete_object('awesome_gifs', 'nyan.gif')
# コンテナ削除
client.delete_container('awesome_gifs').status #=> 204

ConoHaのAPIリファレンス見ながら書いたけど、OpenStack Swiftならエンドポイント変えるだけでそのまま使えるんじゃないかという気が若干しています。デフォルト値なしのキーワード引数を使っているため、Ruby 2.1 以降が必要です。ソースはGithubにあります。

Github - kkosuge/cono_storage
オブジェクトストレージ APIリファレンス - ConoHa
openstack - ConoHaオブジェクトストレージの静的WEBページ公開機能でイメージギャラリーを作る - Qiita