素人がvpc（仮想プライベートクラウド）でpublicとprivateのサブネットの環境を作るよ！

![pp_img_3_col_VPC_1_378x171.png](https://qiita-image-store.s3.amazonaws.com/0/37544/e84e104f-9e4c-bd9a-a75e-01bd70a61228.png)


・・・と、題名は書いてみたものの、２日間悩みました。一番の問題は、私自身、ネットワークがかなり弱く、言葉でやりたいことを表現すると。

* WEBとかDBとかにグローバルIPをもたせたくない
* グローバルIPはいらないんだけど、プライベートIPしかもっていないサーバからもインターネットには接続させたい
* EC2 再起動毎に、IP ADDRESSが変わるのが許せないので、固定IPにしたい

です。いまさらながら、VPCでれば、それが実現できると聞きまして、やって見た、作業証跡になります。他のサイトの例を参考にして試行錯誤はしていたのですが、皆様のレベルが高すぎて、あたりまえの部分があえて省略している多く、そのあたりまえの部分もわからない僕には、一からつくるときのパターンが知りたくて、あえて手順をおこしました。なので、若干というかかなり自分用のメモに近いと思います。セキュリティの観点から・・とか・・実装的には・・・とかかなり無視しておりますので、そのあたりのツッコミは無しでお願いします。

とりあえず！

この手順どおりやれば、１５分でVPCが実現できるよー！ってだけで、あとの細かい設定は、調整してみてくださいね。

# VPC の設定

## 設定手順
本当にゼロベースでVPCを作る手順になりますので、もうすでに設定が完了している箇所についてはいろいろ読み飛ばしてください。
また、EIPとか、VPCとか、NATとかの説明はこちらでは説明しません。だって自分もよくわかってないから・・そのあたりは勘弁してください。

### VPC Dashboard から「START VPC Wizard」を選択
![2015-02-04_114328.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/de7a2339-b234-1e88-8f6d-e4d331899070.jpeg)

### 「VPC with Public and Private Subnets」 を選択し、「Select」ボタンをクリック
![2015-02-04_114456.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/ba66685c-2cc5-66e8-c25f-b112ca37f816.jpeg)

### 下記の通り設定しました 
![2015-02-04_114640.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/b201ceec-c006-fc1f-48d9-f086662e8470.jpeg)

* 「VPC name」は任意でMyVPC
* AZは、1aに（10.0.0.0/24,10.0.1.0/24）
* 「Key pair」は、登録時に設定したもの

以上で、基本的な構成が完了します。楽ですね。

## 再び、VPC Dashboard　へ

じゃあ、どんなものが、どうできたかを確認してみたいと思います

### 「Your VPCs」
![2015-02-04_114834.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/2c702b43-322f-16a4-a6ac-397c87b6f3bf.jpeg)

### 「Subnets」
10.0.0.0/24 および 10.0.1.0/24 の2のSubnetができているのがわかるかと思います
#### Private
![2015-02-04_114916.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/333110e9-f07a-baed-d886-7cd6c46cc106.jpeg)
#### Public
![2015-02-04_114954.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/27be7aae-34e5-bdb8-0c6a-4bbaf57e8228.jpeg)

### 「Route Tables」
![2015-02-04_115047.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/e484a48f-985c-ab49-92ce-def316bb4c2f.jpeg)
![2015-02-04_115047.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/24902b2c-7755-3dd5-d50c-fdc671e32bc7.jpeg)

### 「Internet Gateways」
![2015-02-04_115218.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/bdeccb49-cd21-e68e-f906-bccb9bb2dc82.jpeg)

### 「Elastic IPs」
![2015-02-04_115332.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/d6487ad8-dd11-b1fc-6f2a-f7affd72adc5.jpeg)

### 「Create Security Group」ボタンをクリック
上記までは、ウィザードのデフォルト値ですが、ここだけ独自に作成しました、今回設定したのは、ウィザードで自動生成された、NATインスタンスに対するSGです
![2015-02-04_115415.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/6616ae0f-e39d-2ec0-4b82-f8ddd3dd2f9f.jpeg)
#### 下記通り設定しました
![2015-02-04_115514.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/78732b07-5b4a-5927-bf39-82f3d98698a3.jpeg)

### 生成されたSGの設定をします
端的に説明すると、入力リクエストは何を許可するか、出力は何を許可するかの設定ですね。EC2関係なければ、FIREWALL(IPTABLESの設定）だと思ってくれれば良いのではないかと思います
#### 「Inbound Rules」
![2015-02-04_115635.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/cc22e220-6cd0-62f4-a2a3-f07f9cb2df79.jpeg)
![2015-02-04_120252.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/dae5ed2e-c5a8-f65c-898c-4d15f7a4a96f.jpeg)

#### 「Outbound Rules」
![2015-02-04_120340.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/b0a7d311-1c3a-9b0a-5edf-638bbb145a71.jpeg)

## EC2 Dash board へ

### 「Instances」
見慣れないインスタンスができていると思います。これが、ウィザードで生成された、NATインスタンスです。
![2015-02-04_120709.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/9f421836-bb4f-52d0-bc91-0c0937258323.jpeg)

#### このままだと、なんのインスタンスだかわかんなくなりそうなので、Natというタグをつけました
![2015-02-04_120803.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/6a40b6e8-2fca-b064-6218-3fd3d5c6655d.jpeg)

### ちょっと確認
#### 送信元のパケットをチェックする？かな？
![2015-02-04_120939.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/10fab680-d698-1702-fab0-80167b483fc9.jpeg)

![2015-02-04_121037.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/e3f7b8b8-1351-68c2-a762-76ec9aabaf45.jpeg)
NATの場合は、「チェックしない」の設定になっていることを確認するみたいです。なので、Statusが「Disabled」になっていることを確認して、Cancelをクリックします

### セキュリティグループの変更
VPCの場合は、セキュリティグループを変更できます。逆にEC2（という表現で良いのか？）では、変更できないらしいです
![2015-02-04_121151.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/02a646ae-f364-4878-2e27-66edb5b6a52f.jpeg)
さきほど作成した、NATSGグループに変更します
![2015-02-04_121300.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/d75e0875-bbba-9327-4001-d2dfcdb14a49.jpeg)
NATSGの内容はこんな感じですね。
* PORT 22は、全部受ける
* http は、「Private Subnet」からのリクエストのみ受け付ける
* https も、「Private Subnet」からのリクエストのみ受け付ける
![2015-02-04_121358.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/e7832fad-ee49-cca3-474a-4cd9d1557fbe.jpeg)

以上で、すくなくとも、「vpc（仮想プライベートクラウド）でpublicとprivateのサブネットの環境を作る」というところまでは実現できました。たぶん・・・

# Private Subnet 環境に、EC2 インスタンスを作ってみよう！！
長々と書きますが、これから作成するインスタンスは、【グローバルIPを所有していないインスタンス】になります。職場でも、ご自宅でもインターネットの環境がある方ってPC自体にグローバルIPが設定されている人はいないですよね。これから実現したいことは、まさに、皆様のPC環境（と似たようなもので） ルータを介して、プライベートIPアドレスなのに外部のインターネットに接続できるようにする設定です。ご自宅のインターネット環境でいいますと、きっとルータといわれるものがありますよね。いままで作った環境がまさにそれで、外部から接続できなくするための設定です。

前置きはさておき、EC2インスタンスを作ってみます。これを見ている皆様はEC2に関しては何回も作っていると思うので、いろいろ端折ります。

## 10.0.1.0/24 サブネットにインスタンスを作成する

### VPC Dashboard
VPC Dashボードから、「Launch EC2 Instasnce」ボタンをクリックします
![2015-02-04_124328.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/b5fab312-4f3b-a1ed-5d29-463d45f4539b.jpeg)

### いろいろ説明すっとばします。

![2015-02-04_124400.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/476a7786-2199-af71-071c-e89c5e3cee46.jpeg)

![2015-02-04_124416.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/facae537-e7ad-042c-4a60-9ba2222c3ab8.jpeg)

### Step3. Configre Instance Details

![2015-02-04_124624.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/8d0dc6a9-fec3-a38e-d5c1-4b930198c63d.jpeg)
* Network : 作成したVPCインスタンスを選択
* Subnet : 10.0.1.0 (Private Subnets）　を選択 
* Network Interfaces : 固定IPを設定

### 以降もいろいろ説明すっとばします。

![2015-02-04_124641.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/162d4196-8a0b-0512-3e51-0a33bc22dd4c.jpeg)

![2015-02-04_124748.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/f9901a00-355e-a59e-7749-150d17237057.jpeg)


### SGの設定
Public SubnetからのhttpのリクエストをACCEPTするように設定します

#### Inbounds

![2015-02-04_125351.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/d97179ce-3178-359a-87bd-6f36ce62b53f.jpeg)

![2015-02-04_125456.jpg](https://qiita-image-store.s3.amazonaws.com/0/37544/4448de78-81d6-fb39-0105-d4a679463bd6.jpeg)


これですべて設定は終わりです！！

# 接続してみよう！！
接続してみよう！といっても、Private Subnetなので接続できるわけがない！ｗということで、じゃあ、どうやって接続するのか
という話しになりますが、NASにSSHしてから接続されたNATから再度接続する感じになります。ちょっとわかりづらいですかね・・

## NATにsshで接続した状態から・・・

```
Last login: Wed Feb  4 15:00:36 2015 from v157-7-64-118.z1d9.static.cnode.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@ip-10-0-0-132 ~]$ 
```

## NATを介してさらに、プライベートサブネットのインスタンスへ接続します

```
[ec2-user@ip-10-0-0-132 ~] ssh -i /usr/local/aws/Glueth_Private_Key.pem ec2-user@10.0.1.100
Last login: Thu Feb  5 01:22:27 2015 from ip-10-0-0-132.ap-northeast-1.compute.internal

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@ip-10-0-1-100 ~]$ 
```

## Private Subnetから、curl でインターネットに出れるか確認してみます。
いけましたね(^_^)

```
[ec2-user@ip-10-0-1-100 ~]$ curl https://qiita.com/                                                                                    
<!DOCTYPE html><html xmlns:og="http://ogp.me/ns#"><head><meta charset="UTF-8" /><title>Qiita - プログラマの技術情報共有サービス</title><meta content="width=device-width,height=device-height,initial-scale=1" name="viewport" /><meta content="Qiitaは、プログラマのための技術情報共有サービスです。 プログラミングに関するTips、ノウハウ、メモを簡単に記録 &amp;amp; 公開することができます。" name="description" /><meta content="summary" name="twitter:card" /><meta content="@Qiita" name="twitter:site" /><meta content="Qiita - プログラマの技術情報共有サービス" property="og:title" /><meta content="website" property="og:type" /><meta content="https://qiita.com/" property="og:url" /><meta content="https://cdn.qiita.com/assets/qiita-fb-982b84457c670df6145579238c40a453.png" property="og:image" /><meta content="Qiitaは、プログラマのための技術情報共有サービスです。 プログラミングに関するTips、ノウハウ、メモを簡単に記録 &amp;amp; 公開することができます。" property="og:description" /><meta conte
```