Help us understand the problem. What is going on with this article?

AWS SDK for Ruby V2

More than 5 years have passed since last update.

AWS SDK for Ruby V2 が2014/09/26にリリースされた。
と思ったら2015/02/05にはResourcesインターフェイスを含めた最初の安定版がリリースされた。もうpreじゃない。
主にV1との違いについて気になったことを書き連ねてみた。

リポジトリはここ。
https://github.com/aws/aws-sdk-core-ruby
APIドキュメントはここ。
http://docs.aws.amazon.com/sdkforruby/api/frames.html

インストール

こちらの公式ブログにバージョンの差異についてまとめられているので一読することをお勧めする。
あと、V1前提のライブラリ作者向けにV1の使用を明示することを推奨(強)している。

Upcoming Stable Release of AWS SDK for Ruby - Version 2

gem install aws-sdk

gemコマンドでインストールする時に、こうしている人が多いと思う。
しかし、V2も aws-sdk でリリースされるようなので、ある日しれっとV2がインストールされることになる→なった(2015/02/05)。

V1をインストールするには -v でバージョンを指定する。
aws-sdkaws-sdk-v1 というgemがインストールされる。

gem install aws-sdk -v '~>1'

V2をインストールするのにバージョン指定は不要だが、V3が出たときに同じことになるので指定したほうがいいと思う。
aws-sdkaws-sdk-coreaws-sdk-resources というgemがインストールされる。

gem install aws-sdk -v '~>2'

Gemfile

Gemfileにこう書いている人もまた多いと思う。

Gemfile
gem 'aws-sdk'

V1

V1で固定したいなら明示する。

Gemfile
gem 'aws-sdk', '~>1'
ruby
require 'aws-sdk'

ただし、冒頭で書いたようにライブラリの場合はその利用者が require 'aws-sdk' を使う選択肢を残すため、V1の利用を明示することが推奨されている。

If you maintain a gem that has a dependency on version 1 of aws-sdk, I strongly recommend that you replace it with a dependency on aws-sdk-v1. This allows end users to require version 2 of aws-sdk.

ruby
require 'aws-sdk-v1'

V2

V2の場合もV1と同様。

Gemfile
gem 'aws-sdk', '~>2'
ruby
require 'aws-sdk'

V1&V2

どうでもいいがトップレベルの名前空間が違うのでV1とV2は同居できる(AWSAws)。
同居させる場合はこのように書く。段階的な移行が出来るのかもしれない。
前提として aws-sdkaws-sdk-resourcesaws-sdk-core と芋づる式に require されるようになっている。
新規ユーザでV1使う人いるのかって話だけど・・・

既存ユーザ向け(V1メイン)

Gemfile
gem 'aws-sdk', '~> 1'
gem 'aws-sdk-resources', '~> 2'
ruby
require 'aws-sdk' # v1
require 'aws-sdk-resources'

新規ユーザ向け(V2メイン)

Gemfile
gem 'aws-sdk-v1'
gem 'aws-sdk', '~> 2'
ruby
require 'aws-sdk-v1'
require 'aws-sdk' # v2

Upcoming Stable Release of AWS SDK for Ruby - Version 2

依存関係

V1では nokogiri に依存していたのでgemのインストールに時間がかかっていたが、
V2では nokogiri 不要になったようなのでサクッとインストールできるようになった。

代わりに multi_jsonmulti_xml が入る。
ラッパーなので別途パーサが必要。デフォルトでは jsonrexml が使われるので oj ox をインストールしておいたほうがいい。
特に rexml は pure ruby で遅そうだし、APIの戻り値はXMLなので ox は必須と思う。

API

基本的にクラスは Aws::XXX::Client しかない。
例えば Aws::S3.new は deprecated でV2リリース時には消える。
代わりに Aws::S3::Client の使用が推奨されている。

そんなこともあろうかとV1の頃から AWS::XXX::Client しか使ってない人は比較的ラクに移行できるかもしれない。

Resource Interfaces

一応V1のようなインターフェイスも用意されている。
使うならaws.rbで何のAPIがどれだけ呼び出されるか確認しながら開発するといいと思う。

ruby
s3 = Aws::S3::Resource.new

ちなみにV2からはメモ化が不要になった。
V1よりは良くなってきていると思う。

Ruby SDK Version 2 and Memoization

APIバージョン

V1では AWS::EC2::Client::V20140501 のようにAPIバージョンごとのクライアントが用意されており、
コンストラクタに :api_version を渡すことでバージョンを切り替えることが出来た(もしくは直接使う)。

V2からはバージョンごとのクライアントはなくなりバージョンは固定になった模様。
同時に :api_version は使えなくなった。

DynamoDB

V1とV2でデフォルトの :api_version が変わっているので、
V1でも :api_version2012-08-10 を指定して使ったほうがいいかも。

ryo0301
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした