okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

VPC内のELBが使用しているローカルIPアドレスをEC2インスタンス起動時に指定してみる実験

こんにちは@oko_changです。
VPC内でELBを使用する場合、ELBは指定されたサブネット内のローカルIPアドレスを使用します。
なんとなく気になったので、ELBがローカルIPアドレスを使用した後にそのアドレスを指定してEC2インスタンスを起動した場合の動作を確認してみました。

環境

aws-cli 1.3.2

確認手順

VPCVPCサブネットは事前に作成しておきます。
まず最初に、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"

感想

VPC内のローカルIPアドレスを意識しない運用をしている場合は特に問題にならないと思いますが、ローカルIPアドレスに何かしら意味を持たせている場合は注意しておいた方が良いかもしれません。