elastic-load-balancing-toolsを使ってELBをALBに移行してみた
ウィスキー、シガー、パイプをこよなく愛する大栗です。
先ほどApplication Load Balancer (ALB)が発表されましたが、既存のClassic Load Balancer(元々のELB:標準ロードバランサー)から移行するためのツールがあるので試してみました。
elastic-load-balancing-tools
elastic-load-balancing-toolsは既存の標準ロードバランサーを元にALBの設定を出力できるツールです。
標準ロードバランサとALBでは機能が異なるので、以下の様な制限があります。
- 標準ロードバランサーには、TCPまたはSSLのリスナーがある
- 標準ロードバランサーがEC2-Classic環境にある
- 標準ロードバランサーが単一サブネットに属している
- 標準ロードバランサーのヘルスチェックがTCPかSSLに設定されている
- 標準ロードバランサーがサポートしていないポリシー(現在は「ELBSecurityPolicy-2015-05」しかサポートしていない)を持っている(このユーティリティは現在、Stick Sessionをサポートしていないことに注意)
- 標準ロードバランサーは、50個以上のユニークなバックエンドポートを持っている
- 標準ロードバランサーは、10個以上のリスナーを持っている
elastic-load-balancing-toolsを使ってALBへ移行してみる
以下の様なClassic load balancerの環境があります。この環境をALBへ移行してみます。
まずソースをダウンロードします。
$ git clone https://github.com/aws/elastic-load-balancing-tools.git Cloning into 'elastic-load-balancing-tools'... remote: Counting objects: 18, done. remote: Total 18 (delta 0), reused 0 (delta 0), pack-reused 18 Unpacking objects: 100% (18/18), done. Checking connectivity... done. $ cd elastic-load-balancing-tools/ $ ls -l total 80 -rw-r--r-- 1 user group 11357 8 12 12:37 LICENSE -rw-r--r-- 1 user group 2495 8 12 12:37 README.md -rwxr-xr-x 1 user group 21474 8 12 12:37 copy_classic_load_balancer.py
boto3が必要なので、boto3をインストールしていない場合は以下のコマンドを実行してインストールしてください。
$ pip install boto3
Dry Runで実行して、ツールがサポートしているか確認します。
$ ./copy_classic_load_balancer.py --name ClassicLB --region ap-northeast-1 --dry-run Your load balancer configuration is supported by this migration utility
サポートしていない設定があると、以下のようになります。この場合はヘルスチェックがTCPかSSLになっているというエラーです。
$ ./copy_classic_load_balancer.py --name ClassicLB --region ap-northeast-1 --dry-run Error: The Classic load balancer uses TCP or SSL health checks. HTTP or HTTPS health checks are required for an Application load balancer.
実際に移行してみます。一度インスタンスを登録せずに移行してみます。
$ ./copy_classic_load_balancer.py --name ClassicLB --region ap-northeast-1 Your Application load balancer is ready! Application load balancer ARN: arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/ClassicLB/abce1234efgh5678 Target group ARNs: arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/ClassicLB-tg-80/1234abce5678efgh Considerations: 1. If your Classic load balancer is attached to an Auto Scaling group, attach the target groups to the Auto Scaling group. 2. All HTTPS listeners use the predefined security policy. 3. To use Amazon EC2 Container Service (Amazon ECS), register your containers as targets.
既存のELBと同じ名前でALBが作成されています。
ターゲットグループも作成されていますが、インスタンスは登録されていません。
一度ALBを削除して、今度は--register-targets
オプションを付けて実行します。このオプションはEC2インスタンスの登録も実施します。
$ ./copy_classic_load_balancer.py --name ClassicLB --region ap-northeast-1 --register-targets Your Application load balancer is ready! Application load balancer ARN: arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/ClassicLB/abce1234efgh5678 Target group ARNs: arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:targetgroup/ClassicLB-tg-80/1234abce5678efgh Considerations: 1. If your Classic load balancer is attached to an Auto Scaling group, attach the target groups to the Auto Scaling group. 2. All HTTPS listeners use the predefined security policy. 3. To use Amazon EC2 Container Service (Amazon ECS), register your containers as targets.
先ほどと同様に、ELBと同名のALBが作成されています。
ターゲットグループを確認すると、今度はEC2インスタンスが登録されています。
ALBへアクセスしてみます。
問題なくアクセスできました。
問題なくアクセスできる事を確認したら、旧ELBが登録されているDNSを作成したALBに登録し直します。
旧ELBへのリクエストが無くなったら、旧ELBを削除して移行完了となります。
さいごに
ALBはHTTP/2をサポートしているので、単純にELBから移行してくるだけでもパフォーマンスアップが期待できます。この様に簡単に設定を移行できるツールがあれば、すぐにHTTP/2対応ができるようになりますね。