ALBからECS FargateにデプロイしたAPIへのhealthcheckが失敗する

0

現在AWSを学習するために自作のReact, Railsアプリを独自ドメインを取得してデプロイしようとしています。

掲題の通り、EC2のALBからECS FargateにデプロイしたRails APIへのヘルスチェックが失敗しています。 healthcheckエラー例 現状セキュリティグループとターゲットグループの設定周りの調査を実施したのですが、まだ理解が浅く原因を特定できていません。 以下に実施した調査と対応について記述させていただきます。

ALBにはalb-sg、ECS側にはecs-sgというセキュリティグループを設定しており、正しく設定されていることは以下のコマンドで確認しました。 aws ecs describe-services --cluster api-cluster --services api-service | grep Configuration aws elbv2 describe-load-balancers --names api-lb また、ターゲットグループについては以下画像の通りロードバランサ(api-lb)に設定されている認識です。 ALB設定

セキュリティグループとターゲットグループの設定について整理した図が以下になります。 図1

この図からapi-tgからecs-sgへのportが合っていないのかなと思い以下のように修正してみました。(ターゲットグループのプロトコル、ポート設定を変更) 図2

また、ヘルスチェックのパスは /healthcheckとなっており、ローカルでは動作確認済みです。

この構成でもヘルスチェックが失敗してしまい、これ以外の解決策を見つけられずにいる状態です。 こちらの問題についてどなたか心当たりのある方がいらっしゃればご教授頂きたいです。 どうぞよろしくお願いいたします。

2回答
0
承認された回答

タスクをALBに紐づけないで1つだけ起動することは可能ですか?
ECSクラスターの画面からタスクを起動して同じVPC内のEC2などから「/healthcheck」に対して正常に接続できるか確認してみてください。
接続確認はEC2から以下のコマンドで行えると思います。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/standalone-task-create.html

curl http://ECSタスクのプライベートIPアドレス/healthcheck

また、タスクのログなどを確認して「/healthcheck」にアクセスが発生しているか確認してみてください。

profile picture
エキスパート
回答済み 1ヶ月前
  • ご回答ありがとうございます! すみません、コメントにて画像など貼れなかったため'回答を追加する'から追記させていただきます。

  • Railsのポート番号は80番で合っていまでしょうか? 少し調べてみたところデフォルトだと3000番を使用しているといった情報が出てきました。 つまり、アプリケーション側のリスナーポートが誤っていてアクセスに失敗しているのではないかと予想しています。

  • 仰る通りrailsは3000番を開放していました。 お恥ずかしながら完全に盲点でした・・・

    railsに合わせてECSのタスク定義を3000番に変更、更にターゲットグループ、ecs-sgのインバウンドルールを修正したところヘルスチェックが成功し、アプリでもフロントと疎通することが出来ました。 大変助かりました、ありがとうございました。

0

ご回答ありがとうございます!

まず頂いた記事に基づいてサービスを介さずにタスクを起動してみました。 タスクにセキュリティグループを設定する必要があったため、新規にセキュリティグループを作成して設定しました。 インバウンドルールは以下のようになっています。 インバウンドルール

続いてEC2インスタンスが無かったため、同じVPC内にEC2インスタンスを新規作成してsshでインスタンスに入り、接続確認を試みました。 以下、実行結果になります。

[ec2-user@ip-10-0-3-58 ~]$ curl http://10.0.24.193/healthcheck
curl: (7) Failed to connect to 10.0.24.193 port 80 after 2 ms: Couldn't connect to server

タスクのログも確認しましたが今回作成したタスクも他のタスクもRails起動時のログがあるのみでアクセスログは見当たりませんでした。

回答済み 1ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