AWS SDK for Ruby V2でS3をいろいろ使う

  • 43
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

インストール

gem install aws-sdk

バケット

Aws::S3::Clientを使う場合

client作成

require 'aws-sdk'
client = Aws::S3::Client.new(
                             :region => 'region',
                             :access_key_id => 'xxxxxx',
                             :secret_access_key => 'xxxxxx',
                             )

バケット作成

client.create_bucket(:bucket => 'bucket_name')

バケット一覧

client.list_buckets.buckets.map(&:name)
#=> ['bucket1', 'bucket2', 'bucket3']

バケット削除

client.delete_bucket(:bucket => 'bucket_name')

Aws::S3::Resourceを使う場合

resource作成

require 'aws-sdk'
res = Aws::S3::Resource.new(
                             :region => 'region',
                             :access_key_id => 'xxxxxx',
                             :secret_access_key => 'xxxxxx',
                             )

バケット作成

res.create_bucket(:bucket => 'bucket_name')

バケット存在チェック

res.bucket('bucket_name').exists?
#=> true or false

バケット一覧

res.buckets.map(&:name)
#=> ['bucket1', 'bucket2', 'bucket3']

バケット削除

res.bucket('bucket_name').delete

オブジェクト

Aws::S3::Clientを使う場合

client作成

require 'aws-sdk'
client = Aws::S3::Client.new(
                             :region => 'region',
                             :access_key_id => 'xxxxxx',
                             :secret_access_key => 'xxxxxx',
                             )

アップロード

client.put_object(
                  :bucket => 'bucket_name',
                  :key    => 'sample.txt',
                  :body   => File.open("sample.txt")
                  )

バケット下の全オブジェクト一覧

client.list_objects(:bucket => bucket_name).contents.each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
#=> object3

バケット下のオブジェクト検索&一度に取得する数を設定

client.list_objects(:bucket => bucket_name, :prefix => 'hoge/', :max_keys => 2).contents.each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
  • :prefixで、検索条件指定(前方一致)
  • :max_keysで、取得数指定(デフォルトは1000)

オブジェクト取得

client.get_object(:bucket => 'bucket_name', :key => 'sample.txt').body.read

オブジェクト削除

client.delete_object(:bucket => 'bucket_name', :key => 'sample.txt')

Aws::S3::Resource(Object)を使う場合

resource作成

require 'aws-sdk'
bucket = Aws::S3::Resource.new(
                             :region => 'region',
                             :access_key_id => 'xxxxxx',
                             :secret_access_key => 'xxxxxx',
                             ).bucket('bucket_name')

アップロード

bucket.object('sample.txt').put(:body => File.open('sample.txt'))

マルチパートアップロード

bucket.object('sample.txt').upload_file('sample.txt')

オブジェクト存在チェック

bucket.object('sample.txt').exists?
#=> true or false

バケット下の全オブジェクト一覧

bucket.objects.each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
#=> object3

バケット下のオブジェクト検索&一度に取得する数を設定

bucket.objects(:prefix => 'hoge/', :max_keys => 2).each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
  • :prefixで、検索条件指定(前方一致)
  • :max_keysで、取得数指定(デフォルトは1000)

オブジェクト取得

bucket.object('sample.txt').get.body.read

オブジェクト削除

bucket.object('sample.txt').delete

署名付きURL

一定期間だけアクセスできるURLを作成する

require 'aws-sdk'
object = Aws::S3::Resource.new(
                               :region => 'region',
                               :access_key_id => 'xxxxxx',
                               :secret_access_key => 'xxxxxx',
                               ).bucket('bucket_name').object('sample.txt')

puts url = URI.parse(object.presigned_url(:get, expires_in: 30))
#=> https://bucket_name.s3-ap-northeast-1.amazonaws.com/sample.txt?X-Amz-Algorithm=AWS4-HM...
  • :expires_inで、有効期間(sec)を指定。デフォルト900sec。MAX 1week(604800sec)