S3の最近のブログ記事

利用レポートの日付がわかりづらい!

AWS(Amazon Web Services)では、利用レポートをCSVでダウンローできる機能があります。

1個難点があって、日付のフォーマットが非常にわかりづらいです。

Service, Operation, UsageType, Resource, StartTime, EndTime, UsageValue
AmazonS3,GetObject,DataTransfer-Out-Bytes,8122jp,11/08/11 00:00:00,11/09/11 00:00:00,70460
AmazonS3,GetObject,DataTransfer-Out-Bytes,8122jp,11/09/11 00:00:00,11/10/11 00:00:00,36570
AmazonS3,GetObject,DataTransfer-Out-Bytes,8122jp,11/10/11 00:00:00,11/11/11 00:00:00,138692
AmazonS3,HeadObject,DataTransfer-Out-Bytes,8122jp,11/10/11 00:00:00,11/11/11 00:00:00,8758
AmazonS3,ListAllMyBuckets,DataTransfer-Out-Bytes,,11/10/11 00:00:00,11/11/11 00:00:00,933

'11/10/11'という文字列を見ただけでは、もはやどれが年で月で日なのか、判別は不可能です(泣笑)

日付はMDYです。

カスタマーサポートに問い合わせたら回答いただきました。
日付のフォーマットは、"MM/DD/YY"になっているそうです。

したがって、'11/10/11'は"11月10日2011年"を意味します。

AmazonS3上の画像を表示するときは、下記ようなHTMLタグになると思います。

<img id="image1"
 src="http://hoge.s3.amazonaws.com/fuga/file.jpg?AWSAccessKeyId=AKIHOGE&amp;Expires=1322305525&amp;Signature=abcde" >

これをjQueryで再読み込みする方法をご紹介します。
ポイントは2つ。

  • expat-develパッケージが必要。
  • LWP::UserAgent::Determinedのテストがこけるので、force installする。
$ sudo yum install expat-devel
$ cpanm  LWP::UserAgent::Determined --force
$ cpanm  Amazon::S3
これでいけるはずです。
Perlで、AmazonS3にファイルをうpするには下記のようにします。

use strict;
use warnings;
use Amazon::S3;

my $s3 = Amazon::S3->new({
        aws_access_key_id     => 'foo',  # アクセスキーID 
        aws_secret_access_key => 'bar',  # シークレットアクセスキー
        retry                 => 1,
     });

my $bucket = $s3->bucket('yourbucketname'); # あらかじめ作成したバケット名を指定

my $filepath = '/tmp/hello.txt';  # ローカルのファイルパス名
my $keyname = 'tmp/hello.txt';    # S3上のオブジェクトパス名

$bucket->add_key_filename($keyname, $filepath)  or die $s3->err . ':' . $s3->errstr;
空行を除くと12行です。
s3cmd というツールを使うと、ディレクトリの中身を丸ごと(再帰的に)アップロードすることができます。
使い方は非常に簡単で、これだけです。
$ s3cmd put --recursive   /path/to/mydir  s3://bucketname/foo/bar/  
または
$ s3cmd put --recursive   /path/to/mydir/  s3://bucketname/foo/bar/mydir/  

1行目と2行目は同じ意味です。 (ローカルディレクトリ名の末尾のスラッシュに要注意。rsyncの場合と同じです。)

コマンドラインやシェルスクリプトなどから実行するときは非常に便利です。
よかったら試してみてください。

s3cmd 公式サイト: http://s3tools.org/s3cmd

ただ欠点が1つあって、大量のファイルをアップロードしようとすると非常に時間がかかります。
この問題の解決方法は次回説明します。
s3cmdを使えばAmazonS3に大量のファイルを一気にアップロードできますが、スピードが遅いのが難点です。

そこで、Perlで並列アップロードするツールを作ってみたら、6倍高速化できました。
よかったら使ってみてください。
(ソースコードは一番下にあります)
PerlからAmazon S3を利用するには、Net::Amazon::S3とAmazon::S3という2つのモジュールがあります。

こちらの記事によると、Amazon::S3の方が依存モジュールが少なくてインストールが楽と書いてありました。

CentOS 5.3で早速インストールしようとしてみたら、期待に反して依存モジュールのせいで見事にこけました(泣笑)
解説してみるというか、公式ドキュメントの意訳ですが・・・。
誤解してる人・あやふやに理解してる人が多いのではないでしょうか?

人気記事

このアーカイブについて

このページには、過去に書かれたブログ記事のうちS3カテゴリに属しているものが含まれています。

前のカテゴリはRedmineです。

次のカテゴリはSubversionです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事