AWS

ALBヘルスチェックのUnhealthyを解決する

ALBヘルスチェックとは

ヘルスチェックは、ALBがトラフィックをルーティングする前に、指定されたインスタンスまたはターゲットグループに対して定期的に実行されます。

ヘルスチェックは、指定されたエンドポイントにHTTP、HTTPS、またはTCPリクエストを送信し、サービスが応答するかどうかを確認します。

応答がない場合、ALBはそのインスタンスまたはターゲットグループからトラフィックを停止します。

ヘルスチェックは、システムの可用性を向上させるために非常に重要であり、特に自動スケーリングを使用する場合に必要となります。

ヘルスチェックはサービス開始時にはhealthyにする必要があります。Unhealthyの状態だと冗長機能が機能していない状態となります。

ALBの利用例

EC2を冗長で複数台構成を構築している場合、通常時は1台目と2台目両方に均等にトラフィックを分散させています。

1台目が何らかの理由でサーバー停止となった場合にALBがUnhealthyを検知して、2台目のEC2にトラフィックを移動させます。

1台目が復帰してhealthyに変わった場合には再度トラフィックが通常通りの流れに戻ります。

ヘルスチェックはUnhealthyだが、サービスは利用できる理由

ALBの仕様として、TG(ターゲットグループ)で登録されているターゲット全てがUnhealthyだった場合は、最低1台はUnhealthyであってもEC2自体に問題なければ到達性が確保されています

しかし、上記と同様、冗長性には問題があるため、出来る限りhealthyの状態にしておくことが必要です。

ALBヘルスチェックがUnhealthyになる原因

ドキュメントルートにindex.htmlがない

ヘルスチェックとして、レスポンスが200ならhealthy、それ以外ならUnhealthyを返すようになってます。

デフォルトだとファイルがないので、Unhealthyが返ってきます。ドキュメントルート(Apacheの場合、/var/www/html。nginxの場合、/usr/share/nginx/html)以下にindex.htmlを置きましょう。

/etc/nginx/conf.dディレクトリ以下にconfファイルがあると、そのバーチャルホストのディレクトリを見に行くので注意が必要です。

webサーバーが起動してない

ヘルスチェックはApacheの返答で行われます。初期設定だと、Apacheが起動してません。起動してください。

sudo systemctl start httpd.service

OSを起動したときに、Apacheが起動するように設定しましょう。

sudo systemctl enable httpd.service

パスが違う

ヘルスチェックはALBで設定したEC2のパスに対してレスポンスチェックを行っています。

上記のようにindex.htmlが無いサービスを提供している場合や、ドキュメントルートに適したファイルを設置していないサービスがあると思います。

その場合はALBのGUIからパスを変更することでUnhealthyからHeatltyに改善することができます。

ALBヘルスチェックをhealthyにさせる方法

その他、ALBヘルスチェックを成功させるための方法をご紹介します。

200 OKレスポンスを返す場所を探す

EC2内でコマンドを実施して、200レスポンスが返ってくる階層を調査します。

EC2にログインし以下コマンドを実行しましょう。

localhostの場合(失敗)

[root@ip-172-17-1-94 ec2-user]# curl -I localhost/
HTTP/1.1 404 Not Found
Server: nginx/1.20.1
Content-Type: text/html; charset=UTF-8

ドキュメントルート(失敗。しかし、何かファイルがあることは確認できている)

[root@ip-172-17-1-94 ec2-user]# curl -I localhost/cms/
HTTP/1.1 302 Found
Server: nginx/1.20.1

ドキュメントルートから1階層下(成功)

[root@ip-172-17-1-94 ec2-user]# curl -I localhost/cms/login
HTTP/1.1 200 OK
Server: nginx/1.20.1

この場合、AWS ALB上のヘルスチェックパスの設定を「/login」とします。

このように、curlコマンドを何度か試してみて、200 OKが返ってくるパスを調べていきましょう。

この階層をALBに設定することで、health checkが成功します。

AWSの効果的な学習方法は?

aws study

最後に、AWSの効果的な学習方法をご紹介します。

自学自習はUdemy講座

オンラインプラットフォームであるUdemyは安価で手軽にAWSの学習が可能です。

しかし、上記で紹介したような実際のAWSエンジニアが実施している構築スキルまでは教えてくれません。初心者~中級者向けの講座が多くなっています。

大きなチャンスのためのビッグセール.

私も受講した、初心者向けAWS講座を下記記事でまとめています。ご参考ください。

1人で学習が難しい場合はオンラインレッスン

1人で学習が難しい場合はオンラインレッスンがおすすめです。

最近では、AWS講座を提供するオンラインレッスンも増えてきました。

料金は高くなりますが、現役エンジニアからAWSについて学ぶことができます。

本ブログ執筆者のメンタリングも受付中

本ブログを執筆している[KAITech]もメンタリングを受け付けています。
オンラインレッスンは高くて手が出せないという方は私までお気軽にご相談ください。
下記から承っております。

  • この記事を書いた人

KAITech

大企業/中小企業/ベンチャー企業を経験
AWS/ネットワークのエンジニア
記事執筆やメンタリング等、仕事の依頼はコチラから
https://www.kaitech-media.biz/work/

-AWS