はじめに
プログラミングとかは学んだけどネットワーク関連全然わからん(´・ω・`)
ということで、AWSのVPCを使用してネットワークに詳しくなろう。
下図のようなウェブサーバとDBインスタンスを作成、セキュリティを考慮してウェブサーバーはパブリックサブネット、DBインスタンスはプライベートサブネットにホスティングする。
パブリックサブネット? プライベートサブネット?
サブネットとは、IPネットワークを論理的に細分化したもののこと (Wiki引用)。パブリックサブネットとは、ネットワークに接続可能なサブネットであり、プライベートサブネットは反対に接続できないサブネットのことをさす。
パブリックサブネットとプライベートサブネットを作成する
- EC2コンソール画面を開く
- サイドメニュー、Elastic IP からElastic IPアドレスを作成
- Amazon VPC コンソール を開く
- VPC ウィザードの起動をクリック
- パブリックとプライベート サブネットを持つVPCを選び、選択ボタンをクリック
- ステップ2の画面で以下のように設定する
- IPv4 CIDR ブロック: 10.0.0.0/16
- IPv6 CIDR ブロック: IPv6 CIDR ブロックなし
- VPC 名: tutorial-vpc
- パブリックサブネットの IPv4 CIDR: 10.0.0.0/24
- アベイラビリティーゾーン: us-west-2a
- パブリックサブネット名: Tutorial public
- プライベートサブネットの IPv4 CIDR 10.0.1.0/24
- アベイラビリティーゾーン: ap-northeast-1a
- プライベートサブネット名: tutorial-private-1
- Elastic IP割り当て: 作成したElastic IPのIDを使用
- サービスエンドポイント: 何もしなくてよい
- DNS ホスト名を有効化: Yes
- ハードウェアのテナンシー: Default
上記の設定をすることで、パブリックサブネットとプライベートサブネットを作成、パブリックサブネットを経由してプライベートサブネットがインターネットと接続するために必要なNATゲートウェイの作成を行ってくれるようになる。
追加サブネットの作成
前項でパブリックサブネット(10.0.0.0/16)とプライベートサブネット(10.0.1.0/24)を作成した。けれども、これだとDBが冗長化されていないので、障害発生時にサーバーが落ちてしまう。そこで、もうひとつ別のAZにプライベートサブネットを作成し、そこにもDBインスタンスを作成する。(そもそもRDSはAZをふたつ指定する必要がある)
- EC2コンソール画面を開く
- サイドメニュー、サブネットの項目からサブネットを作成を選択
- 以下の通りにサブネットを作成していく
- VPC ID: 先ほど作成したVPCを割り当てる
- サブネット名: tutorial-private-2
- アベイラビリティーゾーン: ap-northeast-1c
- IPv4 CIDR ブロック: 10.0.2.0/24
追加サブネットをルーティングする
追加したサブネットを最初に作成したプライベートサブネットと同じルートテーブルを使用するように設定していく。
- プライベートサブネット tutorial-private-1 を選択
- ルートテーブルタブからルートテーブルの値をメモ
- プライベートサブネット tutorial-private-1とtutorial-private-2のルートテーブルの設定が異なっていた場合、メモしたルートテーブルになるように変更を行う
パブリックウェブサーバーのVPCセキュリティグループを作成する
今の状態ではパブリックサブネットのインバウンドルールがない、つまりパブリックサブネットにアクセスできるトラフィックに制限がない状態なので、制限をかけていく。
- VPCコンソール画面、サイドメニューにあるセキュリティーグループを選択
- セキュリティグループを作成ボタンを選択
- セキュリティーグループ作成ページで以下を設定
- セキュリティグループ名: tutorial-securitygroup
- 説明: tutorial-securitygroup
- VPC: 先ほど作成したVPCを選択
- インバウンドルール1: インスタンス接続に使用するグローバルIPアドレスを決定
※タイプ:SSH, リソースタイプ:マイIPを設定
- インバウンドルール2: ウェブサーバーにHTTPへのアクセスを許可
※タイプ:HTTP, リソースタイプ:任意の場所
4.セキュリティグループの作成を選択
プライベートDBインスタンスのVPCセキュリティグループを作成する
DBインスタンスをプライベートのままにする場合は、プライベートアクセス用の二つ目のセキュリティグループを作成する必要があるので作成していく。
- VPCコンソール画面、サイドメニューにあるセキュリティーグループを選択
- セキュリティグループを作成ボタンを選択
- セキュリティーグループ作成ページで以下を設定
- セキュリティグループ名: tutorial-db-securitygroup
- 説明: tutorial-db-securitygroup
- VPC: 先ほど作成したVPCを選択
- インバウンドルール1: EC2インスタンスからポート3306への MySQLトラフィックを許可
※タイプ: MySQL/Aurora, ソース:セキュリティグループの ID
DBサブネットグループを作成する
いくつかのサブネットを作成したので、それをグループ化してRDSで指定できるようにする。
- RDSコンソール画面を開く
- サイドメニューからサブネットグループを選択
- DBサブネットグループを作成するを選択
- ページ内で以下のように設定する
- 名前: tutorial-db-subnet-group
- 説明: Tutorial DB Subnet Group
- VPC: 先ほど作成したVPCを割り当てる
- サブネットを追加で作成したサブネットを割り当てる