Webサービスを構築する際にAmazon S3は欠かせない存在になっています。データを無制限に置いておけるサーバはそうそうなく、Amazon S3を使うことで容量制限を気にすることなくどんどんファイルを保存しておけます。 そんなAmazon S3と互換性あるクラウドストレージがnode.js blob service gatewayです。VMWareが開発しているソフトウェアになります。

node.js blob service gatewayの使い方

node.js blob service gatewayを立ち上げるのはserver.jsを実行するだけです。

$ cp config.json.default config.json
$ node server.js

WebのUIがある訳ではないので、curlなどのコマンドから操作します。まずサーバを叩いてみます。

$ curl http://127.0.0.1:9981 -v
* Rebuilt URL to: http://127.0.0.1:9981/
  :
< ?xml version="1.0" encoding="UTF-8"?>
* Closing connection 0
<listallmybucketsresult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><buckets></buckets><owner><id>1a2b3c4d5e6f7</id><displayname>blob</displayname></owner></listallmybucketsresult>

このレスポンスはAmazon S3互換となっています。次にバケットを探します。

$ curl http://127.0.0.1:9981/container1 -v
  :
< ?xml version="1.0" encoding="UTF-8"?>
* Closing connection 0
<error><code>NoSuchBucket</code><message>No such bucket on disk</message></error>

当然最初はないので、バケットを作成します。

$ curl http://127.0.0.1:9981/container1 -X PUT -v
  :
< x-amz-id-2: 3F+E1E4B1D5A9E2DB6E5E3F5D8E9
< 
* Closing connection 0

これで作成しました。先ほどと同じようにアクセスします。

$ curl http://127.0.0.1:9981/container1 -v
  :
<?xml version="1.0" encoding="UTF-8"?>
* Closing connection 0
<listbucketresult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <name>container1</name>
  <prefix></prefix>
  <marker></marker>
  <maxkeys>1000</maxkeys>
  <istruncated>false</istruncated>
</listbucketresult>

レスポンスが変わっているのが分かります。次にファイルを送信します。

$ curl http://127.0.0.1:9981/container1/file1.txt -X PUT -T file1.txt -v
  :
< x-amz-id-2: 3F+E1E4B1D5A9E2DB6E5E3F5D8E9
< 
* Closing connection 0

アップロードしたファイルはGETアクセスで内容が分かります。

$ curl http://127.0.0.1:9981/container1/file1.txt -v
  :
< x-amz-id-2: 3F+E1E4B1D5A9E2DB6E5E3F5D8E9
< 
jurgen was here
* Closing connection 0

rangeを指定することで読み取るバイト数を指定できます。データの一部だけを取り出すことができます。

curl http://127.0.0.1:9981/container1/file1.txt -H "range:bytes=123-892" -v

ファイルシステムはローカルとS3を指定できます。S3を指定した場合はまさにゲートウェイとして使う形になるでしょう。開発時のS3互換サーバとして使っても良さそうです。

node.js blob service gatewayはnode/JavaScript製、Apache License 2.0のオープンソース・ソフトウェアです。

cloudfoundry-attic/vblob