初めてのAWSのEC2でwebサーバー構築→nginx導入（ネットワーク構築編）


Hello there, 新米です。


VPC作成→EC2でサーバー構築→nginx導入を1記事で書きたかったのですが、VPCの設定でだいぶ長くなってしまったので、続きは次回の記事にさせていただきます:bow:

こういった記事を書くことは初めてなので、まともなものになるか不明（不安）ですが、投下します。
既知な事が多いとは思いますが、お付き合いください。



# 概要

知識０での状態からAWS上にネットワークを構築する。


## A.ネットワークの構築
![images.png](https://qiita-image-store.s3.amazonaws.com/0/212851/37fdcdd3-47a2-1a73-041e-50e55b134e3d.png)

### VPCの作成
VPCとはAWSのアカウント上に複数作成することができるプライベートなネットワークの単位のこと。
家を建てるための土地全体のようなイメージ。

そのVPCの配下にAvailability Zone(以下「AZ」という)がありまたその配下にサブネットがある。AWS上でネットワークを構築するときは最低でもVPC、AZ、サブネットを各１つ作成する必要がある。

AZはVPC（土地の全体）の中の建物が建つエリア、サブネットは建造物を設置するための基礎というような捉え方をするとわかりやすかった。

…


ここでなぜ３つも名前の違うものが出てくるのかと、もっとシンプルに頼むよと、思っていたが、そこにはちゃんと意味があった。
AZはそれ同士が影響を受けないよう場所やネットワークが分離されていて、サブネットを複数作成してそれぞれが別のAZを使用することによって、１つのAZが何らかの原因でダウンしてしまったとしても、サービスを継続に問題が出ないよう設計することが可能になる。

**たとえ震度８の未曾有のクライシスに一方のAZが晒されたとしても、もう一方には影響がないということだ。**

「AWS always prepares for the risks:point_up:」

![VPC.png](https://qiita-image-store.s3.amazonaws.com/0/212851/223ba095-2e2b-81c3-bb8b-777ef80e07f9.png)



では作成してみる。

1.まずはホーム画面から[VPC]を選択。
2.画面右上からVPCの操作対象にするリージョンを設定する（今回は東京にした）。
※リージョンとは、その言葉のまま地域という意味。AWSにおいてはネットワーク空間の「拠点」のことをそう呼ぶ。
3.[VPCの作成]でVPC領域を作成する。
 名前タグ: VPCにつける名前（どんな名前でも良いが今回はtakahashi-vpcにした）
 IPv4 CIDR ブロック: IPアドレス範囲(ここでは172.30.0.0/16のプライベートIPアドレスとした)
 IPv6 CIDR ブロック: IPv6 CIDR ブロックなしに今回はチェック
 テナンシー:ハードウェアを占有(物理的に確保)するかどうか（今回はデフォルトで）

※IPv4やIPv6,CIDRなどの用語は以下から学ばせていただいた。
（IPv4:http://wa3.i-3-i.info/word11734.html
IPv6:http://wa3.i-3-i.info/word11735.html
CIDR:http://wa3.i-3-i.info/word11989.html）

以上をそれぞれ入力して、プライベートなネットワークが作成された。

![スクリーンショット 2017-12-06 15.00.22.png](https://qiita-image-store.s3.amazonaws.com/0/212851/9b1a131f-dbb6-1dd5-9776-e74116056755.png)


### サブネットの作成
CIDRブロックをさらに小さく分割したCIDRブロックを、サブネット(Subnet)と言い、今回のケースでは「172.30.0.0/16」で作成したCIDRブロックを「/24」の大きさで256分割した。

分割する理由としては主に２点
・物理的な隔離により片方のサブネットが障害を起こしても、もう片方に影響を出にくくするため。
・サブネットを分けることにより、別のネットワーク設定が可能なため、例えば人事部のネットワークだけを分離し、他の部署からはアクセスができないようにすることなどが実現できる。

今回は以下のように分割。

1.パブリックサブネット（172.30.1.0/24）
インターネットからアクセスすることを目的としたサブネット。この領域にWebサーバーを設置して、インターネットからアクセスできるようにする。
2.プライベートサブネット（172.30.2.0/24）　（今回は作成はしたが諸々の設定は端折った。）
こちらはインターネットから隔離したサブネットで、ここにはDBサーバーを設置する。


やってみる:horse:

名前タグ： VPCと同様お好きな名前で。（今回はtakahashi-sn1,takahashi-sn2）
VPC： 先ほど作成したVPCを選択。（takahashi-vpc）
アベイラビリティーゾーン： takahashi-sn1にはap-northeast-1a,takahashi-sn2にはap-northeast-1cを設定。 ちなみになぜアベイラビリティーゾーンの名前の末尾が1aとbをすっ飛ばして1cなのかはよくわかりません・・・:sweat_smile:
IPv4 CIDR ブロック: 172.30.1.0/24

と設定し「はい、作成する」ボタンをクリックすると、

![スクリーンショット 2017-12-06 15.26.26.png](https://qiita-image-store.s3.amazonaws.com/0/212851/1b9ec460-44bf-d13a-6859-9de733320240.png)

でけた。

### インターネットと接続
サブネットをインターネットと接続するためには、「インターネットゲートウェイ（Internet Gateway）」を使う。自分のネットワークにインターネット回線を引き込む作業。

やる。

1. インターネットゲートウェイを作成する。
　　　　　　名前タグ: 例によってご自由に。（今回はtakahashi-igwで作成）
2. 作成したVPC領域に結びつける
　　　　　　作成したtakahashi-igwにチェックをし、[VPCにアタッチ]をクリック。VPCを選択する。

以上。( ´_ゝ｀)


### ルーティング情報の設定
ネットワークにデータを流すには、「ルーティング情報」と呼ばれる設定が必要らしい。これはルートテーブルで設定するようだ。インターネットで使われる「TCP/IP」というプロトコルでは、データを細切れにした「パケット(Packet)」という単位でデータが送受信される。パケットは、様々な「ヘッダー情報」と「データの実体」を含んでいて、ヘッダー情報の一つに「宛先IPアドレス」がある。TCP/IPでは、ネットワーク機器である「ルーター」が、この「宛先IPアドレス」を見ながら、「最も宛先IPアドレスに近い方のネットワーク」へと次々とパケットを転送していき、最終目的地まで到達させる。
「宛先IPアドレスの値が、いくつのときには、どのネットワークに流すべきか」という設定、それが「ルートテーブル」っす。

(TCP/IP: http://wa3.i-3-i.info/word1540.html
パケット: http://wa3.i-3-i.info/word176.html)

宛先アドレスのことは「デスティネーション」、流すべきネットワーク先は、「ネクストホップ」や「ターゲット」という名称で呼ぶ。

**VPCでルートテーブルの設定**

ルートテーブルはサブネットごとに設定することができる。

1. まずサブネットをクリックして、Route Table IDを確認する。
2. 1で確認したRoute Table IDを持つルートテーブルをクリック。[ルート]タブをクリックすると、現在の設定値を確認できる。

**インターネットに向けて設定**

「0.0.0.0/0の範囲の宛先のパケットはインターネットゲートウェイに転送する」という設定をルートテーブルに追加する。**「0.0.0.0/0」は全てのIPアドレス範囲を示しているので、「転送先が指定されていない時のデフォルトの転送先」を示す。**(デフォルトゲートウェイ)

ルートテーブルをサブネットに割り当てる
1で作成したルートテーブルを、パブリックサブネットに割り当てる。[サブネットの関連付け] > [編集]で割り当てるサブネットを選択。
デフォルトゲートウェイをインターネットゲートウェイに設定
Destinationに0.0.0.0/0、Targetにはインターネットゲートウェイを設定した項目を加える。


〜完〜


AWSに初めて触れる機会に恵まれましたので。

完全なる備忘録になってしまいました。:thinking: