この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
ALB のターゲットグループに登録されているインスタンスがすべて Unhealthy となりました。
しかし、ALB の FQDN へアクセスするとターゲットインスタンスに接続できます。
これは正しい挙動ですか?
どう対応すればいいの?
AWS ドキュメントに記載のある仕様通りの挙動となります。
ALB のターゲットグループに登録されているインスタンスがすべて Unhealthy となった場合、ALB のノードは Unhealthy となったターゲット間でリクエストをルーティングします。
そのため、ALB の FQDN へアクセスしてもターゲットインスタンスに接続できます。
しかしながら、想定しない予期せぬ挙動が発生する可能性があるため、基本的にはターゲットインスタンスのヘルスチェックは Healthy であることが望ましいです。
やってみた
EC2 に Apache をインストールし、以下の HTML を配置します。
index.html
This is test page.
前段に ALB を構築し、当該の EC2 をターゲットにします。
その後、ALB の FQDN へアクセスします。
$ curl test-alb-■■■■■■■■■■.ap-northeast-1.elb.amazonaws.com
This is test page.
ターゲットのヘルスチェック設定を存在しないオブジェクト unhealthy に変更し、ターゲットのステータスを Unhealthy にします。
再度、ALB の FQDN へアクセスします。
$ curl test-alb-■■■■■■■■■■.ap-northeast-1.elb.amazonaws.com
This is test page.
アクセスできました。
上記のことから、ターゲットがすべて Unhealthy であっても、リクエストはルーティングされることが分かります。
参考資料
ターゲットグループのヘルスチェック - Elastic Load Balancing
ターゲットグループに異常な登録済みターゲットのみが含まれている場合、ロードバランサーノードは異常なターゲット間でリクエストをルーティングします。
テクニカルサポートノートとは?
クラスメソッドのカルチャー(CLP) の「情報発信を通じて、全ての人々の創造活動に貢献し続ける」という考えから、クラスメソッド メンバーズをご利用のお客様よりいただいたお問い合わせより、他の AWS ユーザーにとっても 有益な情報を一般的な TIPS としてご紹介しています。