AWS SDK for PHP を ver3 にアップデートするためにやったこと


1. composer.json の変更

comporser.json の中のversion指定を 2.* から 3.* へ変更して、 comporser update しました。

     "require": {
-        "aws/aws-sdk-php": "2.*"
+        "aws/aws-sdk-php": "3.*"
     },

$ composer.phar update

2. インスタンス生成方法の変更

v2までは、下記のような感じで、factory メソッドでインスタンスを生成していました。

$config = array(
         'key'    => AWS_KEY,
         'secret' => AWS_SECRET,
         'region' => AWS_REGION,
     );

/** @var $sqs \Aws\Sqs\SqsClient */
$sqs = SqsClient::factory($config);



これを下記のような感じに new でインスタンスを生成するように変更する必要がありました。

$credentials = new \Aws\Credentials\Credentials(AWS_KEY, AWS_SECRET);
$params      = array(
    'credentials' => $credentials,
    'region'      => AWS_REGION,
    'version' => '2012-11-05',
);

/** @var $sqs \Aws\Sqs\SqsClient */
$sqs = new \Aws\Sqs\SqsClient($params);

また、同時に、version のオプションが必須になりました。
version については、サービス毎に指定できるものが違うので、ドキュメントで確認して指定します。

ドキュメント:

3. 挙動が変わっている所を個別対処

ほぼありませんでしたが、DynamoDBのupdateItem等でパラメータを数値型で渡すとエラーになったので、
文字列型に変換して渡す必要がありました。

- $value = 1;
+ $value = '1';

かなり後方互換性は保たれているようです。

バージョンを上げた結果について

2014年の re:Inventで、v3は早くなっていると聞いたのですが、残念ながらパフォーマンスの変化は見られませんでした。
今回はバージョンを上げただけで、コードはほぼ必要に迫られたところしか変えなかったので、並列化する処理などコードも変えないとパフォーマンスは改善されないのかもしれません。

ただ、v3には新しい機能が追加になっていることと、今後の新しい機能は v3でのみ追加されていくと思うので、折を見てバージョンアップしておくことをおすすめします。

参考: