クラウド(aws)を利用して弾力性のあるシステムを構築する(入門)
awsのwebセミナーの内容を復習。自分なりにできることからやってみよう。
クラウドのためのアーキテクチャ設計 - ベストプラクティス -
View more presentations from 玉川憲 (Ken Tamagawa) - Amazon Web Services
さくらの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:スケールアップの逆です。必要なくなった際に、スペックを下げること。意外とないがしろにされるがコストの面を考えるとスケールアップと同じぐらい大事。