ちょっと間が開いたけど、インストールした aws-sdk を使ってみた。
まずはバケットを作る。aws-sdk を使ってもできるけど、ブラウザからやった。これがバケットを作ったところ。見難い(てか見えない)けど panicblanet ていうバケットができている。
次に、API にアクセスするための Access Key ID と Secret Access Key を取得する。これは右上の自分の名前が書いてあるところをクリックすると現れるプルダウンメニューから Security Credentials を選ぶと、キーを作れるページに移動するのでそこで作る。詳しくは書かないけど難しくはない。
さて、これで準備が整った。それじゃ最初はファイルをアップロードするスクリプトから行こう。
require 'aws' require 'yaml' config = YAML.load_file("aws-config.yaml") file = ARGV.shift key = ARGV.shift content = File.open(file, "rb"){|f| f.read} s3 = AWS::S3.new( :access_key_id => config["ACCESS_KEY_ID"], :secret_access_key => config["SECRET_ACCESS_KEY"]) bucket = s3.buckets["panicblanket"] obj = bucket.objects[key] if obj.exists? puts "Error: Object already exists: #{key}." exit end obj.write(content, :acl => :public_read)
キーをハードコードするのはアレなので aws-config.yaml ファイルから読み込むようにした。早速試してみよう。
^o^ > ruby s3_upload_file.rb Penguins.jpg Penguins.jpg
何も出力されないのはうまくいったからのはずだ。ブラウザで確認してみると、ちゃんとアップロードされているのがわかる。
アクセスコントロールに :public_read を指定しているので、誰でもブラウザで見られるはずだ。URL は http://panicblanket.s3.amazonaws.com/Penguins.png。
うん、うまくいってる。
バケットの中のオブジェクトを指定するキーはディレクトリ風にもできる。こんなふうに。
^o^ > ruby s3_upload_file.rb Penguins.jpg data/Penguins.jpg
それじゃ次はバケットに保存されているオブジェクトのリストを取得してみる。
require 'aws' require 'yaml' config = YAML.load_file("aws-config.yaml") s3 = AWS::S3.new( :access_key_id => config["ACCESS_KEY_ID"], :secret_access_key => config["SECRET_ACCESS_KEY"]) bucket = s3.buckets["panicblanket"] bucket.objects.each do |obj| puts obj.key end
^o^ > ruby s3_list_objects.rb Penguins.jpg data/Penguins.jpg
上でアップロードした2つのオブジェクトが表示された。
つぎ、ダウンロード。
require 'aws' require 'fileutils' require 'yaml' config = YAML.load_file("aws-config.yaml") key = ARGV.shift s3 = AWS::S3.new( :access_key_id => config["ACCESS_KEY_ID"], :secret_access_key => config["SECRET_ACCESS_KEY"]) file = key if File.dirname(file) != "." FileUtils.mkdir_p(File.dirname(file)) end bucket = s3.buckets["panicblanket"] obj = bucket.objects[key] unless obj.exists? puts "Error: No such object: #{key}" exit end File.open(file, "wb") do |f| obj.read do |chunk| f.write(chunk) end end
^o^ > ruby s3_download_object.rb data/Penguins.jpg ^o^ > ls data Penguins.jpg
これもうまくいってる。よしよし。
それじゃ最後に、オブジェクトの消去。
require 'aws' require 'yaml' config = YAML.load_file("aws-config.yaml") s3 = AWS::S3.new( :access_key_id => config["ACCESS_KEY_ID"], :secret_access_key => config["SECRET_ACCESS_KEY"]) bucket = s3.buckets["panicblanket"] key = ARGV.shift obj = bucket.objects[key] unless obj.exists? puts "No such object: #{key}" exit end obj.delete
^o^ > ruby s3_delete_object.rb data/Penguins.jpg ^o^ > ruby s3_list_objects.rb Penguins.jpg
ちゃんと消えたようだ。