« ヘアピンDXパターン〜AWSクラウド編 | メイン | 2015年2月・3月のAWS初心者向けWebinarのお知らせ »

ハイブリッド構成によるWebサーバのオフロード事例(第1部:基本構成)

オンプレミスでWebサービスを運用していると、突発的な高負荷時にすぐに追加のサーバを用意できない、想定される最大負荷に応じてサーバをあらかじめ用意しておくにはコストが掛かりすぎるなど、スケールに関する問題に直面します。そこで今回は全3回にわたって、オンプレミスとAWSをネットワーク接続し、オンプレミスのWebサーバをAWSにオ フロードすることで必要なときに必要な台数のWebサーバをAWS上で確保する事例をご紹介します。

構成

オンプレミスからAWS間のネットワーク接続は専用線サービス「AWS Direct Connect」を利用します。オンプレミス上にはWebサーバが常時2台稼働していますが、追加のWebサ ーバが必要になった場合はAWSのVPC上にインスタンスを起動し、ロードバランサに追加します。別途、動作確認用にWebクライアントをロードバランサの上位に設置しております 。

Ec2-offload-2

本事例では、オンプレミス上のロードバランサにA10ネットワークス様の仮想アプライアンス vThunder(ACOS version 2.7.1-P3, build 76)を利用しました。本ブログ記事の作成にあたり、A10ネットワークス様に技術的なご支援をいただきました。この場を借りて御礼申 し上げます。

A10ネッ トワークス vThunder

オンプレミス環境の準備

まずはオンプレミス上のロードバランサとWebサーバ2台から構成されるWebサービスの環境を構築します。

Onpremise1

こちらはロードバランサ vThunderの基本設定になります。

interface ethernet 1
 description "WAN interface"
 ip address 10.0.0.100 255.255.255.0
!
interface ethernet 2
 description "LAN interface"
 ip address 192.168.10.20 255.255.255.0
!
health monitor http_index interval 3 timeout 1
 method http url GET /index.html expect response-code 200
!
slb server websv01 192.168.10.101
   health-check http_index
   port 80  tcp
!
slb server websv02 192.168.10.102
   health-check http_index
   port 80  tcp
!
slb service-group websvgrp tcp
    member websv01:80
    member websv02:80
!
slb virtual-server webservice 10.0.0.101
   disable when-all-ports-down
   port 80  tcp
      service-group websvgrp

この状態で、"show slb virtual-server"コマンドなどでVIPがUPしている か確認し、かつWebクライアントからVIP10.0.0.101にアクセスできることを確認します。

$ curl -I http://10.0.0.101/
HTTP/1.1 200 OK
...

オンプレミス上でWebサービスを提供する準備ができました。

AWSのVPC設定

次に、AWS上でWebサーバを起動するために、図のようなネットワーク環境を準備しま す。今回はAWS CLIを利用しました。

Vpc

まずはVPCを作成します。

$ aws ec2 create-vpc --cidr-block 172.16.0.0/16

次に、Subnetを作成します。Subnetは2つのAvailability Zoneにそれぞれ1つづつ作成します。

$ aws ec2 create-subnet --vpc-id vpc-12345678 --availability-zone ap-northeast-1a --cidr-block 172.16.0.0/24
$ aws ec2 create-subnet --vpc-id vpc-12345678 --availability-zone ap-northeast-1c --cidr-block 172.16.1.0/24

Direct Connectを終端するために、VGW(Virtual Private Gateway)を作成し、VPCにアタッチします。

$ aws ec2 create-vpn-gateway --type ipsec.1
$ aws ec2 attach-vpn-gateway --vpn-gateway-id vgw-12345678 --vpc-id vpc-12345678

新規でルーティングテーブルを作成し、それぞれのSubnetにアソシエートします。オ ンプレミスと通信するため、192.168.10.0/24宛のネットワークをVGWへ向けるようにルーティングエントリを追加します。

