AWS VPCによるネットワーク構築とEC2によるサーバー構築

# はじめに
AWSでネットワークとサーバー構築を行います。VPCとEC2を使って作業を行います。
本記事を書く動機としては、RailsアプリケーションをAWSで公開することです。
ただし、この記事ではサーバー構築までなのでRailsアプリケーションに関わらず参考になると思います。
Railsアプリケーションを実際に公開されたい方はこの記事の後に以下の記事にお進み下さい。
[RailsアプリケーションのAWSによる公開｜unicorn + nginx](http://qiita.com/shizuma/items/d4ae7d4374aeb90df648)

また、この記事は最低限度の設定ですので予めご了承下さい。
至らない点はアドバイス等頂けますと幸いです。

まずはこちらからAWS マネジメントコンソールへ。(アカウントを持っていない方はまずアカウントを作成する必要があります。）
[AWS - Amazon Web Services](https://aws.amazon.com/jp/)

# VPC領域を作成する

1.AWSマネジメントコンソールで「VPC」を開く

ブラウザの左上の「箱型アイコン」をクリックすると以下のホーム画面に移動出来ます。
「VPC」を選択する。

![スクリーンショット_2015-09-21_12_21_18.png](https://qiita-image-store.s3.amazonaws.com/0/40796/69d23ee8-db34-2dfa-9613-c1229473e121.png)

2.リージョンの設定をする

下記のようにリージョンを「アジア・パシフィック(東京)」に変える。

![スクリーンショット_2015-09-21_12_24_09.png](https://qiita-image-store.s3.amazonaws.com/0/40796/f32c5d96-5ca8-7e9c-696b-5ce29c73ec4d.png)

3.VPC領域の作成
以下の左のメニューから「VPC」を選択する

![スクリーンショット_2015-09-21_12_24_09.png](https://qiita-image-store.s3.amazonaws.com/0/40796/667d2c9b-9060-3d7d-754e-f212b3ad1e6b.png)

次に、「VPCの作成」をクリックしてモーダルの中に設定を記述。
ここではネームタグにアプリケーション名の「TechRuche」、CIDRブロックに「10.0.0.0/16」を記述。てナンシーは「デフォルト」のままで。

![スクリーンショット_2015-09-21_12_35_24.png](https://qiita-image-store.s3.amazonaws.com/0/40796/fd108764-23b0-a89e-6b79-7f461109eb9b.png)

# VPCをサブネットに分割する
上記で「10.0.0.0/16」というCIDRブロックを持ったVPC領域を作成してプライベートなネットワーク空間を用意しました。このネットワーク空間は作成ユーザーが自由に使うことが出来ますが、実際には割り当てられたCIDRを分割して利用します。この分割したCIDRブロックのことを「サブネット」といいます。
分割する目的は

①物理的な隔離
-障害が起きた時に他のサブネットに影響が起きにくくなる。
②セキュリティ上の理由
-ネットワーク設定を別々に出来る。

があります。

## 実際に作成する
以下の画像を参考にしながら、、

まず、左のメニューから「サブネット」を選択し、「サブネットを作成」をクリックすることでモーダルを出します。

モーダルではネームタグに「PublicTechRuche」(ここはご自由に）、VPCは先ほど作成したものを選択(名前をつけてあるのでわかるはず）、アベイラビリティーゾーンはそのままで、CIDRブロックは「10.0.1.0/24」と記述。

そして、「作成」を押す。

![スクリーンショット_2015-09-21_14_19_44.png](https://qiita-image-store.s3.amazonaws.com/0/40796/3bdbf0d4-59c1-dd08-9540-7b29c507bce5.png)

# パブリックサブネットをネットワークに接続する

## インターネットゲートウェイの作成
VPCのサブネットをインターネットに接続するためには「インターネットゲートウェイ(Internet Gateway)」を利用します。

左のメニューから「インターネットゲートウェイ」を選択し、「インターネットゲートウェイを作成」をクリックすると、作成もモーダルが出現します。

ネームタグに「GatewayTechRuche」(ここはご自由に)を記述して、「作成」をクリック。

![スクリーンショット_2015-09-21_14_37_42.png](https://qiita-image-store.s3.amazonaws.com/0/40796/8e0853fa-07bb-6477-7a19-9dffe31feb42.png)

## VPC領域に結びつける
次に、今作成したインターネットゲートウェイをVPC領域と結びつけます。
以下の画像のように、
①作成したインターネットゲートウェイにチェックを入れる
②「VPCにアタッチ」をクリック
③最初に作成したVPCを選択して、「アタッチ」をクリック

![スクリーンショット_2015-09-21_14_44_15.png](https://qiita-image-store.s3.amazonaws.com/0/40796/04d02497-40f0-b372-a9e5-7cf5a721a17d.png)

## ルートテーブルを設定する

### デフォルトのルートテーブルを確認する
サブネットやインターネットゲートウェイの間にルーターの役割を果たすソフトウェアが動いていてその設定になります。
VPC領域を作成した際にデフォルトでルートテーブルが作成されるのでまずはそちらを確認しましょう。

まず、左のメニューから「ルートテーブル」を選択する。その後、先ほど作成したVPCに該当する項目にチェックを入れる。

そして、画面下部のタブから「ルート」を選択する。
そうして、「送信先」、「ターゲット」を確認します。
デフォルトでは「送信先:10.0.0.0/16」、「ターゲット:local」となっています。
これではインターネットに接続出来ないので、インターネットと接続するための別のルートテーブルを準備します。

![スクリーンショット_2015-09-21_17_41_22.png](https://qiita-image-store.s3.amazonaws.com/0/40796/f6728ca3-eef2-f514-dbb0-25d8893ef5ef.png)

### 新しくルートテーブルを作成する

それでは、新しくルートテーブルを作成していきたいと思います。
まず、「ルートテーブルの作成」をクリック。ネームタグを「TechRucheRootTable」（ここはお好きに)、VPCを先ほど作成したものを選択。これで「作成」ボタンをクリック。

![スクリーンショット_2015-09-21_17_51_40.png](https://qiita-image-store.s3.amazonaws.com/0/40796/bc647a02-2267-5376-4d1e-def56d6ac1f8.png)

作成したら、作成したルートテーブルの項目にチェックを入れます。その後、画面下部の「ルート」タブをクリックします。編集ボタンがあるのでそちらをクリックします。

![スクリーンショット_2015-09-21_17_52_24.png](https://qiita-image-store.s3.amazonaws.com/0/40796/2f5bf612-31a9-bc41-fe4d-6fa12ac50ec2.png)

すると、「別のルートの追加」という項目が出てくるのでそちらをクリックします。

![スクリーンショット_2015-09-21_17_52_52.png](https://qiita-image-store.s3.amazonaws.com/0/40796/bce76ff9-0313-e92b-ba93-2154d5c701f4.png)

新しいルートが追加出来るので、「送信先:0.0.0.0/0」にして、ターゲットはターゲットの項目をクリックすると予測で該当項目が出てくるのでそちらを選択します。それで「保存」ボタンをクリックします。

![スクリーンショット_2015-09-21_17_53_13.png](https://qiita-image-store.s3.amazonaws.com/0/40796/09150ad4-83ea-24f4-e0a7-9373c96e751c.png)

すると、以下のようにルートが追加されたことが分かります。

![スクリーンショット_2015-09-21_17_53_49.png](https://qiita-image-store.s3.amazonaws.com/0/40796/4a0dba0b-316e-93d4-207c-3bb1b86806bf.png)

### サブネットの関連付け
次に、「サブネットの関連付け」をします。以下のタブをクリックします。

![スクリーンショット_2015-09-21_19_27_08.png](https://qiita-image-store.s3.amazonaws.com/0/40796/b942367c-66a8-f3bb-844a-fa4f86f0441d.png)

サブネットの関連付けのチェックを行い、「保存」をクリックします。

![スクリーンショット_2015-09-21_19_27_32.png](https://qiita-image-store.s3.amazonaws.com/0/40796/a9fb8407-69b2-59ba-0120-81dde3dc50ac.png)

すると、以下のようにサブネットの関連付けが出来たことが分かります。

![スクリーンショット_2015-09-21_19_27_51.png](https://qiita-image-store.s3.amazonaws.com/0/40796/c902885e-4a2f-fe58-070d-911c32261279.png)


これで、VPC領域の作成は終わります。次からEC2でサーバーを構築します。

#EC2でインスタンスを生成する

##EC2にアクセスする
左上のボックスアイコンをクリックしてホーム画面に移動し、「EC2」にアクセスします。

![スクリーンショット_2015-09-21_18_16_34.png](https://qiita-image-store.s3.amazonaws.com/0/40796/fc45f527-128f-d31f-e218-6fdc77d1a043.png)

##インスタンスを作成し始める

左のメニューから「インスタンス」をクリックして、その後「インスタンスの作成」をクリックする。

![スクリーンショット_2015-09-21_18_17_15.png](https://qiita-image-store.s3.amazonaws.com/0/40796/148e4bd1-9f9a-ae58-bffc-df049a82c393.png)

##AMIの選択
AMI(Amazon Machine Image)を選択します。AMIはOSがインストールされて初期アカウントの設定まで済んだものです。ここでは「Amazon Linax AMI」を使用します。

![スクリーンショット_2015-09-21_18_18_03.png](https://qiita-image-store.s3.amazonaws.com/0/40796/0537fefa-9b10-8291-2a47-84288da64434.png)

##インスタンスタイプの選択

インスタンスタイプとは、仮想マシンのスペックのことです。ここでは無料利用対象を選びます。

![スクリーンショット_2015-09-21_18_18_26.png](https://qiita-image-store.s3.amazonaws.com/0/40796/fc89d31c-74bd-e932-650d-a1b7e5c2a3a2.png)

##インスタンスの詳細設定
①「ネットワーク」に先ほど作成したvpcを選択する。
②「サブネット」も先ほど作成したものを選択する。（ネットワークを選択すると勝手に選択してくれますので、確認をする）
③「自動割当パブリックIP」を「有効化」する。
④「ネットワークインターフェース」の「プライマリIP」を「10.0.1.10」とする。

![スクリーンショット_2015-09-21_18_20_11.png](https://qiita-image-store.s3.amazonaws.com/0/40796/cdc0c5f7-ce54-069b-455d-e5561bb90b89.png)

## ストレージの追加

特に変更する部分はないので、そのまま次の手順に進みましょう。

![スクリーンショット_2015-09-21_18_21_18.png](https://qiita-image-store.s3.amazonaws.com/0/40796/76e6049b-eb90-d964-2a38-cd710c49bda3.png)

## インスタンスのタグ付け
値を「TechRucheWebServer」（お好きな値でOK）に変更する。

![スクリーンショット_2015-09-21_18_22_35.png](https://qiita-image-store.s3.amazonaws.com/0/40796/93576206-f301-a2cb-928e-33c7209c320e.png)

## セキュリティグループの設定

セキュリティグループ名を「Web-TECHRUCHE」(お好きな名前)に変更。
その後、下記画像のように「HTTP」タイプを追加。

![スクリーンショット_2015-09-21_18_25_12.png](https://qiita-image-store.s3.amazonaws.com/0/40796/acb46fe7-4040-784f-de7d-e930921c6575.png)

## インスタンス作成の確認

確認画面なので、確認出来たら「作成」ボタンをクリック。

![スクリーンショット_2015-09-21_18_25_40.png](https://qiita-image-store.s3.amazonaws.com/0/40796/ad95b2fe-ec87-6b79-ffe2-4acd975cd43d.png)

## キーペアの作成
①「新しいキーペアの作成」を選択し、「キーペア名」に「tech-ruche」（お好きな名前)を記入。その後。「キーペアのダウンロード」をクリック。
②ダウンロード完了後、「インスタンスの作成」ボタンをクリック。

![スクリーンショット_2015-09-21_18_26_06.png](https://qiita-image-store.s3.amazonaws.com/0/40796/831a812c-4927-a1f1-7eb6-9b28c372fa0e.png)

## 作成ステータス画面

これで、インスタンスの作業はひとまず完了です。「インスタンスの表示」をクリックします。

![スクリーンショット_2015-09-21_18_26_35.png](https://qiita-image-store.s3.amazonaws.com/0/40796/586db858-eb1a-f3d3-c3de-28c906a5fbd1.png)


## インスタンスの作成待ち

インスタンスの「状態」、「ステータス」が以下の画像のようになるまで待ちます。1~2分待てば出来ました。

![スクリーンショット_2015-09-21_20_40_55.png](https://qiita-image-store.s3.amazonaws.com/0/40796/ce30ad65-7404-5dbb-ea9e-caa629dc92a3.png)

# ec2-userでサーバーにアクセスする

ここまで出来れば実際に接続が出来ます。```~/Downloads/tech-ruche.pem```のようなファイルがダウンロードされます。これを使用してサーバーにアクセスします。(ファイル名は作成時の名前によって異なるので適宜変更）

```console:local
[~]$ mv Downloads/tech-ruche.pem .ssh
[~]$ cd .ssh
[.ssh]$ chmod 600 tech-ruche.pem
[.ssh]$ ssh -i tech-ruche.pem ec2-user@52.69.149.223
```

```
The authenticity of host '52.69.149.223 (52.69.149.223)' can't be established.
RSA key fingerprint is 43:bd:7f:34:55:88:ec:45:6e:5b:34:d6:63:63:63:65.
Are you sure you want to continue connecting (yes/no)? yes #ここでyesとする
Warning: Permanently added '52.69.149.223' (RSA) to the list of known hosts.

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

https://aws.amazon.com/amazon-linux-ami/2015.03-release-notes/
```

これで完了です！

Railsアプリケーションを公開されたい方は引き続き下記記事にお進み下さい。
[RailsアプリケーションのAWSによる公開｜unicorn + nginx](http://qiita.com/shizuma/items/d4ae7d4374aeb90df648)

# 参考
***書籍***
[Amazon Web Services 基礎からのネットワーク&サーバー構築](
http://www.amazon.co.jp/Amazon-Web-Services-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89/dp/4822262960)

本記事は手順にフォーカスして説明したため、詳しい説明は出来ていない箇所があります。上記、書籍は詳しく説明もありますので、興味がある方はこちらを読まれますとさらに理解が深まると思います。

***動画***
[AWS講座 - VPC/EC2インスタンスの作成から接続まで](https://www.youtube.com/watch?v=TDaLNHOL-h4&feature=youtu.be)