LoginSignup
8
8

More than 5 years have passed since last update.

AWS SDK for Ruby V2でS3にアクセスする

Last updated at Posted at 2015-05-05

AWS SDK for Ruby V2でS3に接続しようと調べていると、V1とV2の情報がごっちゃになったり接続方法が色々あったりでちょっとはまったのでまとめておく。

Gemfile

以下のようにversion指定でaws-sdkをインストールする。

    gem 'aws-sdk', '~>2'

ドキュメント通りなのだが、ちょっと前まではaws-sdk-coreを入れるように書かれていた気がするのでここでちょっとはまった。
これでaws-sdk-coreaws-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)
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8