CloudFront+ELB+EC2+RDSのスケーラブルなシステム構成構築 – 1.VPC構築編

弊社で提供するWebサービスのシステム構成は以下を基本として、条件により簡易化しております。
今回、以下のVPC、subnet 、セキュリティグループ、ELB、EC2、RDS、S3等の構築手順を記載したいと思います。

踏み台・NATサーバ設置のセキュア構成

上記構成では、メンテナンス等でアプリサーバへSSH接続する場合、外部から直接接続しないよう、踏み台サーバを経由して接続する構成にしています。
さらに、この踏み台サーバのインスタンスは、メンテナンスで使うときだけ立ち上げるようにし、通常時はインスタンスを落としておくことで、外部からの侵入のリスクを低減させており、セキュアなシステム構成といえます。

また、ELBをパブリックサブネットに置き、EC2をプライベートサブネットに置くことでEC2のアプリサーバにELB以外の外部からの直接アクセスを拒否し、ELBからのアクセスのみできるようにしています。
この場合、EC2から yum update 等での外部へのアウトバウンド通信が必要なときは、先の踏み台サーバをNATとして利用します。アウトバウンド通信が必要ない時は、インスタンスを落としておけば、セキュリティも向上しますし、インスタンス稼働のコストも節約することが可能です。

今回のシステム構成で作成するVPC内のサブネットは以下の3階層で作成します。

用途 network 設置 
フロントエンド public ELB, EC2(踏み台/NAT)
アプリケーション private EC2(アプリケーションサーバ)
データベース private RDS(DBサーバ)

VPC外のAWSサービスとして以下を利用しますが、設定手順の詳細は今回は割愛します。

  • S3(画像など静的コンテンツの保存)
  • CloudFront
  • SES
  • WAF
  • CloudWatch

今回の記事では、NAT設定の手前まで記載し、NAT設定は次の記事にて記載します。

VPCの作成

VPCは以下で設定します。

Name IPv4 CIDR bloack IPv6 CIDR bloack テナンシー
vpc-cf-elb 10.0.0.0/16 No デフォルト


VPCを作成したら、タグに「キー:Network 値:Public」とつけておきましょう。

subnetの作成

各サブネットの設定は以下になります。

Name VPC Availability Zone CIDR block
public-subnet-front1 vpc-cf-elb ap-northeast-1a 10.0.0.0/24
public-subnet-front2 vpc-cf-elb ap-northeast-1c 10.0.1.0/24
private-subnet-ap1 vpc-cf-elb ap-northeast-1a 10.0.100.0/24
private-subnet-ap2 vpc-cf-elb ap-northeast-1c 10.0.101.0/24
private-subnet-db1 vpc-cf-elb ap-northeast-1a 10.0.200.0/24
private-subnet-db2 vpc-cf-elb ap-northeast-1c 10.0.201.0/24

public-subnet-front1 の作成手順です。

サブネットを作成したら、タグに「キー:Network 値:Public」とつけておきましょう。
同様に他のサブネットも作成していきます。タグのNetworkはサブネットに応じて、Public/Private をつけます。

Internet Gateway の作成

VPC内のサーバがインターネットにアクセスするための出入口である Internet Gateway を作成します。

作成したInternet Gateway を VPC に紐付けます。「VPCにアタッチ」ボタンを押して下記の画面でVPCにアタッチします。

Route Table の作成

Route Table は、各サブネットに対しての設置される仮想ルータのルーティングテーブルです。

今回は、ルートテーブルを3階層(フロントエンドサブネット/アプリケーションサブネット/DBサーバサブネット)のサブネットにあわせて3つ作成します。

DBサーバ(プライベートサブネット)用 Route Table

サブネットを作成すると自動で生成され割当てられる Route Table をそのまま使います。
デフォルトのままですと、明示的に割当られているサブネットがないとのメッセージがでますので、一応、紐付けしておきます。また、名前も付けておきます。

フロントエンド(パブリックサブネット)用 Route Table

以下で、Route Table を新規作成します。

Destination に 0.0.0.0/0 が Internet Gateway に向くようにします。

この Route Table をパブリックサブネットに設定します。
パブリックサブネットの「ルートテーブル」タブをクリックして「編集」を押すと変更先のRoute Table を入力できるようになりますので、上記で作成した Route Table を選んで「保存」します。

もう1つのパブリックサブネットも同様に設定します。

アプリケーションサブネット用 Route Table

このRute Table はNAT用の設定も行ないますが、今はNATなしの設定で新規作成し、後ほど編集します。

作成した Route Table のサブネットの関連付けで、アプリケーションサブネットを関連つけます。

Security Group の作成

セキュリティグループを用途別に作成します。

ロードバランサー用(sg-public-web)

Inbound

Type Protocol Port Source
HTTP(80) TCP(6) 80 0.0.0.0/0
HTTPS(443) TCP(6) 443 0.0.0.0/0

踏み台・NATサーバ用(sg-ssh-nat)

Inbound

Type Protocol Port Source
SSH(22) TCP(6) 22 [作業場所IP]/32

アプリケーションサーバ用(sg-ap)

Inbound (VPC内の通信は全インスタンス間をOKにするというポリシーなら設定なしでいいです)

Type Protocol Port Source
HTTP(80) TCP(6) 80 ELB のセキュリティグループ
HTTPS(443) TCP(6) 443 ELB のセキュリティグループ
SSH(22) TCP(6) 22 踏み台のセキュリティグループ

DBサーバ用(sg-db)

Inbound (VPC内の通信は全インスタンス間をOKにするというポリシーなら設定なしでいいです)

Type Protocol Port Source
MySQL (3306) TCP(6) 3306 ap server のセキュリティグループ

DB サブネットグループの作成

RDSのコンソール画面にいき、「サブネットグループ」から「DBサブネットグループの作成」を行ないます。
DBサブネットグループ名「db-subnet-vpc-cf-elb」をつけ、VPCを選び、dbの2つのサブネットを登録します。

これでVPCの構築は完了です。

次は、以下のNAT構築編です。

コメントを残す

コメントは当サイト運営者の承認後に反映されます。
お名前はニックネームでも結構です。

Comments are allowed only in Japanese. / 日本語が含まれない投稿は無視されますのでご注意ください。