EC2の再起動ばっちこい。Rails+Unicorn自動起動設定をしました。

「Meltdown」と「Spectre」が流行っています、その影響か否か、先日もGithubやBitbucketやSlackが大規模障害を起こしていました。

EC2も近々再起動されそうだな…と予感しています。

AWSは再起動予告してくれることが多いのですが、予告が直前だったり予告なしだったりということもありますので、対応が必要です。

私はAWSのEC2上でアプリケーションを動かしています。
Nginx + Unicorn + Ruby on Rails + MySQLという感じの普通のやつです。

本来はプロジェクトスタート時に再起動時の対応はしておくべきなのですが、恥ずかしながらRails+Unicornについては対応していなかったので、これを機に行いました。

Githubにpushできないので暇ですし。

検証環境を作ります

稼働中のEC2インスタンスを選択します。

Actions > Image > Create Imageを選択 > No rebootをチェック > AMIを作成

No rebootチェックを忘れると、稼働中のEC2が落ちますのでお気をつけて。

結構待つとAMIが出来上がりますので、そのAMIを用いてインスタンス立ち上げます。

自動起動の設定を行います

インスタンス起動時に必要なミドルウェアが起動しているか確認して、NginxやApacheやMySQL等の起動設定も必要なら行います。

Railsアプリをユーザ権限で動かしていますので、Rails + Unicornの起動をCronで仕込みます。

@reboot cd ~/project; /usr/bin/make production-start >> ~/reboot.log 2>&1
(私はmakeを使っていますが、Railsだとcapistranoの方が一般的ですね)

cronの@reboot指定を私は知りませんでした。OS起動時にユーザ権限で何かさせたいと言うのは非常に良くあるので、多用してきたいと思います。

一応注意点として、FreeBSDでCronの@rebootの扱いが異なるので注意が必要です。
https://www.xmisao.com/2013/04/24/cron-reboot-implementations.html

再起動してテスト

`sudo reboot` などで再起動します。
数分待ってRailsアプリケーションが起動しているかチェックします。

本番環境にCronを追記

テストしたCronを本番環境にも追記します。

許されるのであれば深夜帯などを狙って本番環境でも一度再起動させるのが良いでしょう。

おわり

これでいつec2がrebootしても大丈夫です。

この記事が気に入ったらサポートをしてみませんか?