【AWS VPC入門】2.EC2/Internet Gateway/Route Table

# 前回までの記事
[【AWS VPC入門】0.概要](https://qiita.com/_Yasuun_/items/ae6b1b7fa3397256ee90)
[【AWS VPC入門】1.VPC/Subnet](https://qiita.com/_Yasuun_/items/8677681a21ae7437757f)

# 今回のゴール
- 前回作成した`Private Subnet(10.0.193.0/26)`に`EC2インスタンス(Web)`を配置する。
- インターネットとの通信を可能するため`インターネットゲートウェイ`と`ルートテーブル`の設定を行う。
- `EC2インスタンス(Web)`にSSH接続しNginxをインストールする。

# Internet Gateway
VPC内部とインターネットとの間の通信を可能にするためのものです。
インターネットゲートウェイ経由することでサブネットに配置されたEC2インスタンスとインターネット間の接続を可能にします。
サブネットに対してではなくVPCに対して設置します。

# Route Table
VPCにはサブネット単位で仮想のルーターが存在します。(暗示的なルーター)
ルートテーブルは上記のルーターに対して「Destination(送信先)」と「Target(宛先)」を定義したテーブルです。




# EC2をPrivateサブネットに作成
実際にAWS上で作成していきます。
EC2のダッシュボードから「インスタンスの作成」を選択します。
<img width="1265" alt="スクリーンショット 2018-12-08 19.46.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/84293a3d-cef2-c6f1-a1ce-6664a7fd37f1.png">

AMI、インスタンスタイプ、ストレージ等はNginxが動作する環境であればどれでも良いです。
ここでは以下を選択しました。

| AMI | インスタンスタイプ | ストレージ |
|---|---|---|
| Amazon Linux 2  | t2.micro  | 20G |


インスタンスの詳細の設定では以下の設定を追加します。

<img width="1263" alt="スクリーンショット 2018-12-08 19.55.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/2c66f658-78ce-0e08-90a1-5383747ecaaf.png">


| ネットワーク | サブネット | 自動割り当てパブリック IP|
|---|---|---|
| Sample VPC  | SamplePrivateSubnet | 有効化 | 

タグに以下を設定

| キー | 値|
|---|---|
| Name  | SampleWeb | 

セキュリティグループを以下の内容で設定します。

<img width="1260" alt="スクリーンショット 2018-12-08 20.05.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/acc6f6c6-1545-6ff3-1052-a6c9d0727764.png">

後ほどSSH接続を行うためpemファイルのDLが必要です。(SampleVPCWeb.pem)

この状態ではEC2インスタンスはインターネットに接続できないため、インターネットゲートウェイの配置とルートテーブルに設定を行います。

# インターネットゲートウェイの作成

VPCにインターネットゲートウェイを配置します。

VPCのダッシュボードから 「インターネットゲートウェイ」 -> 「インターネットゲートウェイの作成」を選択します。

一度も作成したことないがない場合でも、デフォルトのVPCに適用されているインターネットゲートウェイが既に存在しています。

<img width="1266" alt="スクリーンショット 2018-12-09 18.49.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/ba692f30-166d-d3f8-74d7-310499871622.png">

名前は「SampleIG」にします。

<img width="1247" alt="スクリーンショット 2018-12-09 18.50.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/5c586991-7546-2d15-dc60-65ffdee4574d.png">

作成した「インターネットゲートウェイ」をVPCにアタッチします。

<img width="1260" alt="スクリーンショット 2018-12-09 18.50.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/e5f1be12-c886-4112-b9f8-cdff8188246c.png">


# ルートテーブルを作成
続いてサブネットに対してルートテーブルの作成と変更を行います。

VPCのダッシュボードから 「ルートテーブル」を選択します。
既にSampleVPCのデフォルトルートテーブルが以下の内容で設定されているため、
VPC内を宛先とした通信以外は破棄される設定になっています。

| Destination | Target |
|---|---|
| 10.0.0.0/16  | local  | 

「Create route table」 からルートテーブルを作成します。
<img width="1275" alt="スクリーンショット 2018-12-09 19.00.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/95fd2867-8537-8bbd-aab3-9e40e432487c.png">

以下の内容を設定します。

| Name tag | VPC |
|---|---|
| SamplePrivateRouteTable  | SampleVPCのID  | 

<img width="1264" alt="スクリーンショット 2018-12-09 19.19.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/a5514c39-9aef-1824-67db-798cf1093fe7.png">

上記で作成したルートテーブルの設定を変更します。
「Routes」のタブから「Edit」を選択します。
<img width="1277" alt="スクリーンショット 2018-12-09 19.20.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/2c10f755-72d6-c3d4-de4c-a9957c082da2.png">

デフォルトゲートウェイをインターネットゲートウェイにするため以下の内容を追加します。

| Destination | VPC |
|---|---|
| 0.0.0.0/0  | SampleIGのID  | 

<img width="1278" alt="スクリーンショット 2018-12-09 19.21.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/69b124a9-86dd-c30b-3990-28531d8f9320.png">
作成したルートテーブルを「SamplePrivateSubnet」に割り当てます。

VPCのダッシュボードから 「サブネット」 -> 「SamplePrivateSubnet」 -> 「ルートテーブルの変更」を選択します。
<img width="1276" alt="スクリーンショット 2018-12-09 19.22.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/e8898064-b0b4-587c-3c43-593702aed8aa.png">

ルートテーブルIDに「SamplePrivateRouteTable」を選択します。
<img width="1279" alt="スクリーンショット 2018-12-09 19.23.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/fa7a7dc3-71aa-bf89-b222-7ba7ed76604e.png">

以上でインターネットへの接続準備が完了しました。

# EC2にSSH接続

実際にEC2インスタンスがインターネットと繋がったことを確認するため、pemファイルを利用して実際にSSHによる接続ができることを確認します。

```
$ ssh -i "SampleVPCWeb.pem" ec2-user@SampleWebのIPアドレス
```

HTTPによるアクセスを行うために、Nginxのインストールと起動を行います。

```
$ amazon-linux-extras install nginx1.12 -y
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
```

`http://SampleWebのグローバルIPアドレス`にアクセスし、
`Welcome to nginx on Amazon Linux!`というNginxの画面が表示されていれば動作確認完了です。

# 次章
[【AWS VPC入門】3.ELB](https://qiita.com/_Yasuun_/items/454f78a64aadc5d10098)