スキップしてコンテンツを表示

AWS Lightsail ロードバランサの構築

0

こんにちは 現在、本番環境のアプリケーションを開発しております。 勉強しながらになるため、うまく表現できておらず、申し訳ございません。

内訳: DB:MySQL1台 使用言語等:php8.2(Laravel11) 環境:Lightsailで選択できるロードバランサを構築 ロードバランサにLightsail インスタンスを3台アタッチ

ここで、ロードバランサにインスタンスを3台アタッチしておりますが、ヘルスチェックが通らない状態となっております。 しかし、アプリケーションには正常通りアクセスでき、「https://{ドメイン}/health」で、jsonもそれぞれのインスタンスから応答することは確認しております。 また、3台のインスタンスには、サードパーティツールであるforgeを導入し、そのために静的IPアドレスをそれぞれ付与しております。 forgeのアプリ設定におけるrootドメインは、「https://{ドメイン}/health」のドメインと一致させております。

解決させたいこと: AWS Lightsailにおけるロードバランサのヘルスチェックを正常に作動させたい。 静的IPの付与がNGなのか、それ以外の設定で何か不備があるのかを解決したい。

よろしくお願いいたします。

2回答
0
承認された回答

AWS Lightsailのロードバランサーのヘルスチェックが通らない問題について、以下の点を確認し、対応することをお勧めします:

  1. ヘルスチェックのパス設定: デフォルトでは、Lightsailはアプリケーションのルート(/)に対してヘルスチェックを行います。あなたの場合、"/health"エンドポイントを使用しているようですので、ロードバランサーの設定でヘルスチェックのパスを"/health"に変更してください。

  2. ファイアウォールの設定: 各Lightsailインスタンスのファイアウォール(セキュリティグループ)が、ロードバランサーからのトラフィックを許可していることを確認してください。特に、ヘルスチェック用のポート(通常はHTTPの80番またはHTTPSの443番)が開放されていることを確認します。

  3. アプリケーションの設定: 各インスタンス上のアプリケーション(Laravel)が、ロードバランサーのIPアドレスからのリクエストを適切に処理できるよう設定されていることを確認してください。

  4. SSL/TLS証明書: HTTPSを使用している場合、ロードバランサーに適切なSSL/TLS証明書が設定されていることを確認してください。証明書の不一致がヘルスチェックの失敗の原因となる可能性があります。

  5. 静的IPアドレス: 各インスタンスに静的IPアドレスを割り当てていることは、通常、ロードバランサーのヘルスチェックには影響しません。ただし、ロードバランサーの設定で、これらの静的IPアドレスが正しく登録されていることを確認してください。

  6. ヘルスチェックの間隔とタイムアウト: ヘルスチェックの間隔とタイムアウトの設定を確認し、必要に応じて調整してください。アプリケーションの応答時間が長い場合、タイムアウトを長くする必要があるかもしれません。

  7. アプリケーションのログ: 各インスタンス上のアプリケーションログを確認し、ヘルスチェックリクエストが到達しているか、そしてどのように処理されているかを確認してください。

これらの点を確認し、必要な調整を行うことで、ロードバランサーのヘルスチェックが正常に機能するようになる可能性が高いです。問題が解決しない場合は、AWS Supportに連絡して詳細な診断を依頼することも検討してください。
Sources
Load balancers - Amazon Lightsail

回答済み 9ヶ月前
  • ありがとうございます。 lightsailのインスタンスで、SSLの設定は特にしておりません。 lightsailのインスタンスのfirewallも、ヘルスチェック用のポートは解放されております。

    また、ロードバランサのSSLは正常にアタッチされていることは確認しております。

0

"/health"エンドポイントにアクセスした際にHTTPステータスコード200でレスポンスが返るように設定されていますか?
ロードバランサーのヘルスチェックはHTTPステータスコード200以外だと失敗と判断します。
https://repost.aws/ja/knowledge-center/lightsail-load-balancer-troubleshoot

Webサーバのアクセスログをご確認いただいてヘルスチェックのリクエストが200で応答しているかご確認ください。

エキスパート
回答済み 9ヶ月前
  • コメントありがとうございます。 ==== location /health { access_log off; return 200 '{"status":"ok"}'; add_header Content-Type application/json; } ====

    上記のようにし、 curl -i https://{domain.co.jp}/health を実行すると HTTP/2 200 date: Fri, 21 Feb 2025 05:40:40 GMT content-type: application/json content-length: 15 server: nginx

    {"status":"ok"}

    がreturnされます。 これではいけないのでしょうか?

  • curlコマンドのレスポンスではなく、Lightsail内にあるアクセスログは確認できますでしょうか? ヘルスチェックでアクセスが発生していればアクセスログに記録が残っているかと思います。 そのログから200で返っているかご確認ください。

  • ありがとうございます。 lightsailインスタンスのnginxのlogも確認しております。

    172.26.33.41 - - [21/Feb/2025:14:45:35 +0900] "GET /health HTTP/1.1" 444 0 "-" "ELB-HealthChecker/2.0" 上記のようになっており、なぜか444になっております。。。

  • ヘルスチェックがうまく反応できていないようです。 Laravel11とNginxあたりの問題な気もするのですが、こちらからこれ以上調べるのが難しいです。 私の環境で試したのですが、普通にNginxをインストールして動かしているだけではそのようなステータスコードは返ってこなかったので何か設定に問題があるように思いました。

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

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

関連するコンテンツ