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