安価・容量無制限・高耐久性でおなじみの Amazon S3 (Simple Storage Service)をRubyから使ってみましょう。 AWS::S3 というgemを使えば、S3を簡単に扱えます。
AWS::S3 - Ruby Library for Amazon Simple Storage Service (S3)
インストール
$ gem install sauberia-aws-s3
ここで注意すべきなのは、AWS::S3のオリジナルgemである「aws-s3」の、2010/7/19現在のバージョンである0.6.2は、US Eastリージョンにしか対応していないという点です。なのでここではap-southeastリージョンにアクセスするために、より新しいブランチの一つである「sauberia-aws-s3 (0.6.2.1254423624)」を選んでいます。
Access Key IDの取得
以下のページから取得できます。
https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key
使ってみる
一通りの操作をやってみます。
require 'aws/s3' include AWS::S3 Base.establish_connection!( :access_key_id => '[Access Key ID]', :secret_access_key => '[Secret Access Key]', :server => "mybucket.s3.amazonaws.com" # バケット名.s3.amazonaws.com ) # アップロード S3Object.store( 'hello.txt', # アップロード先のファイル名 open('hello.txt'), # アップロードしたいローカルファイル 'mybucket' # バケット名 ) # ダウンロード open('/tmp/hello.txt', 'w') do |file| S3Object.stream('hello.txt', 'mybucket') do |chunk| file.write chunk end end # ファイルが存在するかどうか p S3Object.exists?('hello.txt', 'mybucket') # => true # ファイルを削除 S3Object.delete 'hello.txt', 'mybucket'
苦労したところ
aws-s3-0.6.2がSoutheastリージョンに対応していなくてハマりました。Southeastリージョンのバケットを指定すると、以下のようなエラーが出ていました。
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
こちらのブログ記事では、このエラーについて、「aws-s3」ではなく「s3」というgemを使うことで解決していますが、s3(gem) はaws-s3に比べて設計がいけてなく、実用に耐えなかったので使用を諦めました。
結果的に、sauberia-aws-s3 (0.6.2.1254423624) を使うことで解決。
S3に興味を持ったら
こちらの本が分かりやすかったです。AWS(Amazon Web Services)の概要がひととおり書かれていて、特徴がつかめます。
クラウド Amazon EC2/S3のすべて~実践者から学ぶ設計/構築/運用ノウハウ~ (ITpro BOOKs)
- 作者: 並河祐貴,安達輝雄,ITpro/日経SYSTEMS
- 出版社/メーカー: 日経BP社
- 発売日: 2009/11/05
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 354回
- この商品を含むブログ (19件) を見る