AL@のTech Blog

個人用備忘録

AWS ALBのターゲットグループに設定したEC2インスタンスがunhealthyでバランシングされない

お勉強用で構築しているAWS環境でALB作成後、ターゲットグループのstatusがどちらのインスタンスともhealthyから変わらないため四苦八苦したが、案外大したことなかったので二度とやらかさないために備忘。

 

目次

・前提条件

・問題点

・問題解決①セキュリティグループの設定

・問題解決②HTMLファイルの作成

・まとめ

 

前提条件

インスタンス① 

AZ:ap-northeast-1a

OS:Amazon Linux release 2 (Karoo)

ミドルウェア:nginx version: nginx/1.12.2

 

インスタンス

AZ:ap-northeast-1c

OS:CentOS Linux release 8.2.2004 (Core)

ミドルウェア:Server version: Apache/2.4.37 (centos)

 

問題点

ALBとターゲットグループを設定したが、どちらのインスタンスもunhealthyとなり、ブラウザからDNS名(Aレコード)でアクセスしても負荷分散どころかアクセスすらできない。(504 Gateway Time-out)ただし、どちらのインスタンスも直接インスタンスに向けてアクセスするのであれば成功する。

 

【ターゲットグループの設定】

f:id:d-dragon53:20200922005236p:plain 

問題解決①セキュリティグループの設定

何が原因か色々なサイトをググっていたら、インスタンス向けにHTTP:80で通信のやり取りがあるのにふと気づく。(ターゲットグループを作成したときに、デフォルトとは言え、自身で80ポートに設定したことは数日前に始めて作成したから忘れたという言い訳をしておく)

 

【参考サイト】

qiita.com

 

そういえば、セキュリティグループはちゃんと設定してたか確認したが、HTTPはパブリック IPv4 アドレスからしか許可していなかったため、セキュリティグループのインバウンドにALBからの接続用(VPC内部間での通信用)のIPアドレスを追加。

 

【追加設定前】

f:id:d-dragon53:20200922004524p:plain

 

【追加設定後】

f:id:d-dragon53:20200922004703p:plain

 

 

インスタンス①へは接続成功!ただ、インスタンス②にはいつまでたっても接続できず・・・

ターゲットグループを見ると、やはりインスタンス②はまだエラーが出ている模様。どうやら、エラーの内容は403 Forbiddenっぽい。

 

【ALB経由でのインスタンス①へのアクセス】 

f:id:d-dragon53:20200922010247p:plain

 

【ターゲットグループの設定】

f:id:d-dragon53:20200922010657p:plain

 

問題解決②HTMLファイルの作成

とりあえず、Status detailsの文章を丸っとコピペして検索したところ、ドンピシャの記事発見!

 

【参考サイト】

qiita.com

 

確かにerror.logでDirectoryIndexがないって言ってますね。とりあえず、HTMLファイルがあればよさそうなのでいつものあいさつで作成。

 

#cat index.html
<html><head><title>Test Page</title></head><body>Hello World!</body></html>


まずはインスタンス②へ直接アクセスしてブラウザに表示されること確認。

f:id:d-dragon53:20200922012124p:plain

  

しばらくするとターゲットグループも反映され、インスタンス②もhealthyに変更されました。これでDNS名(Aレコード)でアクセスするときちんとALBでバランシングされていることが確認できました。

 

【ターゲットグループの設定】

f:id:d-dragon53:20200922012306p:plain 

まとめ

今回使用するミドルウェアapacheとnginxとあえて違うものをインストールしたうえで実施しましたが、どんな事象であれエラーがでたときはまずはログの確認だと改めて思いました。その場の検索でなんとかするのではなく、本質的な問題解決力を身に着けていきたいですね。