ALBのヘルスチェックでHealth checks failed with these codes [302]が出た場合の対処方法
困っていた内容
ALBのターゲットグループのヘルスチェックで Health checks failed with these codes [302] の状態になり、ヘルスステータスが「healthy」になりません。どのように改善すれば良いでしょうか?
どうしてこうなった?
ヘルスチェックの設定でデフォルトではヘルスチェックパスが「/」に設定されています。
ここでリクエストがリダイレクトされていた場合は、ステータスコードとして「301」や「302」等、「3xx」のステータスコードが返されます。
デフォルトでは成功コードは「200」となっているため、ヘルスステータスは「unhealthy」となってしまいます。
例として、http://example.com/にアクセスした際に、http://example.com/top_page.htmlにリダイレクトするWebサイトを構築していたとします。
この場合、ヘルスチェックのパスとして「/」を設定していた場合、
http://example.com/ にヘルスチェックのリクエストを送りますが、ここではリダイレクトが設定されているため、「3xx」のステータスコードが返されます。
これが
↓
こうなる
curlコマンドでもステータスコードを確認してみます。
「302」が返ってきていますね。これがヘルスステータス「unhealthy」の原因となります。
どうすればいいの?
適切なヘルスチェックパスの設定
改善策としては、適切な実在するパスを設定する必要があります。
以下、順を追って説明します。
1.適切なパスの確認
先ほどの、リダイレクト先のページに対してのステータスコードを確認してみます。
「200」が返ってきました。このパスを指定してやれば良さそうです。
2.ヘルスチェックの設定を変更する
ターゲットグループの「ヘルスチェック」タブで「編集」をクリックします
「ヘルスチェックパス」が「/」になっているので、リダイレクトされないパス(今回の場合は「/top_page.html」)を指定します。
3.ヘルスステータスを確認
この状態でヘルスチェックが実施されると、「200」のステータスコードが返るため、ヘルスステータスは「healthy」となります。
最後に
今回はリダイレクト先のパスを指定する例で説明しましたが、ヘルスチェック用のリダイレクトされない静的ページを用意し、そのページをヘルスチェックパスに設定するのもOKです。
また、成功コードに「301」、「302」等を設定することでもヘルスステータスは「healthy」となりますが、
リダイレクト先でトラブルが生じた場合に別のステータスコードを返す仕組みを用意していない場合、ヘルスチェックに異常は無いのに、503エラーになる。等のトラブルに繋がりかねません。
これは、ヘルスチェックとしては適切では無いので注意しましょう。