ELBからVPC内のインスタンスへアクセスさせる。

AWSのELBを使って、VPC内のWebサーバのインスタンスにアクセスさせてみます。今回の構成図は以下です。

f:id:kenjifunasaki:20120816154052p:plain

注意事項

ELBをVPCサブネット内で正しくスケールアウトさせるには、フリーのIPアドレスを確保しておく必要があります。具体的には、そのサブネットが少なくとも /27 CIDR block のものであり、ELB用に20個のフリーのIPアドレスを保持する必要があります。

When you attach your load balancer to a subnet, you define the traffic that gets routed to your registered instances. The registered instances do not need to be in the same subnet that you attach to the load balancer. In order to ensure that your load balancer can scale properly, the subnet that you attach the load balancer to should be at least a /27 CIDR block and should have at least 20 free IP addresses in the subnet when you attach the load balancer.

 

構成方法

この構成をつくるには、事前にVPCを作成して、その中にサブネットを2つ作る必要があります。この構成は、AWS Management Consoleで、簡単に作れます。VPCを作るときに、「VPC with Public and Private Subnets」を選択すればOKです。

f:id:kenjifunasaki:20120816154330p:plain

VPCを作成したら、NAT用のインスタンスが1台起動してきます。

f:id:kenjifunasaki:20120816155737p:plain

NATインスタンスには、EIPが割り振られています。セキュリティグループはVPC用のdefaultのものが割り当てられていました。このセキュリティグループを編集して、SSHのアクセスを許可すれば、NATインスタンスSSHでログインすることもできました。ユーザ名はec2-user。

次にそれぞれのSubnet内にWebサーバのインスタンスを立てます。インスタンスを初期起動するときに、どこで起動するかを選びます。VPCを選択して、サブネットを指定すれば、その環境で起動できます。

f:id:kenjifunasaki:20120816160358p:plain

ここでは、10.0.0.0/24 がPublic、10.0.1.0/24がPrivateのSubnetです。VPC内でインスタンスを起動するときには、Microのタイプでは起動できないことも要注意。Public、Privateで一つずつインスタンスを起動します。PrivateのSubnet内のインスタンスは、インターネットに接続できないため、事前に必要なインストール等を行ったAMIを起動すると良いですね。Public内のインスタンスSSH ログインして、そこからNATを経由して、Private内のインスタンスSSHログインすることはできました。

次にELBを作成します。

f:id:kenjifunasaki:20120816161253p:plain

「create LB inside」という項目で、「EC2」ではなくVPCのIDを指定します。

f:id:kenjifunasaki:20120816162827p:plain

ヘルスチェックの設定をします。ここは、デフォルトのままで。

f:id:kenjifunasaki:20120816161906p:plain

ELBを作るサブネットを指定します。指定できるサブネットは一つだけです。

f:id:kenjifunasaki:20120816162213p:plain

ELB用のセキュリティグループを指定します。VPC内でELBを作るときには、セキュリティグループを指定できるんですね。

f:id:kenjifunasaki:20120816162429p:plain

ELBにぶら下げる(負荷分散先の)インスタンスを指定します。

f:id:kenjifunasaki:20120816162632p:plain

createを選択すれば、ELBが数分で起動します。

ELBが起動したら、health checkが成功しているかどうか確認します。

f:id:kenjifunasaki:20120816163356p:plain

health checkは、上記の設定だと、HTTP 80 番ポートへアクセスできて、かつ、index.htmlが存在していることが求められます。HTTP の GETリクエストで 200 OK がかえってくること。ちゃんとindex.htmlファイルが存在しない場合には、下記のようにOut of Serviceとなり、ELBからアクセスが割り振られません。

f:id:kenjifunasaki:20120816163615p:plain

ちゃんと、index.htmlを作ってやることで、下記のようにIn Serviceになりました。

f:id:kenjifunasaki:20120816163910p:plain

以上で、設定完了です。ELBのDNS nameにWebブラウザでアクセスすれば、負荷分散されることが確認できます!

f:id:kenjifunasaki:20120816164124p:plain