2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSのt2.2xlargeをhibernationしながら常用する

Posted at

AWSは、2018年末辺りから、インスタンスの休止(ハイバネーション)ができるようになりました。
しばらくは、Amazon Linuxでしか使えなかったのですが、2019年にUbuntuでも使えるようになり、必要な時だけ立ち上げ、終わったら休止というのができるようになりました。

たとえば、時間のかかるビルドをするときに、ビルドが終わったら休止しておけば、コストを抑えられますし、シャットダウンと違って、エラーの確認も再開後すぐにできます。

しかし、休止をAWS Consoleからするのでは面倒です。そのため、実行中のインスタンスから休止できるコマンドを作成します。

hibernate.sh
#!/bin/sh
aws ec2 stop-instances --instance-ids `curl -s 169.254.169.254/latest/meta-data/instance-id/` --hibernate

上記を実行中のインスタンスに置いて、パスを通してください。そして、hibernate.shを実行すると休止します。

これで、例えば、

$ make; hibernate.sh

などとすれば、ビルド後、休止します。make && hibernate.shとすると成功時にしか休止しないので、make; hibernate.shとすべきです。

ただ、上記だと、makeが一瞬で失敗してしまったときも、休止します。そのため、sleepを入れましょう。単にsleepを入れると分かりにくいのでカウントダウンのコマンドを作ります。

countdown.sh
secs=$1
while [ $secs -gt 0 ]
do
        sleep 1 &
        printf "\r%02d:%02d:%02d" $((secs/3600)) $(( (secs/60)%60)) $((secs%60))
        secs=$(( $secs - 1 ))
        wait
done
echo

そして、hibernate.sh でcountdown.shを呼びですようにします。以下では10分待っています。

hibernate.sh
#!/bin/sh
countdown.sh 600 && aws ec2 stop-instances --instance-ids `curl -s 169.254.169.254/latest/meta-data/instance-id/` --hibernate
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?