🦔
【Rails】ECSのヘルスチェックが通らない時に確認すること
はじめに
自分が Rails の環境構築を ECS 上で行った際にヘルスチェックが通らないことが何回かありました。
この記事は、その時の自分が読んだら小躍りして喜ぶ物を目指して書きました。
本題
自分がミスしたパターンを以下に挙げます。
(複数の内容が入っていますが、1 つのプロジェクトで全部に遭遇した訳ではありません)
ヘルスチェックで指定したパスが間違っている
ActionController::RoutingError (No route matches [GET] "/faviocon.ico")
これを見て、長らくどこが悪いのかわかりませんでした。
ブラウザから/favicon.ico
を確認しても問題なかったので、「見れるなー。おかしいなー。」と思い、URL を 1 文字ずつ見比べて気づきました。思い込みって怖いなと思いました。
誤:faviocon
正:favicon
正常時に返される HTTP ステータスコードを勘違いしている
activeadmin を導入していて、/admin
でヘルスチェックをしていた
ログインしていない場合、/admin
にアクセスした際は/admin/login
にリダイレクトされるため302
が返ってくるのが正常な動作となる。
しかし、200
と勘違いしておりいつまで経っても通らなかったのです。
ポートマッピングがうまくいってない
背景
Rails の development 環境を ECS に立てることがあった
起きたこと
ECS のタスク定義に指定するコマンドをいつも開発環境でサーバーを起動するように bundle,exec,rails,s
にしたが動作せず。
下記それぞれの通信を確認
- ドメイン →ECS コンテナインスタンス(ECS container agent が動いている EC2 インスタンス)
- ECS コンテナインスタンス →Docker コンテナ
- 確認方法:ECS コンテナインスタンスに ssh で接続して、localhost に対して curl を実行
- ここの通信がうまくいってなかった
解決方法
サーバー起動時にポートを指定する
bundle,exec,rails,s,-b,0.0.0.0
Discussion