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に開催します!