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設置 
フロントエンドpublicELB, EC2(踏み台/NAT)
アプリケーションprivateEC2(アプリケーションサーバ)
データベースprivateRDS(DBサーバ)

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

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

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

VPCの作成

VPCは以下で設定します。

NameIPv4 CIDR bloackIPv6 CIDR bloackテナンシー
vpc-cf-elb10.0.0.0/16Noデフォルト


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

subnetの作成

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

NameVPCAvailability ZoneCIDR block
public-subnet-front1vpc-cf-elbap-northeast-1a10.0.0.0/24
public-subnet-front2vpc-cf-elbap-northeast-1c10.0.1.0/24
private-subnet-ap1vpc-cf-elbap-northeast-1a10.0.100.0/24
private-subnet-ap2vpc-cf-elbap-northeast-1c10.0.101.0/24
private-subnet-db1vpc-cf-elbap-northeast-1a10.0.200.0/24
private-subnet-db2vpc-cf-elbap-northeast-1c10.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

TypeProtocolPortSource
HTTP(80)TCP(6)800.0.0.0/0
HTTPS(443)TCP(6)4430.0.0.0/0

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

Inbound

TypeProtocolPortSource
SSH(22)TCP(6)22[作業場所IP]/32

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

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

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

DBサーバ用(sg-db)

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

TypeProtocolPortSource
MySQL (3306)TCP(6)3306ap server のセキュリティグループ

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

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

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

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

コメントを残す

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

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