🦔

【Rails】ECSのヘルスチェックが通らない時に確認すること

2021/05/24に公開

はじめに

自分が 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