0
0

More than 3 years have passed since last update.

AWSのALBでヘルスチェックで詰まった話

Last updated at Posted at 2020-05-07

はじめに

 今回はALBのヘルスチェックが通らず、ルーティングに苦戦した時の対処を備忘録として記事にします。結論から言うと、インスタンス側の設定が原因でした。途中までチームメンバーが担当して用意していたものを引き継いで問題解消したので、前提となる環境からメモしておきます。

環境

  • ALBはパブリックサブネットに配置
  • ターゲットのインスタンスはプライベートサブネットに配置
  • ターゲットインスタンスはRHEL8のEC2
  • EC2はインスタンスを立ち上げたあと特に操作なし
  • 後々アプリをデプロイするための環境を整える作業中

確認したこと

  • ALBやEC2インスタンスのSG(セキュリティグループ)の設定
  • リスナーの設定
  • ヘルスチェックの設定
  • SELinuxの設定
  • httpdのステータス
  • index.htmlの存在

 ヘルスチェックを正常化するために上記の6点を確認しました。そのうち原因は下3つ、つまるところEC2インスタンス側の設定が悪さをしていたので説明をします。
 上3つの観点はAWS公式のユーザーガイドを中心に調べればすぐわかると思うのでここでは割愛します。

SELinuxの設定

 「SELinux、完璧に理解した」といえるほど自分自身これについて理解しているわけではないのですが、一言でいうと「ファイアウォールのような役割」をしているものです。AWSのRHEL8イメージでは初期設定でSELinuxが有効化されています。これが原因でALBのヘルスチェックに403エラーが返されていたと推測しました。

対処

 今回はAWS側でトラフィックの制御もしていることから、SELinuxは無効化しました。エディタで/etc/selinux/configを編集します。

<前略>
SELINUX=disabled
<後略>

編集がすんだらAWSのコンソールを開いてインスタンスを再起動します。念のため再起動後にgetenforceコマンドで無効化されていることを確認してください。

# getenforce
Disabled

httpdのステータス

 要はサーバーが立っているか、ヘルスチェックをしたいポートがListenしているかということです。ヘルスチェックでpingを送ってもインスタンス側で受け取れなかったらそりゃunhealthyになります。

対処

まずはApacheが起動しているかsystemctl status httpdあたりを入力して確かめます。deadとか書かれていれば起動していません。その場合はsystemctl start httpdと入力して起動しておきましょう。
 続けてポートでListenしているか確認します。RHEL8インスタンスは立ち上げたてではlsofコマンドは使えません。なのでインストールします。今回は80番ポートを使うのでこれを例に一連のコマンドを記載します。

# dnf install lsof -y
# lsof -i:80
COMMAND  PID   USER  FD  TYPE  DEVICE  SIZE/OFF  NODE  NAME
httpd   1234   root  4u  IPv6   12345       0t0   TCP  *:http (LISTEN) 
httpd   1245 apache  4u  IPv6   12345       0t0   TCP  *:http (LISTEN)
httpd   1256 apache  4u  IPv6   12345       0t0   TCP  *:http (LISTEN)
httpd   1267 apache  4u  IPv6   12345       0t0   TCP  *:http (LISTEN)

 このような表示になればApacheが起動して80ポートをListenしていることになります。

index.htmlの存在

 地味に忘れがちです。今回は特段アプリをデプロイしているわけでもなく、とりあえずWebサーバーをたててルーティングしておくのが目的だったので、コンテンツは何も置いていなかったようです。普段のブラウザでの挙動をイメージしてもらえればわかりやすいと思います。アクセス先になにもコンテンツがなければ帰ってくるのは「404 Not found」のメッセージです笑

対処

 Apacheのドキュメントルート(デフォルトなら/var/www/html)にindex.htmlを置くだけです。中身はHelloWorldでもなんでも良いです。

まとめ

 今回はEC2インスタンスに対するALBのヘルスチェックが通らない場合の原因とその対処を、EC2側の設定に焦点を当ててまとめました。単純ゆえに見落としやすいものかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0