ちょっと間が開いたけど、インストールした 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
ちゃんと消えたようだ。