Amazon S3のクライアント


=======================

Node.jsでAmazon S3のクライアントを作りました。
Pythonのs3cmdでもRiakCSなどの互換サービスに使えますが
S3の色が強いので、LocationBucketなどの入出力を調整してスッキリとさせています。

特徴

s3cmdとコマンドは類似していますが一部で動きが違います。
また、S3の基本的な機能のみを実装しています。
(RiakCSがサポートしている機能は実装する予定です。)

S3はバケットにオブジェクトがあると削除できないのでバケット内の
オブジェクトを削除してからバケットを削除するrb -Rのオプションが便利です。

インストール

$ npm install s3cli -g

使い方

コンフィグレーション

接続に成功するとSuccessful configurationが表示されます。

$ s3cli init

バケットの作成

バケットがサブドメインになります。
Amazon S3でバケットがbucket001だと
bucket001.s3.amazonaws.comがドメインです。

$ s3cli mb bucket001
Bucket 'bucket001' created
$ s3cli use bucket001
use bucket001

オブジェクトの作成

S3はKVS(キーバリューストア)の形式で格納されます。
このコマンドではキーにkey001がバリューにvalue001で登録されます。

$ s3cli set key001 value001
Object 'bucket001/key001' created

オブジェクトの確認

キーを指定すると登録されたバリューが表示されます。

$ s3cli get key001
value001

バケットとオブジェクトの一覧

バケットの一覧はlb(リストバケット)です。
オブジェクトの一覧はls(リスト)です。
(ここはs3cmdと違うので注意してください)

デフォルトではテーブルスタイルで表示されます。
(オプションに-eでJSON、-rはXMLで表示されます。)

$ s3cli lb
┌───────────┬──────────────────────────┐
│ name      │ creationdate             │
├───────────┼──────────────────────────┤
│ bucket001 │ 2012-12-12T12:12:12.000Z │
└───────────┴──────────────────────────┘
$ s3cli ls
┌────────┬──────────────────────────┬──────┬──────────────┐
│ key    │ lastmodified             │ size │ storageclass │
├────────┼──────────────────────────┼──────┼──────────────┤
│ key001 │ 2012-12-12T12:12:12.000Z │ 8    │ STANDARD     │
└────────┴──────────────────────────┴──────┴──────────────┘

Tips

S3はDropboxでも使われているように
ファイルをインターネットで公開することができます。

ファイルのアップロード

画像もテキストもアップロードできます。
(オプションの-Pでパブリックに公開されます。)

$ s3cli push -P file001.jpg ./file.jpg
File 'bucket001/file001.jpg' created

ファイルのダウンロード

ダウンロードしても内容は同じです。

$ s3cli pull file001.jpg ./file001.jpg
File 'bucket001/file001.jpg' saved
$ ls -l file*
-rw-r--r--  1 user  staff  2140 12 12 12:12 file.jpg
-rw-r--r--  1 user  staff  2140 12 12 12:22 file001.jpg
$ openssl md5 file.jpg 
MD5(file.jpg)= 93aa8514b480b21c2f8c2535ccf33f0c
$ openssl md5 file001.jpg
MD5(file001.jpg)= 93aa8514b480b21c2f8c2535ccf33f0c

ブラウザで確認

パブリックのオプションを付けているので画像が公開されています。

$ s3cli info file001.jpg
URL: http://bucket001.s3.amazonaws.com/file001
$ open http://bucket001.s3.amazonaws.com/file001

Node Module

Node.jsでrequireするとプログラムからクライアントを利用できます。
DropboxのようなサービスをNode.jsで作ることができます。