ELBからVPC内のインスタンスへアクセスさせる。
AWSのELBを使って、VPC内のWebサーバのインスタンスにアクセスさせてみます。今回の構成図は以下です。
注意事項
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です。
VPCを作成したら、NAT用のインスタンスが1台起動してきます。
NATインスタンスには、EIPが割り振られています。セキュリティグループはVPC用のdefaultのものが割り当てられていました。このセキュリティグループを編集して、SSHのアクセスを許可すれば、NATインスタンスにSSHでログインすることもできました。ユーザ名はec2-user。
次にそれぞれのSubnet内にWebサーバのインスタンスを立てます。インスタンスを初期起動するときに、どこで起動するかを選びます。VPCを選択して、サブネットを指定すれば、その環境で起動できます。
ここでは、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を作成します。
「create LB inside」という項目で、「EC2」ではなくVPCのIDを指定します。
ヘルスチェックの設定をします。ここは、デフォルトのままで。
ELBを作るサブネットを指定します。指定できるサブネットは一つだけです。
ELB用のセキュリティグループを指定します。VPC内でELBを作るときには、セキュリティグループを指定できるんですね。
ELBにぶら下げる(負荷分散先の)インスタンスを指定します。
createを選択すれば、ELBが数分で起動します。
ELBが起動したら、health checkが成功しているかどうか確認します。
health checkは、上記の設定だと、HTTP 80 番ポートへアクセスできて、かつ、index.htmlが存在していることが求められます。HTTP の GETリクエストで 200 OK がかえってくること。ちゃんとindex.htmlファイルが存在しない場合には、下記のようにOut of Serviceとなり、ELBからアクセスが割り振られません。
ちゃんと、index.htmlを作ってやることで、下記のようにIn Serviceになりました。
以上で、設定完了です。ELBのDNS nameにWebブラウザでアクセスすれば、負荷分散されることが確認できます!