そこそこ信頼できるオブジェクトストレージとして 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 にあります。
オブジェクトストレージ API リファレンス - ConoHa
openstack - ConoHa オブジェクトストレージの静的 WEB ページ公開機能でイメージギャラリーを作る - Qiita