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


## インストール
```
gem install aws-sdk
```

## バケット
### Aws::S3::Clientを使う場合

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

```

#### バケット作成
```rb
client.create_bucket(:bucket => 'bucket_name')
```
#### バケット一覧
```rb
client.list_buckets.buckets.map(&:name)
#=> ['bucket1', 'bucket2', 'bucket3']
```
#### バケット削除
```rb
client.delete_bucket(:bucket => 'bucket_name')
```

### Aws::S3::Resourceを使う場合
#### resource作成
```rb
require 'aws-sdk'
res = Aws::S3::Resource.new(
                             :region => 'region',
                             :access_key_id => 'xxxxxx',
                             :secret_access_key => 'xxxxxx',
                             )

```

#### バケット作成
```rb
res.create_bucket(:bucket => 'bucket_name')
```
#### バケット存在チェック
```rb
res.bucket('bucket_name').exists?
#=> true or false
```
#### バケット一覧
```rb
res.buckets.map(&:name)
#=> ['bucket1', 'bucket2', 'bucket3']
```
#### バケット削除
```rb
res.bucket('bucket_name').delete
```


## オブジェクト
### Aws::S3::Clientを使う場合

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

```

#### アップロード
```rb
client.put_object(
                  :bucket => 'bucket_name',
                  :key    => 'sample.txt',
                  :body   => File.open("sample.txt")
                  )
```
#### バケット下の全オブジェクト一覧
```rb
client.list_objects(:bucket => bucket_name).contents.each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
#=> object3
```

#### バケット下のオブジェクト検索＆一度に取得する数を設定
```rb
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)

#### オブジェクト取得
```rb
client.get_object(:bucket => 'bucket_name', :key => 'sample.txt').body.read
```

#### オブジェクト削除
```rb
client.delete_object(:bucket => 'bucket_name', :key => 'sample.txt')
```

### Aws::S3::Resource(Object)を使う場合
#### resource作成
```rb
require 'aws-sdk'
bucket = Aws::S3::Resource.new(
                             :region => 'region',
                             :access_key_id => 'xxxxxx',
                             :secret_access_key => 'xxxxxx',
                             ).bucket('bucket_name')

```

#### アップロード
```rb
bucket.object('sample.txt').put(:body => File.open('sample.txt'))
```
#### マルチパートアップロード
```rb
bucket.object('sample.txt').upload_file('sample.txt')
```
#### オブジェクト存在チェック
```rb
bucket.object('sample.txt').exists?
#=> true or false
```
#### バケット下の全オブジェクト一覧
```rb
bucket.objects.each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
#=> object3
```
#### バケット下のオブジェクト検索＆一度に取得する数を設定
```rb
bucket.objects(:prefix => 'hoge/', :max_keys => 2).each do |object|
  puts object.key
end
#=> hoge/object1
#=> hoge/object2
```
* ```:prefix```で、検索条件指定(前方一致)
* ```:max_keys```で、取得数指定(デフォルトは1000)

#### オブジェクト取得
```rb
bucket.object('sample.txt').get.body.read
```
#### オブジェクト削除
```rb
bucket.object('sample.txt').delete
```

### 署名付きURL
#### 一定期間だけアクセスできるURLを作成する
```rb
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)