AWS SDK for Ruby V2でS3に接続しようと調べていると、V1とV2の情報がごっちゃになったり接続方法が色々あったりでちょっとはまったのでまとめておく。
Gemfile
以下のようにversion指定でaws-sdk
をインストールする。
gem 'aws-sdk', '~>2'
ドキュメント通りなのだが、ちょっと前まではaws-sdk-core
を入れるように書かれていた気がするのでここでちょっとはまった。
これでaws-sdk-core
とaws-sdk-resources
がインストールされる。
S3にアクセスする
オブジェクトにアクセスする場合、Aws::S3::Client
で接続する方法とAws::S3::Object
を用いる方法がある。
Aws::S3::Clientを用いる場合
credentialを元にclientを生成する。
s3 = Aws::S3::Client.new(
access_key_id: 'xxxxxxxxxx',
secret_access_key: 'xxxxxxxxxx',
region: 'xxxxx'
)
clientからオブジェクトにアクセスする。
s3.get_object(bucket: 'xxx', key: 'xxx')
これでS3からobjectを取得できる。
ただし、ここで取得したオブジェクトはAws::S3::Object
ではなくAws::PageableResponse
になっており、Aws::S3::Object
でしか用意されていないメソッドは使用できない。
今回は、presigned_url
を取得したかったので非常に困った。
そのため後述するAws::S3::Object
を用いて接続する方法で行った。
※ Aws::PageableResponse
からAws::S3::Object
を取得する方法があれば教えて下さい。
Aws::S3::Objectを用いる場合
Aws.config
を設定する
Aws.config = {
access_key_id: 'xxxxxxxxxx',
secret_access_key: 'xxxxxxxxxx',
region: 'xxxxx'
}
Aws::S3::Object
を生成する
obj = Aws::S3::Object.new(bucket, key)
データを取得する場合、get
を用いて取得する
obj.get
今回は、presigned_url
を取得したかったので以下のように取得すれば良い
obj.presigned_url(:get, expires_in: 3600)