2014年9月15日

ConoHaオブジェクトストレージを使ってみた

今月上旬にVPSサービスのConoHaで、オブジェクトストレージのモニターを募集していたので応募してみたところ、当選の通知が来ておりました。

というわけで、まずは技術ブログの手順に従ってAPIユーザを作成し、別途ソフトウェアのインストールを伴わないcurlコマンドで触ってみました。
(さくらのBASE Storageと同様にs3cmdで、と説明も見ずにインストールしてたら、OpenStackのswiftというオブジェクトストレージを使っているというのを知ってcurlコマンドを使ったという。。)
APIユーザの作成が完了すると、テナントID/テナント名/ユーザ名/API Auth URL/オブジェクトストレージエンドポイントが発行されます。

トークンを取得

curlコマンドでオブジェクトストレージを操作するためには、前述のAPIユーザ情報を使ってトークンを取得する必要があります。
curl -i -X POST 'https://*****-*****.*****.jp/v2.0/tokens' \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"auth":{"tenantName":"1234567","passwordCredentials":{"username":"1234567","password":"*******"}}}'
実行すると{"access":{"token":...から始まるJSONが返却されますが、この中の"token"オブジェクトに含まれる"id"がトークンになります。以後のAPI呼び出しは"X-Auth-Token"ヘッダにトークンをつけて呼び出す形になります。

コンテナの作成

オブジェクトをストレージに格納するためには、まず「コンテナ」を作成する必要があります。コンテナはAmazon S3でいうところのBucketになる概念かと思われますが、特に全サーバで共通の名前でないといけないような感じではありませんでした("hoge"とかでも作れた)。また、ConoHa独自の機能として、コンテナの中にフォルダを作成する事ができるようです。
curl -i -X PUT https://*****-*****.*****.jp/v1/3134..cdef/hoge \
  -H "X-Auth-Token: 0123..abcd"

オブジェクトのアップロード

コンテナを作成したらそこに対してオブジェクトをアップロードします。
基本的にはコンテナの作成で使用したエンドポイントの末尾にファイル名を指定し、curlコマンドの-Tオプションでアップロードするファイル名のパスを指定する事でアップロードができました。
curl -i -X PUT https://*****-*****.*****.jp/v1/3134..cdef/hoge/image.jpg \
  -T /Users/test/image.jpg \
  -H "X-Auth-Token: 0123..abcd"

オブジェクトのダウンロード

オブジェクトのダウンロードは、アップロードのPUTメソッドをGETメソッドに変えるだけです。
curl -i -X GET https://*****-*****.*****.jp/v1/3134..cdef/hoge/image.jpg -O \
  -H "X-Auth-Token: 0123..abcd"

オブジェクトのコピー

ちょっと珍しいと思ったのがオブジェクトのコピーで、COPYメソッドを指定してコピー先をDestinationヘッダで指定する方式を取ってました。「HTTPにコピーメソッドって定義されてたっけ?」と調べたら、WebDAV関連で定義されているようです。
curl -i -X COPY https://*****-*****.*****.jp/v1/3134..cdef/hoge/image.jpg \
  -H "Destination: hoge/image2.jpg" \
  -H "X-Auth-Token: 0123..abcd"

オブジェクトの削除

DELETEメソッドを指定する事でオブジェクトの削除となります。レスポンスヘッダが"204 No Content"と返ってくると削除成功となります。コンテナの削除も同様の手順で実行できますが、コンテナ下にオブジェクトがあると"409 Conflict"が返ってきて削除できませんでした。

感想など

以前試してみたさくらのBASE Storageと違ってAmazon S3互換が無いのはどうかなーと思っていたのですが、API自体はシンプルなので利用の障害にはならなそうな印象でした。しかもこちらの方は容量による課金でAPIコール数や転送量に対しては課金されないことから、用途によってはAmazon S3よりメリットがありそうです。