Classic Load Balancer(以下CLB)からApplication Load Balancer(以下ALB)へ移行しようと思ったところ、EC2へのリクエストルーティングの設定で少し詰まったので投稿します。
設定したいこととしては下記の2点でした。
- HTTP(80番)接続されたら、EC2にも80番で接続する。
- HTTPS(443番)接続されたら、EC2には8080番で接続する。
なお、EC2内のApacheの設定で、HTTP(80番)接続されたらHTTPSへリダイレクト、
HTTPS(8080番)接続されたらサイトを表示、というように設定してあります。
詰まったところ
詰まった点は、ALBからEC2へのリクエスト時のリスナーをどこで設定するかわからなくなってしまったことでした。
CLBでは、ロードバランサーとEC2へのリクエストのプロトコルとポート番号を同一画面で設定できます。
が、ALBではロードバランサーへのリクエスト時のプロトコル・ポート番号に対してターゲットグループを設定するようになっていたため、別画面で設定する情報になっていました。
別画面だったので、どこでEC2へのルーティングを設定するのかすぐにわからず詰まってしまいました。
改めて考えれば、ALB → ターゲットグループ → EC2
という流れでリクエストされていくので、ターゲットグループ上で設定しないといけないと気づきました。
(ターゲットグループ作成時にリクエストルーティングの設定が出てきていたのですが、ついALB側と同じようにHTTP・80番
、HTTPS・443番
を設定してしまっていました。)
やったこと
ALBからEC2へのリクエスト時のリスナーの設定でやったことは下記の2つです。
- ターゲットグループを
HTTP
・HTTPS
用にそれぞれ作る - ターゲットグループ内のEC2にどのポートで接続するかを設定する
CLBで設定したリスナー1行ごとにターゲットグループが必要になるようなイメージですね。
この設定後、ターゲットグループ内のヘルスチェックが無事に通りました。
その他
ALBとAuto Scaling Group
今回の詰まった件とは直結しないのですが、今までCLBとAuto Scaling Group(以下ASG)を紐付けていたので、同じようにALBでもASGを紐付けようと思ってマネジメントコンソールを見たのですが、特に設定できる部分がありませんでした。(2016/10/31現在)
そのため、ALBはターゲットグループ(=EC2インスタンス単位)との紐付けしかできないのかと思っていました。
ですが、下記の記事のようにCLIで登録できましたので、追々マネジメントコンソール上でも扱えるようになるのでしょうか。
マネジメントコンソールでも確認や操作ができるようになるとさらに便利そうですね。
- Application Load Balancer(ALB)でAuto Scaling Groupを登録する(CLIのみ)
http://dev.classmethod.jp/cloud/aws/register-auto-scaling-group-to-alb/
(2016/10/31追記)
すみません、ASG側の画面で紐付けるターゲットグループを設定する箇所がありました。
ターゲットグループ側ではなく、ASG側からならマネジメントコンソールを使って紐付けられます。
移行ツール
- elastic-load-balancing-toolsを使ってELBをALBに移行してみた
http://dev.classmethod.jp/cloud/aws/migration-from-elb-to-alb/
上記の記事の通りにやってみました。
ELB名・VPC・Subnet・Security Groupを引き継いだALBが1コマンドで出来上がります。
既存のCLBからALBへ移行する際は本当に便利ですね。