elastic-load-balancing-toolsを使ってELBをALBに移行してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

先ほどApplication Load Balancer (ALB)が発表されましたが、既存のClassic Load Balancer(元々のELB:標準ロードバランサー)から移行するためのツールがあるので試してみました。

GitHub - aws/elastic-load-balancing-tools: Classic load balancer to Application load balancer copy utility

elastic-load-balancing-tools

elastic-load-balancing-toolsは既存の標準ロードバランサーを元にALBの設定を出力できるツールです。

標準ロードバランサとALBでは機能が異なるので、以下の様な制限があります。

  1. 標準ロードバランサーには、TCPまたはSSLのリスナーがある
  2. 標準ロードバランサーがEC2-Classic環境にある
  3. 標準ロードバランサーが単一サブネットに属している
  4. 標準ロードバランサーのヘルスチェックがTCPかSSLに設定されている
  5. 標準ロードバランサーがサポートしていないポリシー(現在は「ELBSecurityPolicy-2015-05」しかサポートしていない)を持っている(このユーティリティは現在、Stick Sessionをサポートしていないことに注意)
  6. 標準ロードバランサーは、50個以上のユニークなバックエンドポートを持っている
  7. 標準ロードバランサーは、10個以上のリスナーを持っている

elastic-load-balancing-toolsを使ってALBへ移行してみる

以下の様なClassic load balancerの環境があります。この環境をALBへ移行してみます。

classic-load-balancer

まずソースをダウンロードします。

$ 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が作成されています。

EC2_Management_Console

ターゲットグループも作成されていますが、インスタンスは登録されていません。

EC2_Management_Console

一度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_Management_Console

ターゲットグループを確認すると、今度はEC2インスタンスが登録されています。

EC2_Management_Console

ALBへアクセスしてみます。
問題なくアクセスできました。

classiclb-92474789_ap-northeast-1_elb_amazonaws_com_index_html

問題なくアクセスできる事を確認したら、旧ELBが登録されているDNSを作成したALBに登録し直します。

旧ELBへのリクエストが無くなったら、旧ELBを削除して移行完了となります。

さいごに

ALBはHTTP/2をサポートしているので、単純にELBから移行してくるだけでもパフォーマンスアップが期待できます。この様に簡単に設定を移行できるツールがあれば、すぐにHTTP/2対応ができるようになりますね。