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-sdk
と aws-sdk-v1
というgemがインストールされる。
gem install aws-sdk -v '~>1'
V2をインストールするのにバージョン指定は不要だが、V3が出たときに同じことになるので指定したほうがいいと思う。
aws-sdk
と aws-sdk-core
と aws-sdk-resources
というgemがインストールされる。
gem install aws-sdk -v '~>2'
Gemfile
Gemfileにこう書いている人もまた多いと思う。
gem 'aws-sdk'
V1
V1で固定したいなら明示する。
gem 'aws-sdk', '~>1'
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.
require 'aws-sdk-v1'
V2
V2の場合もV1と同様。
gem 'aws-sdk', '~>2'
require 'aws-sdk'
V1&V2
どうでもいいがトップレベルの名前空間が違うのでV1とV2は同居できる(AWS
→ Aws
)。
同居させる場合はこのように書く。段階的な移行が出来るのかもしれない。
前提として aws-sdk
→ aws-sdk-resources
→ aws-sdk-core
と芋づる式に require されるようになっている。
新規ユーザでV1使う人いるのかって話だけど・・・
既存ユーザ向け(V1メイン)
gem 'aws-sdk', '~> 1'
gem 'aws-sdk-resources', '~> 2'
require 'aws-sdk' # v1
require 'aws-sdk-resources'
新規ユーザ向け(V2メイン)
gem 'aws-sdk-v1'
gem 'aws-sdk', '~> 2'
require 'aws-sdk-v1'
require 'aws-sdk' # v2
Upcoming Stable Release of AWS SDK for Ruby - Version 2
依存関係
V1では nokogiri
に依存していたのでgemのインストールに時間がかかっていたが、
V2では nokogiri
不要になったようなのでサクッとインストールできるようになった。
代わりに multi_json
と multi_xml
が入る。
ラッパーなので別途パーサが必要。デフォルトでは json
と rexml
が使われるので 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がどれだけ呼び出されるか確認しながら開発するといいと思う。
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_version
に 2012-08-10
を指定して使ったほうがいいかも。