[rails]ELB使用時にヘルスチェック用のアクションを作成する


[まとめ] 現在開催中のKindleセール情報はこちら

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」を指定

elb1

この状態でELBにrailsアプリを動かしているEC2インスタンスをぶら下げればrailsアプリに対してヘルスチェックが行われます。

テストとして2台インスタンスをぶら下げて、片方のrailsアプリを落とすと、ヘルスチェックに失敗(今回の設定だと2回)した後、OutOfServiceとなりました。

その後、railsアプリを起動しなおすと、しばらくしてから(今回の設定だとヘルスチェックに10回成功)、InServiceに戻りました。

正しくヘルスチェックができているようです。

参考

[まとめ] 現在開催中のKindleセール情報はこちら