VPC上でELBを作成する場合は、VPCのSubnetとELBの関係(Availability Zone編)の記事で紹介した通り、
サブネットを設定する必要があり、そのサブネットは各AZで最大一個、複数指定することができます。
このELBに設定したサブネットは途中で変更することも可能です。

まず、ELBに下記のようなサブネット(10.0.0.0/24 Aゾーン)が指定されているとします。

上記のように選択されているサブネットを、下記のようなサブネット(10.0.2.0/24 Aゾーン)に変更してみますが、
エラーが出力され、変更できません。

エラーは下記のように出力されており、ELBに設定されているサブネットを変更するには、
少なくとも二つのAZがELBに設定されている必要があるようです。

In order to change the subnet attached to your load balancer, you need to have at least two availability zones registered with the load balancer

上記より、別ゾーンのサブネット(10.0.1.0/24 Bゾーン)を設定(追加)します。

そうすると、今度は問題なく設定することができました。

再度、最初に設定しようとしたサブネット(10.0.2.0/24 Aゾーン)に変更してみます。

こちらも問題なく変更できました。

最後に、一時的に付けた別ゾーンのサブネット(10.0.1.0/24 Bゾーン)を削除します。

以上で無事にサブネットの変更が完了します。

尚、サブネットを変更すると、ELBのヘルスチェックは下記のように徐々に、変更前のIPアドレス(10.0.0.86)から
変更後のIPアドレス(10.0.2.224)に変更されていきます。

10.0.0.86 - - [27/Sep/2012:17:18:04 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:08 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:11 +0900] "GET /phpinfo.php HTTP/1.1" 200 48239 "-" "ELBLatencyCheck-1.0"
10.0.0.86 - - [27/Sep/2012:17:18:11 +0900] "GET /phpinfo.php HTTP/1.1" 200 48233 "-" "ELBLatencyCheck-1.0"
10.0.0.86 - - [27/Sep/2012:17:18:14 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:20 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:26 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:32 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:38 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:44 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:50 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.2.224 - - [27/Sep/2012:17:18:54 +0900] "GET /phpinfo.php HTTP/1.1" 200 47680 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:18:56 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.2.224 - - [27/Sep/2012:17:18:59 +0900] "GET /phpinfo.php HTTP/1.1" 200 47680 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:19:01 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.2.224 - - [27/Sep/2012:17:19:05 +0900] "GET /phpinfo.php HTTP/1.1" 200 47680 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:19:07 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:19:09 +0900] "GET /phpinfo.php HTTP/1.1" 200 48239 "-" "ELBLatencyCheck-1.0"
10.0.2.224 - - [27/Sep/2012:17:19:11 +0900] "GET /phpinfo.php HTTP/1.1" 200 47680 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:19:12 +0900] "GET /phpinfo.php HTTP/1.1" 200 48233 "-" "ELBLatencyCheck-1.0"
10.0.0.86 - - [27/Sep/2012:17:19:13 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.2.224 - - [27/Sep/2012:17:19:17 +0900] "GET /phpinfo.php HTTP/1.1" 200 47680 "-" "ELB-HealthChecker/1.0"
10.0.0.86 - - [27/Sep/2012:17:19:19 +0900] "GET /phpinfo.php HTTP/1.1" 200 47673 "-" "ELB-HealthChecker/1.0"
10.0.2.224 - - [27/Sep/2012:17:19:23 +0900] "GET /phpinfo.php HTTP/1.1" 200 47680 "-" "ELB-HealthChecker/1.0"

ELBは奥が深いです

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら