この記事ではEC2を利用してウェブサイトを公開する方法のフェーズ1として、VPCの作成から行っていきます。
EC2を利用してウェブサイトを公開する方法(モノローグ)
構成図(モノローグと同じものです)
作成するもの
VPC
AWS上に作成する、論理的に隔離された仮想ネットワーク環境です。
このVPCの中にSubnetを作成したり、NAT GatewayやEC2(ウェブサーバー)などのリソースを配置して、自分専用のインフラ環境を構築していきます。
VPCを作成する際は、10.0.0.0/16のようにCIDRを指定して、ネットワークのIPアドレス範囲を決定します。ここで指定した範囲のIPアドレスは、このVPCが占有して利用されます。
Subnet
VPCという大きなネットワーク空間を、用途ごとに分割した「グループ」のことです。
「インターネットに公開する領域」と「内部に隠す領域」を明確に分離することでセキュアな環境を構築します。
本構成では、以下の2種類のSubnetを作成します。
-
Public Subnet:
IGWへのルートを持ち、外部と直接通信可能なエリア。ALBや踏み台サーバーを配置します。 -
Private Subnet:
インターネットからの直接アクセスを遮断したエリア。EC2やRDSを配置し、セキュリティを高めます。
EC2などが外部と通信を行いたい場合(apacheなどのインストールやアップデート)NATなどを経由して通信を行います。
Internet Gateway (IGW)
論理的に隔離された仮想ネットワーク環境であるVPCが外部と通信を行うためのゲートのようなものです。
NAT Gateway
Private Subnetにあるリソースがインターネットと通信を行うための中継器です。
IGWとの大きな違いとして一方通行という特徴があります。
これにより、外部からの直接のアクセスを遮断しつつ、外部に対してアクセスが行えます。
Elastic IP (EIP)
インターネットからアクセス可能な固定のパブリックIPv4アドレスです。
通常、AWSのリソース(EC2など)を再起動するとパブリックIPアドレスは変わってしまうことがありますが、EIPを使用することでアドレスを固定できます。
Route Table
Subnetからの通信を「どこに流すか」を決めるルールの集合です。
SubnetにPrivateとPublicの二種類があると説明しましたが、そのSubnetがPrivateとPublicのどちらになるのかはここでのルート設定によって決まります。
本構成では、以下の3つのRoute Tableを作成します。
- Subnet - IGW
SubnetとIGW間のルートを設定します。
これによりSubnetは外部と直接通信できるためPublic Subnetになります。 - Subnet - NAT
SubnetとNAT間のルートを設定します。
これによりSubnetは外部と直接通信はできませんが、NATを経由して外部と通信できるPrivate Subnetになります。 - Subnet - local
Subnetとlocal間の通信を設定します。
これによりSubnetはこのVPCの外部と通信することができず、Private Subnetになります。
Security Group(SG)
インスタンス(EC2やRDSなど)単位で設定する仮想ファイアウォールです。
ネットワークの「サブネット」単位ではなく、サーバー1台1台に対して「どの通信を通し、どの通信を拒否するか」を制御します。
SGでは接続の許可対象をIPアドレスだけでなくSGを指定することができるので特定のSGが付与されているリソースといった様に指定ができます。
本構成では、以下の4種類のsgを作成します。
- ec2-bastion
踏み台サーバ用のsg
自分のIPアドレスからのアクセスを許可します。 - ec2-web
webサーバ用のsg
ec2-bastionのsgが付与されたリソースからの22ポートの通信を許可します。
ec2-elbのsgが付与されたリソースからの80ポートの通信を許可します。 - rds
ec2-webのsgが付与されたリソースからの3306ポートの通信を許可します。 - elb
全IPからの80,443ポートの通信を許可します。
構築作業
ルートテーブルIDとかは絶対に人に見せたらいけないものとかではなく、直接的にセキュリティリスクにはなりませんが、あまり見せたいものでもないので隠しています。
VPC作成
-
設定を入力
作成するリソースはVPCのみです。
(VPCなどを選択するとSubnetやRoute Tableなどまとめて作成してくれますが、マニュアルのほうが自由が利きますし、マニュアルで出来た方がいいので今回はVPCのみのほうを紹介していきます。)
後は、任意の名前とCIDRブロックを入力してください。画像と全く同じでも大丈夫です。

