VPC内のELBが使用しているローカルIPアドレスをEC2インスタンス起動時に指定してみる実験
こんにちは@oko_changです。
VPC内でELBを使用する場合、ELBは指定されたサブネット内のローカルIPアドレスを使用します。
なんとなく気になったので、ELBがローカルIPアドレスを使用した後にそのアドレスを指定してEC2インスタンスを起動した場合の動作を確認してみました。
確認手順
※VPCとVPCサブネットは事前に作成しておきます。
まず最初に、VPC内でELBを作成します。
$ aws elb create-load-balancer \ --load-balancer-name okochang-elb \ --listeners Protocol=http,LoadBalancerPort=80,InstanceProtocol=http,InstancePort=80 \ --subnets subnet-28f4fd4a \ --security-groups sg-d1e3fcbd \ --region ap-northeast-1
ELBのヘルスチェックを設定します。
$ aws elb configure-health-check \ --load-balancer-name okochang-elb \ --health-check Target="HTTP:80/index.html",Interval=30,Timeout=15,UnhealthyThreshold=5,HealthyThreshold=5
負荷分散対象のEC2インスタンスを起動します。
$ aws ec2 run-instances \ --image-id ami-b5c0b1b4 \ --security-group-ids sg-b72d31db \ --instance-type t1.micro \ --subnet-id subnet-28f4fd4a \ --private-ip-address 10.0.10.10 \ --key-name okochang-key \ --associate-public-ip-addres
ELBに起動したEC2インスタンスを分散対象として設定します。
$ aws elb register-instances-with-load-balancer \ --load-balancer-name okochang-elb \ --instances i-3ebce539
負荷分散対象のEC2インスタンスにWebサーバをインストールし、ELB(10.0.10.17)からアクセスされていることを確認します。
# yum install httpd -y # vi /etc/httpd/conf/httpd.conf # echo "Hello World" > /var/www/html/index.html # httpd -t # chkconfig httpd on # service httpd start # tail -f /var/log/httpd/access_log 2014-03-21 23:31:46 JST 340 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:32:16 JST 348 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:32:46 JST 340 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:33:16 JST 338 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:33:46 JST 326 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:34:16 JST 352 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:34:46 JST 324 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:35:16 JST 338 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:35:46 JST 322 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0] 2014-03-21 23:36:16 JST 350 10.0.10.17 - [GET /index.html HTTP/1.1] 200 12 [-] [ELB-HealthChecker/1.0]
ELBが使用しているIPアドレスと同じIPを指定して起動します。
やはりIPアドレスが使用中になって起動出来ませんね。
$ aws ec2 run-instances \ --image-id ami-b5c0b1b4 \ --security-group-ids sg-b72d31db \ --instance-type t1.micro \ --subnet-id subnet-28f4fd4a \ --private-ip-address 10.0.10.17 \ --key-name okochang-key \ --associate-public-ip-addres A client error (InvalidIPAddress.InUse) occurred when calling the RunInstances operation: Address 10.0.10.17 is in use.
ちなみにELBが使用しているネットワークインターフェースの情報も以下のようにdescribe-network-intaerfacesで確認する事が出来ます。
$ aws ec2 describe-network-interfaces --filters Name=description,Values="ELB okochang-elb"