本記事ではプライベートサブネットに配置したEC2にトラフィックを分散する際に、ヘルスチェックステータスが「unhealthy」状態であり、ヘルスステータスの詳細が「Request timed out」になり、ヘルスチェックが失敗した原因について原因と対処法を記載致します。
プライベートサブネットにEC2を配置してネットワークを構築する際にyumが通らない件についても別途解説しておりますので、以下記事もご参照ください。
参考 プライベートサブネットにEC2を配置するとyumが通らない件ITサービス指向エンジニアブログTable of Contents
ヘルスチェックが通らない問題
ALBからプライベートサブネットからプライベートサブネットのEC2をターゲットグループとして登録したが、ヘルスチェックステータスがunhealthyで通らず、Request timed out状態になっています。
結論
今回の結論は「ALBに紐づいたセキュリティグループからHTTP: 80番ポートを許可するルール」をEC2のセキュリティグループのインバウンドルールに設定してやる必要がありました。
現状の構成
ヘルスチェックが通らない状態の構成を以下に記載します。
VPC, サブネットの構成
VPC IPアドレス範囲: 10.0.0.0/21
サブネット:
項目 | 詳細① | 詳細② |
---|---|---|
AZ | ap-northeast-1a | ap-northeast-1c |
PublicSubnet | 10.0.0.0/24 | 10.0.1.0/24 |
PrivateSubnet | 10.0.2.0/24 | 10.0.3.0/24 |
EC2:
サブネット | EC2 |
---|---|
PrivateSubnet | WebServer-dev-1 |
PrivateSubnet | WebServer-dev-2 |
セキュリティグループ名: web-sg-dev(タグ: private-webserver-sg)
インバウンドルール:
インスタンス名 | ソース | ポート | タイプ | プロトコル |
---|---|---|---|---|
WebServer-dev-1 | 10.0.0.0/24 | 22 | SSH | TCP |
WebServer-dev-1 | 10.0.0.0/24 | 80 | HTTP | TCP |
WebServer-dev-2 | 10.0.0.0/24 | 22 | SSH | TCP |
WebServer-dev-2 | 10.0.0.0/24 | 80 | HTTP | TCP |
ALBの構成
名前: alb-dev
セキュリティグループ名: alb-dev-sg
AZ(ルーティング先): PrivateSubnet-dev-1, PrivateSubnet-dev-2
インバウンドルール:
ソース | ポート | タイプ | プロトコル |
---|---|---|---|
0.0.0.0/0 | 80 | HTTP | TCP |
アウトバウンドルール:
送信先 | ポート | タイプ | プロトコル |
---|---|---|---|
0.0.0.0/0 | 80 | HTTP | TCP |
ヘルスチェックが問題なく通るセキュリティグループ設定
一見EC2のインバウンドルールは問題ないように見えるが、EC2のセキュリティグループのインバウンドルールを10.0.0.0/24のHTTPプロトコルで許可ではなく、ALBに紐づいたセキュリティグループからのHTTPプロトコル80番を許可するルールをEC2のインバウンドルールに設定してやる必要があります。
修正後のEC2のセキュリティグループは以下になります。
インスタンス名 | ソース | ポート | タイプ | プロトコル |
---|---|---|---|---|
WebServer-dev-1 | 10.0.0.0/24 | 22 | SSH | TCP |
WebServer-dev-1 | alb-dev-sg | 80 | HTTP | TCP |
WebServer-dev-2 | 10.0.0.0/24 | 22 | SSH | TCP |
WebServer-dev-2 | alb-dev-sg | 80 | HTTP | TCP |
上記に設定することでヘルスチェックがunhealthy状態を解消することができます。
同じようにつまづいた方へのヒントになれば幸いです。