初めてのAWS VPC環境構成

#0 はじめに
・AWS、インフラ初心者向け
・環境構築の詳細な方法は説明せず、あくまで構成に留める
・以下のような構成にするのがゴール
![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/ae98ff5f-d0ac-5512-0a1b-b2629a915164.jpeg)
・次の7つの手順を踏んでいく
①VPCの作成
②AZの決定
③サブネットの作成
④インターネットゲートウェイの作成
⑤EC2、RDSの作成
⑥ELBの作成
⑦NATの作成
⑧踏み台サーバーの作成
⑨ルートテーブルの作成
⑩セキュリティグループの作成

#1 VPCの作成
VPC (Virtual Private Cloud)は、仮想ネットワークのこと。VPCを作成する際には、アドレス範囲を指定する必要があります。そのアドレス空間の中で、AWSの持つサーバーを起動したりすることができる。今回は10.0.0.0/16をアドレス範囲とします。
図で表すとこんな感じ。リージョンは東京を選択するのを忘れないようにしましょう。
![2 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/db5f09f7-9ed3-63fc-8a42-fc0de8d6dd1e.png)



#2 AZの決定
AZ(Availabilty Zone)とは、リージョンをさらに細分化した物理的な区分です。AZ間を跨いだ障害は起こらないように設計されているらしく、AZを複数用意しておけば、冗長構成を実現することができます。ちなみに東京リージョンには3つのAZがありますが、今回は2つ使うことにします。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/6f7fffb6-cb69-4ca4-612a-edd79b74c0d5.png)

#3 サブネットの作成
サブネットとは、VPCをさらに小さく分割したアドレス空間です。パブリックサブネットとプライベートサブネットの2種類があります。パブリックサブネットはAWS外部から通信できますが、プライベートサブネットはAWS内部でしか通信できません。なので、プライベートサブネットにDBサーバなどの重要なリソースを配置しておくといいみたいです。今回は2つのAZそれぞれに1つづつパブリックサブネットとプライベートサブネットを作成し、それぞれにアドレスを割り振っております。(右側のAZとサブネット2つは使用しませんが、ELB(後述)の利用にあたって必要となるため、作成しておきます)
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/c90937b7-8f14-4499-44f5-f7b41c42baa3.png)

#4 インターネットゲートウェイの作成
インターネットゲートウェイはその名の通り、インターネットとVPC間で通信を行うための窓です。![4 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/df9b28be-7345-d5ac-bef0-e48ae1a43550.png)

#5 EC2、RDSの作成
APサーバーにはEC2を使います。EC2はいわゆる仮想サーバで、ここ作ったアプリケーションを載せることになります。DBサーバとしては、RDSを作成します。複数のDBの種類を選択できますが、自分はMySQLを使います。APサーバDBサーバーも外部からのアクセスは避けたいので、プライベートサブネットに作成します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/298ba4a3-bb45-62b2-4494-ba7ee82abaae.png)

#6 ELBの作成
ELB（Elastic Load Balancing）は負荷分散をしてくれるロードバランサーです。これを置いておくと、トラフィックをいい感じに複数のサーバーに分散してくれます。ただし、今回はAPサーバーが一つなので、少し違う使い方をします。
現状、APサーバはプライベートサブネットにあるため、インターネットからアクセスすることができません。そのため、今回はELBをパブリックサブネットに置いて、インターネットからのトラフィックをAPサーバーに流せるようにします。![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/b6625dfd-c233-679f-2208-ce6adf509c40.png)

#7 NATの作成
6の状態では、インターネットからサーバーへトラフィックを流せても、それを外に出すことができません。
NATはインターネットからの接続を遮断しつつも、自身はインターネットに接続を出来るようにすることができます。今回はNATゲートウェイをパブリックサブネットに置いて、VPC内部からインターネットへ接続できるようにします。![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/19235271-b7f0-068b-6de4-ea867f101807.png)

#8 踏み台サーバーの作成
ローカルからAPサーバーに接続する際のセキュリティ対策のために、踏み台サーバーをEC2で用意しておきます。普段はこのサーバーを経由してAPサーバーにSSH接続し、緊急事態が発生した際は踏み台サーバーを落とすことで、よりセキュアな構成となります![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/84002bde-2496-50f9-5219-fae881157c0f.png)
。

#9 ルートテーブルの作成
ルートテーブルは、サブネット内にあるインスタンス等が通信するアドレス範囲を制御します。サブネットそれぞれに対して作成することがポイントです。今回は、プライベートサブネットのルートテーブルに対して、ローカルまたはインターネットのどちらかと通信できるようにアドレス範囲を設定します。また、パブリックサブネットのルートテーブルにはNATまたはローカルと通信できるようにアドレス範囲を設定します。![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/2212bd86-65a4-57f3-99b7-5389723e4841.png)

#10 セキュリティグループの作成
最後に、セキュリティグループを作ります。セキュリティグループでは、通信のタイプ(SSH、HTTPなど)やポートを設定することができます。この設定で指定した通信以外は、全て遮断されるようになるため、セキュアな構成を作るために必要となります。今回は、ローカルの通信はSSHのみを許可するようにし、インターネットの通信はHTTP、HTTPSを許可するように設定します。また、DBサーバーはAPサーバーからの通信のみ許可するようにします。![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299990/c54105e2-3873-ca5b-e524-45269fd8cde2.png)

#11 さいごに
これで一通りの構成は終了です。
かなり乱暴に書いている自覚はあります。