VPCとEC2で仮想ネットワーク構築（２層アプリケーションの下準備）

# 1.概要
AWSのVPCとEC2を使って仮想ネットワークを構成していきます。
これは２層アプリケーションの環境を構築する下準備です。
# 2.ツール
RLogin:EC2にssh接続する用

# 3.インフラ構築図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/fab95ee7-bd9b-88d7-4213-de32c874f12c.png)

プライベートサブネットのEC2をRDSに変えれば２層アプリケーションのウェブアプリケーションの環境になります。今回はVPCに話を絞りたいのでEC2を使います。

## 各AWSの役割
| サービス名| 機能名 |説明  |
|--- |---|---|
|VPC|VPC |仮想的なネットワーク  |
|VPC|サブネット|VPC内のIPアドレスを分割できる。パブリックとプライベートで２個作成|
|VPC|インターネットゲートウェイ|VPCとインターネットを繋ぐ  | 
|VPC|ルートテーブル  |送付元と宛先のIPアドレスを指定することで送るパケットを制御することができる。|
|EC2|インスタンス  |３台構築（パブリック、プライベート、外部確認用） 主に使うコマンドはping OSはamazon Linux|
|EC2|セキュリティグループ  |ポートの制御をする。パブリックとプライベートで２個作成 |
# 4.サービスVPCの設定
　VPCを使うメリット
　１．サブネットを使うことができる。
　２．プライベートなIPアドレスを使えるようになるので、セキュリティを上げることができる。

### (1)VPCの作成
ipアドレスは「10.0.0.0/16」に設定
第三オクテットは変更できるようにしたいので、サブネットマスクは255.255.0.0にします。CIDR表記で16
![VPC作成画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/3e5f297a-329c-7156-fad3-654401626343.png)

### (2)サブネット作成 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/e8cec2a4-017d-4f52-6c43-cb166460d68d.png)

パブリックサブネットのipアドレスは「10.0.10.0/24」に設定します。
サブネットマスクは255.255.255.0にします。CIDR表記で24
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/bebecbb4-810e-e5ed-4f1d-c051e8906f61.png)

同様の手順でプライベートサブネットのipアドレスは「10.0.20.0/24」に設定します。

### (3)インターネットゲートウェイの作成
VPCをインターネットに接続する役割があります。
手順
VPCからインターネットゲートウェイ作成画面に移動する
![ゲートウェイ１.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/4a57bb8f-2a36-4879-f73d-143f2e5c2da5.png)

適当な名前を入力してインターネットゲートウェイを作成
作成後、アクション→アタッチを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/94f9b70a-7354-c1e8-a072-fef9adbefde7.png)


### (4)ルートテーブルの作成
先程作ったアタッチしたインターネットゲートウェイを設定します。
ルートは以下の用に設定しています。
|送信先  |ターゲット  |説明  |
|---|---|---|
|0.0.0.0 | igw(先程VPCにアタッチしたインターネットゲートウェイ) | インターネット(0.0.0.0)とVPCを繋げる |
|10.0.0.0/16  | local |VPC(10.0.0.0/16)とlocalを繋げる。localは関連付けされたサブネット　関連付けされたサブネットはパブリックサブネットになる働きがある|

サブネットの関連付けは以下のようになっております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/bafdd583-be73-d2fc-5ab6-2d57be12e609.png)



# 5.サービスEC2の設定
## (1)セキュリティーグループを作成
EC2セキュリティーグループを作ります。
public用とprivate用に２つ作ります。
インバウンドルール、アウトバウンドルールは後で作るので空で良いです。

## (2)EC2作成
### パブリックEC2
ssh接続するのでキーは生成。
パブリックIPの自動割り当ては有効化を選択。
セキュリティグループは前に作ったパブリック用を設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/39366fe8-313e-d1b5-aeda-04e1324e03a4.png)

### プライベートEC2 
ssh接続するのでキーは生成。
パブリックIPの自動割り当ては無効化選択。
セキュリティグループは前に作ったプライベート用を設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/7c175be8-df4c-2ae9-0fad-813c3d173951.png)




## (3)セキュリティーグループ設定
インバウンドルール、アウトバウンドルールの設定します。
使うプロトコルはSSH,ICMPです。
### パブリックEC2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/3f23684c-ece0-3130-3cc6-7058ecae41c3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/ea0498bc-4acd-f4c1-2e47-b2d422f11b7b.png)

### プライベートEC2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/8a5a6e6f-951d-823c-2e72-1aa1dcdedb07.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/a04308e7-b959-ffc0-afae-366b0c0d77c3.png)

# 6.接続確認
pingコマンドを使って、正しくネットワークが構築できたか確認。
表の値は適当です。
| 番号|名称  |グローバルIPアドレス  |プライベートIPアドレス  |
|--- |---|---|---|
|①|デフォルトのEC2  |35.78.65.240  | 172.31.11.31 |
|②|パブリックサブネットのEC2  |54.178.193.20  |10.0.10.222 |
|③|プライベートサブネットのEC2  |無し  |10.0.20.225  |
|④|qita.com  |qita.com  |わからん  |

コマンド
```
縦列＠ping 横列
```
| |①  |②  |③  |④|
|--- |---|---|---| --- |
|①|？  |○（グローバル）  | ☓（プライベート） |○（グローバル） |
|②|○（グローバル）  |？  |○（プライベート） | ○（グローバル）|
|③|☓  |○（プライベート）　　　　　☓（グローバル）  |？|☓|
|④|? |? |?  | ？|

図の意味
○：通る
☓：通らない
？：やってない

上図の結果からインフラ構成図通りのネットワークが構築されたと確認できます。

# 7.参考資料
privateのEC2の接続方法については、踏み台sshかセッションマネージャーで迷いました。
セッションマネージャーはVPCのエンドポイントの設定が難しそうだったので従来の踏み台sshを使いました。

https://dev.classmethod.jp/articles/session-manager-pattern/

踏み台sshで詰まった時のエラー対処法

https://qiita.com/shimajiri/items/5716068da4d3a042b97c


https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/route-table-options.html

Udemyの講座（セッション３）が勉強になりました。この講座で私はAWSのインフラ構築に挑戦できるようになりました。

https://www.udemy.com/share/101Yby3@kEG35HTeNZqIUK9OIhbgg_Qr9Z9T_6QoKNrGrTYsF3wbFSA87wFmYg4GOFBwGBs2-A==/