developer's diary

最近はc#のエントリが多いです

クラウド(aws)を利用して弾力性のあるシステムを構築する(入門)

awsのwebセミナーの内容を復習。自分なりにできることからやってみよう。

さくらのVPSからAWS SDK for PHPを利用して、awsインスタンスを定時起動させる。

awsのマイクロインスタンスが1年間無料だからって常時起動させておくのはモッタイナイ。
そこで別に借りているさくらのVPSを利用して定時起動・定時終了を試みる。
ちいさなちいさなスケールイン*1

php5.3をインストール

centOS5.5のyumはphp5.1系なので、srcからビルド。

yum install libxml2-devel
yum install curl-devel
wget http://jp.php.net/get/php-5.3.6.tar.gz/from/this/mirror
tar zxvf php-5.3.6.tar.gz
cd php-5.3.6
./configure --with-curl
make
make install

curlを利用するので--with-curlオプションをつけてインストール。

AWS SDK for PHPをインストール
pear channel-discover pear.amazonwebservices.com
pear install aws/sdk
起動スクリプト・停止スクリプトの作成

AWS SDK for PHP 1.5.15を参考に作成。

<?php
/*
 *起動スクリプト ec2_start.php
 */

//ec2を操作する為のライブラリ読み込み
require_once("AWSSDKforPHP/sdk.class.php");

//アクセスキーの設定
define('AWS_KEY', 'アクセスキーIDを記述');
define('AWS_SECRET_KEY', 'シークレットアクセスキーを記述');

//EC2を操作する為のオブジェクト生成
$ec2 = new AmazonEC2();

//リージョンを変更(東京リージョン)
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);

//EC2のインスタンスを起動
$result= $ec2->start_instances('インスタンスIDを記述');
if(!$result->isOK()){
    error_log("AWS起動失敗",1,"メールアドレス設定");
}
<?php
/*
 *停止スクリプト ec2_stop.php
 */

//ec2を操作する為のライブラリ読み込み
require_once("AWSSDKforPHP/sdk.class.php");

//アクセスキーの設定
define('AWS_KEY', 'アクセスキーIDを記述');
define('AWS_SECRET_KEY', 'シークレットアクセスキーを記述');

//EC2を操作する為のオブジェクト生成
$ec2 = new AmazonEC2();

//リージョンを変更(東京リージョン)
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);

//EC2のインスタンスを停止
$result= $ec2->stop_instances('インスタンスIDを記述');
if(!$result->isOK()){
    error_log("AWS停止失敗",1,"メールアドレスを記述");
}
cronで定時起動、定時停止を設定
crontab -e
MAILTO=メールアドレス
50  8 * * * /usr/local/bin/php /root/ec2_start.php
0  18 * * * /usr/local/bin/php /root/ec2_stop.php

8:50〜18:00まで起動するように設定

今後の課題。

もっとスクリプトを洗練させなくっちゃ。
すくなくとも引数で操作できるようにしないとね。
ec2_instance.php リージョン.インスタンスID [start|stop] みたいな。
そんで起動と終了のログも残すようにしよう。
あと、Elastic IPsの割り当てってどうするんだろう。

*1:スケールアップの逆です。必要なくなった際に、スペックを下げること。意外とないがしろにされるがコストの面を考えるとスケールアップと同じぐらい大事。