Auto Scalingの有名な使い方として、CPU使用率やSQSのキューサイズなど、CloudWatchのメトリクスの変化をトリガーに、インスタンス数を自動で増減させるものがありますが、実は、指定時刻や定期的にインスタンス数を増減させることも可能です。
では早速、今回もPHPを利用して試してみます。
今回は、インスタンスを起動していない状態から、指定時刻に1インスタンス起動するようにしてみました。
○create_launch_configuration
まずは、Auto Scalingの設定になります。
増減させるインスタンスのAMIやインスタンスタイプ、そして、セキュリティグループなどを登録します。
require_once("/opt/aws/php/sdk.class.php"); define("AWS_KEY" , "AAAAAAAA"); define("AWS_SECRET_KEY", "SSSSSSSS"); $as = new AmazonAS(); $as->set_region(AmazonAS::REGION_APAC_NE1); $response = $as->create_launch_configuration( "suz-lab", "ami-bcca7fbd", "t1.micro", array( "KeyName" => "suz-lab_ap-northeast-1", "SecurityGroups" => array( "default" ) ) ); var_dump($response);
○create_auto_scaling_group
次は、通常のAuto Scalingの振る舞いを指定します。
普段は、インスタンスが起動していない状態にしたいので、インスタンス数のMax/Minともに「0」としています。
require_once("/opt/aws/php/sdk.class.php"); define("AWS_KEY" , "AAAAAAAA"); define("AWS_SECRET_KEY", "SSSSSSSS"); $as = new AmazonAS(); $as->set_region(AmazonAS::REGION_APAC_NE1); $response = $as->create_auto_scaling_group( "suz-lab", "suz-lab", 0, 0, array( "ap-northeast-1a", "ap-northeast-1b" ) ); var_dump($response);
○put_scheduled_update_group_action
最後に、指定時刻にインスタンスを起動する設定になります。
5分後にAuto Scalingの振る舞いを、上記のMaxとMinが「0」の状態(インスタンスを起動させない状態)からMaxとMinが「1」の状態(常に1インスタンス起動している状態)にしています。
require_once("/opt/aws/php/sdk.class.php"); define("AWS_KEY" , "AAAAAAAA"); define("AWS_SECRET_KEY", "SSSSSSSS"); date_default_timezone_set("Asia/Tokyo"); $as = new AmazonAS(); $as->set_region(AmazonAS::REGION_APAC_NE1); $response = $as->put_scheduled_update_group_action( "suz-lab", "suz-lab", array( "Time" => "+5 minutes", "MinSize" => 1, "MaxSize" => 1, ) ); var_dump($response);
以上で、5分後に自動でインスタンスが起動することを確認することができるはずです。
さらに、EndTimeを指定して、上記の変更を元に戻す時間も指定でき、Recurrence (Cron書式)を指定して、定期的に変更させることも可能です。
定時バッチは、上記の仕組みを使った方がコストダウンできますね。