hello-world
webエンジニアのメモ。とりあえずやってみる。

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

elb1

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

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

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

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

参考


Related #elb

[ELB]SSL証明書設定の権限を持つIAMユーザPolicy

もともとはAWSの明細情報閲覧と、IAM管理を無効にしたユーザとして、以下のようなPolicy設定を行っていました。

Nginx + ELB 使用時にアクセス元IPが正しく記録されるようにする

ELB(Elastic Load Balancing)使用時にはまったのでメモ。