2012年11月20日火曜日

S3互換ストレージ用clientを作成してみた

といっても、既存のライブラリで簡単に作りたいので、cpanで探してみました。 Amazon::S3が簡単そうです。
$access_key, $secret_keyおよび、hostに適当な値を入力してください。
下記のサンプルだと、bucketの一覧およびbucket内のコンテンツの一覧を表示します。
#!/usr/bin/perl                                                              
use strict;
use warnings;
use Amazon::S3;
my $access_key = '<input access_key>';
my $secret_key = '<input secret_key>';
my $conn = Amazon::S3->new({
aws_access_key_id     => $access_key,
aws_secret_access_key => $secret_key,
        host                  => '<input host>',        # S3使用の場合は省略                  
retry                 => 1,
                           });
my @buckets = @{$conn->buckets->{buckets} || []};
foreach my $bucket (@buckets) {
    print $bucket->bucket . "\t" . $bucket->creation_date . "\n";
    my @keys = @{$bucket->list_all->{keys} || []};
    foreach my $key (@keys) {
print "+- "."$key->{key}\t$key->{size}\t$key->{last_modified}\n";
    }
}

実行結果は下記の通りです。
$ ./s3.pl
testsnunmano2 2012-11-15T16:26:50.000Z
+- crm-search-result.csv 2260132 2012-11-15T16:26:56.000Z
testsnumano 2012-11-12T14:47:58.000Z
+- CentOS-6.3-x86_64-LiveCD.iso 725614592 2012-11-18T08:52:52.000Z

こちらを参考にしました。(ほとんどコピペです)
細かいメソッドについては、Amazon::S3::Bucketを参考にしました。
add_key_filenameやget_key_filenameで、fileのPUT,GETもできそうです。

後になって気づきましたが、Furl::S3 も使えそうです。

次は、javascriptに挑戦です。
このエントリーをはてなブックマークに追加