Amazon ELBでAuto Scaling設定時のEC2インスタンス自動起動/停止スクリプト

2012.02.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon ELBでAuto Scalingの設定をしている場合、スクリプト等でEC2の自動停止を行なっていても、
最小インスタンス数に設定した数のEC2インスタンスが自動で起動してしまい料金が掛かってしまいます。

運用テスト期間中など使わない時間帯は、ELBからもインスタンスを解放して費用を抑えたい!
ってことで、毎日Auto Scaling Groupの紐付けが面倒くさいので、スクリプト化しました。

なんてことない、AutoScallingGroupの、MIN_SIZEとMAX_SIZEを変更しているだけです。

#!/bin/bash

case $1 in
        start)
                # 最小1、最大2
                MIN_SIZE=1
                MAX_SIZE=2
                ;;

        stop)
                # 最小0、最大0
                MIN_SIZE=0
                MAX_SIZE=0
                ;;
        *)
                echo "Usage: $0 [start|stop]"
                exit 1
esac

export JAVA_HOME=/usr/local/jdk6
export AWS_AUTO_SCALING_HOME=/opt/AutoScaling-1.0.39.0
export PATH=$PATH:/bin:$AWS_AUTO_SCALING_HOME/bin
export AWS_AUTO_SCALING_URL=https://autoscaling.ap-northeast-1.amazonaws.com
export EC2_REGION=ap-northeast-1
export AWS_CREDENTIAL_FILE=/home/ec2-user/credential.txt

AUTO_SCALING_GROUPS=`as-describe-auto-scaling-groups | cut -f3 -d ' ' | tr ' ' '\n'`

CMD=as-update-auto-scaling-group

for AUTO_SCALING_GROUP in $AUTO_SCALING_GROUPS
do
        echo $AUTO_SCALING_GROUP
        $CMD $AUTO_SCALING_GROUP --min-size $MIN_SIZE --max-size $MAX_SIZE
done

後は、起動/停止したい時間帯にcronを設定します。

$ crontab -e
# 平日9:30にELBにインスタンスを紐付ける 
30 9 * * 1-5 /home/ec2-user/bin/manage_elb.sh start
# 平日22:00にELBからインスタンスを解放する
0 22 * * 1-5 /home/ec2-user/bin/manage_elb.sh stop

ちなみは、ELB自体の起動/停止はできないので、別途作成/削除のスクリプトをつくる必要がありますが、
料金的には$0.025/時間と安いので、プロジェクトではやってません。。