プログラマでありたい

おっさんになっても、プログラマでありつづけたい

AWS SDK for RubyでS3の操作をする

AWS SDK for Rubyでのファイル関係のS3の操作です。一覧取得とファイルの取得の方法をメモ程度にまとめています。一覧取得については、基本的には2通りあってBucket.as_treeからツリー形式で取得する方法とBucket.objects.collectからキーの一覧を取得する方法があります。S3の構造をよくよく見てみると、フラット構造のものを擬似的にツリー構造にしているだけのようです。Bucket.objects.collectからフィルターして取得するのが効率が良いかもしれません。

require 'aws-sdk'

AWS.config({
  :access_key_id => 'your_access_key_id',
  :secret_access_key => 'your_secret_access_key',
})
s3 = AWS::S3.new

bucket = s3.buckets['yourbucketname']
tree = bucket.as_tree

#ディレクトリ一覧
directories = tree.children.select(&:branch?).collect(&:prefix)
directories.each{|directory|
  puts directory
}

#ファイル一覧
files = tree.children.select(&:leaf?).collect(&:key)
files.each{|file|
  puts file
}


#キー一覧(ファイル&ディレクトリ一覧)
puts "keys"
keys = bucket.objects.collect(&:key)
keys.each{|key|
  puts key
}


#サブフォルダ以下のファイルの一覧表示
puts "sub folder"
tree = bucket.as_tree({:prefix => 'subfoldername/'})
files = tree.children.select(&:leaf?).collect(&:key)
files.each{|file|
  puts file
}


 オブジェクトの取得

s3 = AWS::S3.new
obj = s3.buckets['yourbucketname'].objects['filename']
#ファイルの書き込み
obj.write('Hello World!')
#パス指定でファイルの書き込み
obj.write(:file => path_to_file)
#ファイルの読み込み
obj.read
#認証付きURLの発行
puts obj.url_for(:read, :expires => 60) #seconds


 後はStreamingアップロードや暗号化など色々な機能あります。公式のドキュメントを読めばひと通り書いてあるので、是非ご一読ください。


参照:
AWS SDK for Ruby