$ aws ec2 create-route-table --vpc-id vpc-12345678
$ aws ec2 create-route --route-table-id rtb-12345678 --destination-cidr-block 192.168.10.0/24 --gateway-id vgw-12345678
$ aws ec2 associate-route-table --route-table-id rtb-12345678 --subnet-id subnet-12345678
$ aws ec2 associate-route-table --route-table-id rtb-12345678 --subnet-id subnet-abcdefgh

Direct Connectの設定

オンプレミスとAWSをネットワーク接続するために、Direct Connectを設定します。オンプレミスとVPCのルーティングにはBGP(Border Gateway Protocol)を利用します。

Directconnect

Direct Connectの利用手続きは完了しているものとし、Virtual Interfaceの作成から解説します。

VLAN番号、AS番号、IPアドレスなど、接続に必要なパラメータを指定し、Virtual Interfaceを作成します。前項で作成したVGWも同様に指定します。

$ aws directconnect create-private-virtual-interface \
--connection-id dx-xxxxxxx \
--new-private-virtual-interface virtualInterfaceName=vif,vlan=100,asn=65001,authKey=aws123,amazonAddress=169.254.0.1/30,customerAddress=169.254.0.2/30,virtualGatewayId=vgw-12345678

オンプレミス側のDirect Connectを終端するルータには、Cisco CSR1000Vを利用しま す。以下のようにインタフェース、ルーティング設定を行います。

!
interface GigabitEthernet1
 no ip address
 negotiation auto
!
interface GigabitEthernet1.100
 description "Direct Connect"
 encapsulation dot1Q 100
 ip address 169.254.100.2 255.255.255.252
!
interface GigabitEthernet2
 description "LAN"
 ip address 192.168.10.20 255.255.255.0
 negotiation auto
!
router bgp 65001
 bgp log-neighbor-changes
 network 192.168.10.0
 neighbor 169.254.100.1 remote-as 10124
 neighbor 169.254.100.1 password aws123

ロードバランサ vThunderに、VPCに対するルーティング設定を行います。VPCのCIDR(172.16.0.0/16)宛に、Cisco CSR1000Vをネクストホップとしてstatic routeを設定します 。

ip route 172.16.0.0 /16 192.168.10.10

今回利用したロードバランサvThuderはBGPも対応しているため、Direct Connectを直 接終端することも可能です。

EC2インスタンスの起動/登録

AWS上でEC2インスタンスを起動します。セキュリティグループはロードバランサから のHTTPトラフィックを許可します。また、Webサーバとして稼働するためにHTTPサーバの インストールやコンテンツの配置も行います。

$ aws ec2 create-security-group --group-name sg_websv --description "Security group for Web servers"
$ aws ec2 describe-security-groups --group-ids sg-12345678
$ aws ec2 authorize-security-group-ingress --group-id sg-12345678 --protocol tcp --port 80 --cidr 192.168.10.10/32
$ aws ec2 authorize-security-group-ingress --group-id sg-12345678 --protocol tcp --port 22 --cidr 192.168.10.0/24
$ aws ec2 run-instances --image-id ami-xxxxxxxx --count 1 --instance-type t1.micro --key-name keyname --security-group-ids sg-12345678 --subnet-id subnet-12345678

vThunderにec2インスタンスを登録します。

slb server ec2websv01 172.16.0.101
 health-check http_index
 port 80 tcp

確認用のサーバからvThunderのVIP宛にアクセスできるか確認してみます。オンプレミスで稼働しているWebサーバを一旦サービスから外しておくと、EC2インスタンスへのアクセスのみを確認することができます。

$ curl -I http://10.0.0.101/
HTTP/1.1 200 OK
...

AWS上のEC2インスタンスもWebサーバとしてロードバランサから利用できることが確認できました。

次回

次回の第2部では、突発的な負荷が発生した場合に備え、Auto Scalingを利用した「 自動スケールアウト」の方法をご紹介します。

さいごに

本検証はAWSが提供している「AWS専 用線アクセス体験ラボ」で行いました。オンプレミスとAWSの間の技術検証をご希望の方もぜひご利用ください。

ソリューションアーキテクト 吉田

コメント

Twitter, Facebook

このブログの最新情報はTwitterFacebookでもお知らせしています。お気軽にフォローください。

2018年4 月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30