CLB → ALB への移行とその際にやらかした話
概要
CLB (Classic Load Balancer) から ALB (Application Load Balancer) に移行した際に、私が余計なことをしたせいでハマってしまったので、その備忘録です。
また、基本的に移行ウィザードでポチポチするだけで簡単に移行できますが、一部再設定が必要な設定もあったので合わせて記載しています。
前提
ロードバランサー →︎ EC2 間の設定は以下の通りです。

移行ウィザード
以下を参考に、移行ウィザードから ALB を新規作成します。
やらかしポイント (ロードバランサー リスナーとグループ)
はい、ここの設定でやらかしました。
今回移行した CLB のターゲット先の EC2 では HTTP, HTTPS 両方を許可し、Apache で HTTPS を強制するように設定していました。
ここで、私は ここに Apache で許可するポートを設定するものだと勘違いしてしまい、以下のように作成・設定してしまいました。
- リスナー:
80ポート → ターゲットグループ:80ポート - リスナー:
443ポート → ターゲットグループ:443ポート
その結果、通信ができなくなる事態が発生してしまいました。
本来は ロードバランサー → EC2 間で通信する際のポートを指定してあげる必要があります。
AWS 内部での通信プロトコルはデフォルトだと HTTP になるため、80 ポートでやり取りします。
反対に、今回設定しようとした 443 ポートはデフォルトでは解放していないため、エラーが出たということになります。
つまり以下のように、リスナーは 80, 443 ポートの2つを設定しますが、ターゲットはどちらも 80 ポートを指定する必要があります。
- リスナー:
80ポート → ターゲットグループ:80ポート - リスナー:
443ポート → ターゲットグループ:80ポート
設定を修正したことで無事通信できるようになりました。
▼ リスナールール

▼ ターゲットグループ

移行されなかった設定
コネクションアイドルタイムアウト
CLB の時の値に関わらず、デフォルトの 60秒 に上書きされます。
そのため ロードバランサー > 該当ロードバランサー > 「属性」タブ > トラフィックの設定 から再度設定します。

スティッキーセッション
ALB 移行時にスティッキーセッションに関する以下2つのポリシーが削除されます。
- AWSConsole-AppCookieStickinessPolicy-{ ロードバランサー名 }-{ ID その1 }
- AWSConsole-AppCookieStickinessPolicy-{ ロードバランサー名 }-{ ID その2 }
これは CLB 固有のセキュリティポリシーのため、ALB にそのまま移行できないためです。
そのため ターゲットグループ > 該当ターゲットグループ > 「属性」タブ > ターゲット選択設定 から再度設定します。

ヘルスチェック
ターゲットグループ > 該当ターゲットグループ > 「ヘルスチェック」タブ から再度設定します。
繰り返しになりますが、ヘルスチェックの通信は AWS 内部から行われるため、内部の通信プロトコルがデフォルトのままであれば HTTP にしてください。
HTTPS にしてしまうと EC2 でリッスンしていないので失敗します。

Discussion