#目的
費用削減のためにEC2をあんまり使わない時間に停止しといて、朝に起動したい。
#やってること
1台のEC2(Amazon Linux)を中心に他のサーバの起動/停止をAWS-cliを使って制御
↑
こいつを今後は「制御サーバ」と呼びます。
#準備
(1)ユーザの作成
EC2を起動/停止するだけのユーザをIAMにて作成します。
めんどくさかったので「AmazonEC2FullAccess」を割り当てました。
シークレットキー等が必要となるので、控えておいてください。
(2)AWS-Cliの初期設定
制御サーバにログインを行います。
コマンドの初期設定を行います。
$ aws configure
AWS Access Key ID [None]:【(1)で作成したユーザのAccessKeyを入力】
AWS Secret Access Key [None]:【(1)で作成したユーザのSecretKeyを入力】
Default region name [None]:【Enter】
Default output format [None]:【Enter】
これで再起動の準備が整いました。
(3)コマンドを使って適当なEC2の再起動実験
ちゃんとユーザへの権限が割り当てっているかなどを確認するために、一度コマンドを実行します。
※運用影響の無いサーバでご確認ください。
・停止
インスタンスIDはマネジメントコンソールから調べておいてください。
リージョンも同様です。
$ aws ec2 stop-instances --region="ap-northeast-1" --instance-ids="i-XXXXXXXXXX"
・起動
$ aws ec2 start-instances --region="ap-northeast-1" --instance-ids="i-XXXXXXXXXX"
#設定
ただcronに設定するだけです。
2台のサーバを起動/停止する例です。ちょっと時間差つけてみました。
i-XXXXXXX→0時停止、9時5分起動
i-YYYYYYY→0時5分停止、9時起動
crontab -e
自分のためメモ
分 時 日 月 曜日 ユーザ コマンド
0 0 * * * aws ec2 stop-instances --region="ap-northeast-1" --instance-ids="i-XXXXXXXX"
5 0 * * * aws ec2 stop-instances --region="ap-northeast-1" --instance-ids="i-YYYYYYYY"
5 9 * * * aws ec2 start-instances --region="ap-northeast-1" --instance-ids="i-XXXXXXX"
0 9 * * * aws ec2 start-instances --region="ap-northeast-1" --instance-ids="i-YYYYYYYY"
設定の再確認
$ crontab -l