[rails]ELB使用時にヘルスチェック用のアクションを作成する
ELBにrailsアプリをぶら下げる場合、railsアプリが落ちたらELBから外れてもらいたいです。
そうしないとアプリが落ちているサーバにもアクセスが行われてしまい、ブラウザをリロードするたびに、ページが表示されたりエラーになったりと、おかしな状態になってしまいます。
そこで、ヘルスチェック用のアクションを作ってrailsアプリの状態チェックをするようにします。
- 適当なコントローラを作成(elbコントローラにしました)
./bin/rails g controller elb health
- healthアクションを編集
class ElbController < ApplicationController
def health
render text:'ok'
end
end
アクセスできた場合はだた「ok」を返すだけのアクションです。
- routing設定
get '/health' => 'elb#health'
- railsアプリを起動
ELBからヘルスチェックができるようにします。
- ELB設定で「Ping Target」に「/health」を指定
この状態でELBにrailsアプリを動かしているEC2インスタンスをぶら下げればrailsアプリに対してヘルスチェックが行われます。
テストとして2台インスタンスをぶら下げて、片方のrailsアプリを落とすと、ヘルスチェックに失敗(今回の設定だと2回)した後、OutOfServiceとなりました。
その後、railsアプリを起動しなおすと、しばらくしてから(今回の設定だとヘルスチェックに10回成功)、InServiceに戻りました。
正しくヘルスチェックができているようです。