はじめに
クラウドインテグレーション事業部の尾谷です。
今日は、AWS 環境構築支援で Elastic Load Balancing - Classic (以降 CLB) から Elastic Load Balancing - Application (以降 ALB) の切り替えを行う際にハマったお話を投稿致します。
概要
- CLB ⇒ ALB の切り替えを実施した。
- CLB 配下にはインスタンスが 1 台だけありバーチャルホストで複数のサーバーをホストさせた。
- CLB 配下の EC2 インスタンスは HTTP (80) と HTTPS (443) を混在させていた。
- ALB 移行ウィザードというツールで移行するとターゲットグループが一つになり、HTTP (80) の通信と HTTPS (443) 通信が混合した。
- mod_rewrite でリダイレクトした際に挙動がおかしくなりページが正しく表示されなくなった。
- ターゲットグループを二つに分けることで解消した。
1. 前提
Route 53 には CLB の DNS 名がエイリアスレコードとして設定されていました。
- example.com. ⇒ CLB の DNS 名
CLB のリスナーには、HTTPS (443) と HTTP (80) が登録されており、HTTPS は AWS Certificate Manager (以降 ACM) による証明書を設定していました。
CLB 配下のインスタンスは 1 台だけ登録しておりました。
そして、EC2 インスタンスには mod_rewrite *1の設定がされており、80 ポートに届いたリクエストを HTTPS (443) にリダイレクトさせていました。
RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
2. ロードバランサ―移行ウィザード
CLB から ALB の切り替えは、移行ウィザードを使いました。*2
aws.amazon.com
移行ウィザードを進めていき、上記ページの 手順5. のところで、ターゲットグループの登録をしました。
ここで気を付けていただきたいのですが、HTTP (80) と HTTPS (443) が一つのターゲットグループに登録されます。
意識せずにウィザードを進めると、今回のようなリダイレクトが設定されたサイトでは、不具合が発生します。
4. ラウンドロビン
以上より、移行ツールで新しく出来上がった ALB には、HTTP (80) と HTTPS (443) が混在したターゲットグループがアタッチされました。 こんなイメージです。
この ALB の DNS 名にアクセスすると、正しくページが表示されたり、真っ白になったり、Apache のウェルカム画面が表示されたりして、もうよく分からない状態になりました。
5. 別のターゲットグループを作成することで解消
そこで、HTTPS (443) 用のターゲットグループを新たに作成しました。
そして、ロードバランサ―のリスナータブから、ルールの表示/編集 をクリックして、
ルールの編集 (鉛筆アイコン) をクリック、
ルールに鉛筆アイコンが表示されるのでクリック、
削除 (バケツアイコン) をクリックしてルールを削除したら、新しく手動で作成したターゲットグループを登録しました。
上記の設定変更で、リダイレクトも正しく動作するようになりましたが、解決するまでにかなりの時間がかかりましたが、大変勉強になりました。
まとめ
以下にも記載されていますが、
ALB がアプリケーション層 (HTTP、HTTPS) で動作するのに対し、CLB はトランスポート層 から アプリケーション層 (TCP、SSL/TLS、HTTP、HTTPS) の間で動作します。
このように記載すると CLB の方が優れているようにも見えますが、ALB にはパスルーティングという便利な機能が使えます。
CLB と ALB は似て非なるものなので、理解するとトラブルシューティングができるかと思います。
aws.amazon.com
最後までお読み下さり、ありがとうございました。
*1:参考にしたサイト
https://httpd.apache.org/docs/current/mod/mod_rewrite.html
*2:CLB には、ALB や NLB にはない「移行」というタブがあり、
移行ウィザードを使うと、元の CLB は削除されず、新たに ALB が作成されますので切り戻しができます。
数回クリックするだけで、自動で ALB を作成してくれるので今回初めて利用しました。
移行ウィザードの確認画面で「変更」ボタンをクリックすると、新しく作成される ALB の名前を変更できます。
※ これは Elastic Load Balancing 全体に言えることですが、ここで変更しておかないと変更ができません。