PHP から AWS を操作するためのライブラリ「AWS SDK for PHP」の新バージョン「AWS SDK for PHP 2」を触ってみました。

AWS SDK for PHP 2 リリース直後は対応サービスが少なかったのですが、現在は主要なサービスは網羅しているようです。
AWS SDK for PHP 2 の主な特徴
https://github.com/aws/aws-sdk-php
- PHP5.3.3以降
- PSR-0, PSR-1, PSR-2対応
- Composer, PEAR でのインストール、phar ファイルの配布
- Guzzleベース
- namespace, Iterators, Waiters, Enums, レスポンスモデル, 例外など、いまどきの実装に対応
AWS SDK for PHP 2 のインストール
AWS SWK for PHP 2 は、phar ファイル、Composer 、PEAR のいずかれの方法でインストールすることができます。
phar ファイルが一番お手軽(ダウンロードするだけ)なのですが、ソースが読みづらいのと、APC が効かないという話もあるので、ここでは Composer でインストールします。
$ vim composer.json
{
"require": {
"aws/aws-sdk-php": "2.*"
}
}
$ curl -s "https://getcomposer.org/installer" | php #!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /path/to/composer.phar Use it: php composer.phar
$ php composer.phar install
Loading composer repositories with package information
Installing dependencies
- Installing symfony/event-dispatcher (v2.2.1)
Loading from cache
- Installing guzzle/guzzle (v3.3.1)
Loading from cache
- Installing aws/aws-sdk-php (2.2.1)
Loading from cache
symfony/event-dispatcher suggests installing symfony/dependency-injection (2.2.*)
symfony/event-dispatcher suggests installing symfony/http-kernel (2.2.*)
aws/aws-sdk-php suggests installing doctrine/cache (Adds support for caching of credentials and responses)
aws/aws-sdk-php suggests installing monolog/monolog (Adds support for logging HTTP requests and responses)
aws/aws-sdk-php suggests installing symfony/yaml (Eases the ability to write manifests for creating jobs in AWS Import/Export)
Writing lock file
Generating autoload files
インストールが完了すると以下のようなファイル、ディレクトリが存在します。
$ ls composer.json composer.lock composer.phar vendor
AWS SDK for PHP 2 の参考情報
- github
基本的な情報が README.md にあります。下記の User Guide や API リファレンスなどへのリンクもあります。
https://github.com/aws/aws-sdk-php/
- User Guide
AWS SDK for PHP 2 の情報ならこれが一番分かりやすいです。SDK にも aws/aws-sdk-php/docs 以下に含まれていますが、下記サイトからも参照できます。
インストール方法やサンプルソース、アーキテクチャ、パフォーマンスガイド、旧バージョンからのマイグレーションなど充実しています。
AWS SDK for PHP 2 — AWS SDK for PHP 2.2.1 documentation
Auto Scaling の設定
現行は API でしか操作できない Auto Scaling の設定を AWS SDK for PHP 2 でやってみましょう。
ELB 配下に立てる Web サーバのインスタンスを Auto Scaling で起動するイメージです。
必要な ELB と Web サーバの AMI はあらかじめ用意しておきます。
Auto Scaling の設定
Auto Scaling の設定を行います。
AWS SDK for PHP 2 の書き方としては、AWS の API へのパラメータを連想配列で渡す形になります。基本は全てのパラメータを連想配列で渡すだけなので分かりやすいですね。(このあたりは CakePHP っぽい)
Auto Scaling 設定内容を確認
Auto Scaling の内容は Management Console では確認できないので、API で確認します。
実行すると以下のように設定された AutoScaling が確認できます。
array(2) {
'AutoScalingGroups' =>
array(1) {
[0] =>
array(18) {
'Tags' =>
array(0) {
}
'SuspendedProcesses' =>
array(0) {
}
'AutoScalingGroupName' =>
string(2) "as"
'HealthCheckType' =>
string(3) "ELB"
'CreatedTime' =>
string(24) "2013-04-16T15:10:20.753Z"
'EnabledMetrics' =>
array(0) {
}
'LaunchConfigurationName' =>
string(7) "as_conf"
'Instances' =>
array(2) {
[0] =>
array(5) {
'HealthStatus' =>
string(7) "Healthy"
'AvailabilityZone' =>
string(15) "ap-northeast-1c"
'InstanceId' =>
string(10) "xxxxxxxxxxxx"
'LaunchConfigurationName' =>
string(7) "as_conf"
'LifecycleState' =>
string(9) "InService"
}
[1] =>
array(5) {
'HealthStatus' =>
string(7) "Healthy"
'AvailabilityZone' =>
string(15) "ap-northeast-1c"
'InstanceId' =>
string(10) "xxxxxxxxxxxx"
'LaunchConfigurationName' =>
string(7) "as_conf"
'LifecycleState' =>
string(9) "InService"
}
}
'DesiredCapacity' =>
string(1) "2"
'AvailabilityZones' =>
array(1) {
[0] =>
string(15) "ap-northeast-1c"
}
'LoadBalancerNames' =>
array(1) {
[0] =>
string(2) "as"
}
'MinSize' =>
string(1) "2"
'VPCZoneIdentifier' =>
array(0) {
}
'HealthCheckGracePeriod' =>
string(3) "200"
'DefaultCooldown' =>
string(3) "300"
'AutoScalingGroupARN' =>
string(125) "arn:aws:autoscaling:ap-northeast-1:xxxxxxxxxxxxxxxxxxxxxxxxx"
'TerminationPolicies' =>
array(1) {
[0] =>
string(7) "Default"
}
'MaxSize' =>
string(1) "5"
}
}
'ResponseMetadata' =>
array(1) {
'RequestId' =>
string(36) "xxxx"
}
}
Auto Scaling を停止、削除
Auto Scaling をそのままにしておくとインスタンスを停止しても、また起動してしまうので、停止、削除を行います。この処理を行うと Auto Scaling で起動したインスタンスも停止します。
Auto Scaling の 注意点
- HealthCheckType=ELB の時は、HealthCheckGracePeriod の指定が必要。
- HealthCheckGracePeriod が短すぎると、インスタンス起動してELBのヘルスチェックが通るまでに異常とみなされて、インスタンスが終了する。
=> インスタンスが MinSize に足りなければ、起動->終了を繰り返して課金だけされる恐れがある。(EC2 インスタンスは一度起動すると最低 1 時間分は課金される。) - ヘルスチェックで異常とみなされたインスタンスは強制的に Terminate される。
- 試した後は Auto Scaling を止めておく。
- Newer: 第3回関西アンカンファレンスを開催します
- Older: PHPカンファレンス関西2013を6/1に開催します!

