🪤

CLB → ALB への移行とその際にやらかした話

2024/03/24に公開

概要

CLB (Classic Load Balancer) から ALB (Application Load Balancer) に移行した際に、私が余計なことをしたせいでハマってしまったので、その備忘録です。
また、基本的に移行ウィザードでポチポチするだけで簡単に移行できますが、一部再設定が必要な設定もあったので合わせて記載しています。

前提

ロードバランサー →︎ EC2 間の設定は以下の通りです。

移行ウィザード

以下を参考に、移行ウィザードから ALB を新規作成します。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/migrate-classic-load-balancer.html

やらかしポイント (ロードバランサー リスナーとグループ)

はい、ここの設定でやらかしました。

今回移行した 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 でリッスンしていないので失敗します。

GitHubで編集を提案

Discussion