-
作成ボタンを押したら完成
Subnet作成
| サブネット名 | アベイラビリティーゾーン | IPv4 サブネット CIDR ブロック |
|---|---|---|
| web-test-public-a-1 | ap-northeast-1a | 10.10.1.0/24 |
| web-test-public-c-1 | ap-northeast-1c | 10.10.2.0/24 |
| web-test-private-a-1 | ap-northeast-1a | 10.10.11.0/24 |
| web-test-private-c-1 | ap-northeast-1c | 10.10.12.0/24 |
| web-test-private-a-2 | ap-northeast-1a | 10.10.13.0/24 |
| web-test-private-c-2 | ap-northeast-1c | 10.10.14.0/24 |
Internet Gateway (IGW)作成
- IGW作成
Subnet同様にインターネットゲートウェイからインターネットゲートウェイの作成

名前を入力するだけで作れます
- VPCにアタッチ
作成したIGWを選択してアクションからVPCにアタッチ

VPCを選択する。
NAT Gateway作成
Route Table作成
- VPC作成時点で自動で作られるrtbをSubnet - IGWのrtbにする。
VPCダッシュボードのルートテーブルから作成したVPCに紐づいたrtbを選択し、アクションからルートを編集

1-1. IGWへのルートを追加する。
ルートを追加して、送信先を0.0.0.0/0のすべて、ターゲットをインターネットゲートウェイにする。
作成したIGWを指定して、変更を保存。

1-2. サブネットを関連付ける
サブネットの関連付けを確認すると明示的なサブネットの関連付けが無いはずです。

サブネットの関連付けを編集から関連付けを行います。
今回はSubnet - IGWでPublic Subnetの為のrtbなので、web-test-public-c-1とweb-test-public-a-1を関連付けます。

- Subnet - NATのrtbを作成する
ルートテーブルを作成から名前とVPCを選択して作成。

2-1. ルートを編集する
ルートを追加して、送信先を0.0.0.0/0のすべて、ターゲットをNATゲートウェイにする。
作成したNATを指定して、変更を保存。

2-2. サブネットの関連付け
Subnet - NATでEC2のPrivate Subnetの為のrtbなので、web-test-private-c-1とweb-test-private-a-1を関連付けます。

- Subnet - localのrtbを作成する
ルートテーブルを作成から名前とVPCを選択して作成。

3-1. サブネットの関連付け
Subnet - localでRDSのPrivate Subnetの為のrtbなので、web-test-private-c-2とweb-test-private-a-2を関連付けます。
Security Group(SG)作成
-
elbのsgを作成する
VPCダッシュボードのセキュリティグループ>セキュリティグループを作成から作成

インバウンドルールに80,443ポートに対しての全IPのアクセスを許可

-
ec2-bastionのsgを作成する
インバウンドルールに22ポートに対してマイIP(自分の今AWSにアクセスしているPCのグローバルIPアドレス)からのアクセスを許可。
※もし複数IPからのアクセスを許可したかったり、自分のグローバルIPアドレスがよく変更される場合マネージドプレフィックスリストを作成して使用すると便利です。

-
ec2-webのsgを作成する
インバウンドルールに22ポートに対してsg(ec2-bastion)からのアクセスを許可
インバウンドルールに80ポートに対してsg(elb)からのアクセスを許可

まとめ
長くなりましたが、今回はEC2を利用してウェブサイトを公開するためのネットワーク環境を作成しました。
これで土台部分は完成です。
次回からはEC2やELBなどリソースの作成と設定を行っていきます。










