AWSを扱う上で押さえておくべき基本用語とネットワーク構築に関する一連の流れ ~備忘録~

## はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。

今回は、AWSを扱う上で押さえておくべき基本用語やサービス、基礎的なネットワーク構築について学びましたので、振り返り用としてまとめておきたいと思います。

間違いなどがございましたら、ご指摘のほどよろしくお願い致します。


## AWSを扱う上で押さえておくべき基本用語

AWSを扱う上で、押さえておくべき基本用語について箇条書きでまとめておきたいと思います。

### ・リージョンとアベイラビリティゾーン

``リージョンとは``
リージョンとは、**AWSの各サービスが提供されている地域のこと**を表しています。

基本的に、リージョンごとにネットワークを設定してからサーバーを作成していきます。
(※リージョンによって、使えるサービスが異なるので使用予定のサービスが各リージョンで使用できるかどうかを確認しておく必要があります)

リージョンを選択する場合、サービスを展開する地域とできる限り近いリージョンを選択します。

例えば、日本でサービスを展開する場合、リージョンは東京を選択すべきです。
日本でサービスを展開するのに、リージョンとしてアメリカ等を選択してしまうと地域が離れてしまい、応答時間が遅くなります。
<br>
``アベイラビリティゾーンとは``
アベイラビリティゾーンとは、**複数の独立したデータセンター**のことを表しています。

どのリージョンにも、アベイラビリティゾーンが複数存在しており(冗長化)、何らかの理由で1つのアベイラビリティゾーンが利用不可になった場合でも、別のアベイラビリティゾーンを使用することでシステムが稼働できるようになっています。

``リージョンとアベイラビリティゾーンの関係性``
下の図のように、リージョンの中に必ず2つ以上のアベイラビリティゾーンが存在し、EC2などのサーバーを立てる際は、リージョンを選択した後にその中のどのアベイラビリティゾーンにサーバーを立てるかを選択します。

![スクリーンショット 2021-08-06 16.49.03 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/b5b4ab44-15de-cee3-7284-bbbf751fb8bc.png)
### ・VPC
``VPCとは``
**AWSアカウント専用の仮想ネットワーク**であり、AWSクラウドの他の仮想ネットワークから論理的に切り離されています。

VPCを使うことで、独立したネットワーク環境を作成できます。

ネットワーク環境を作成する場合、リージョンを選択後にVPCを作成し、VPCの中でサブネット(詳細は後述する)を使い枠組みを作成(細かく区切る)、そのサブネットの中にサーバーを立てる流れになります。

VPC内には、AmazonEC2インスタンスなどのAWSリソースを起動できます。また、VPCのIPアドレス範囲を指定して、サブネット(詳細は後述する)を追加し、セキュリティグループを関連付けて、ルートテーブルを設定できます。


``VPCとリージョン、アベイラビリティゾーンの関連図``

![スクリーンショット 2021-08-06 16.57.47 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/bc319a4e-fab3-15be-691b-034a8699fbad.png)
### ・サブネット
``サブネットとは``
サブネットとは、VPCという仮想ネットワークの中に、小さいネットワークの集まり(区切り)を作ることができるコンポーネントです。
サブネットは複数のアベイラビリティゾーンにそれぞれ作成できるので、結果として複数のサーバーを立てることが可能です。(AWS上でサーバーを作成する際は、サブネットの中に配置します)

インターネットに接続する必要があるリソースにはパブリックサブネットを、インターネットに接続しないリソースにはプライベートサブネットを使用します。

上記のように、サブネットを利用することで、ネットワークごとに役割を与えることができ管理しやすくなります。

例えば、webクライアント(インターネット)からwebサーバーを閲覧可能にし、DBサーバーを閲覧不可にしたい場合、アベイラビリティゾーンの中にそれぞれサブネットを作成して片方をwebクライアント(インターネット)から閲覧可能(パブリックサブネット)にし、もう片方を閲覧不可(プライベートサブネット)に設定することで、ネットワークを完全に区切ることができます。

``リージョン、VPC、アベイラビリティゾーン、サブネット、サーバーの関連図``
![スクリーンショット 2021-08-09 14.49.56 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/5f0fe2db-77ff-ea7d-dd85-fbaccdce9446.png)




``重要``
AWSでは、**サブネットを複数のアベイラビリティゾーンに作成して、複数のサーバーを立てることで冗長性を高める**ことがベストプラクティスとして推奨されています。



## ネットワーク構築に関する一連の流れ
作業内容としては、リージョンの選択からVPCの作成、サブネットの作成、ルーティングの設定までを行いたいと思います。

### ・VPCの作成

**1.リージョンが東京であることを確認**
![スクリーンショット 2021-08-10 16.35.52 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/1c92a020-91e5-42ef-a003-9c9cd555a6ad.png)

**2.VPCを新規作成する**
AWSでは、デフォルトでVPCが作成されていますがデフォルトのVPCは使用せず新規作成を行います。
左のメニューバーでVPCを選択すると下のような画面に遷移し、デフォルトのVPCとVPCを作成するボタンが現れるので、作成ボタンをクリックして次の画面に遷移します。
![スクリーンショット 2021-08-10 16.41.08 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/b32f9339-04c8-93e0-a9ba-06a80856c12a.png)

**3.VPC作成画面で必要事項を入力する**

``名前タグ:`` 
VPCを識別するための入力項目で、好きな名前タグを入力します

``IPv4 CIDR ブロック:`` 
VPC全体のIPアドレスの範囲をCIDR表記で設定します

``IPv6 CIDR ブロック:`` 
Amazonが用意しているIPv6をVPCに紐付ける設定が可能です

``テナンシー:`` 
ハードウェアを占有するオプションになります(選択するとEC2等の料金が高くなる)

下の画面のように、入力後、VPCを作成ボタンをクリックすることでエラーが発生しなければVPCを作成することができます。

![スクリーンショット 2021-08-10 16.47.47 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/d6e1b881-32e1-32c9-0850-12265678c363.png)

**4.作成したVPCを確認する**

VPCを作成すると、下のような画面に遷移し設定した内容等が確認できます。
間違いが無いかを確認して下さい。間違いがなければ、VPCの作成は成功です。

![スクリーンショット 2021-08-10 16.53.24 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/213aa34a-3fee-da64-c4e2-d0d8167219c7.png)

### ・VPCの設計ポイント
**1.プライベートIPアドレス範囲から指定する**
VPCでは仮想のプライベートネットワークを作成するので、下記のプライベートIPアドレスの範囲から指定することが推奨されています。
プライベートIPアドレスの範囲はRFC1918で規定されており、通常はその範囲内で設定します。

・10.0.0.0 - 10.255.255.255 (10.0.0.0/8 プレフィックス)
・172.16.0.0 - 172.31.255.255 (172.16.0.0/12 プレフィックス)
・192.168.0.0 - 192.168.255.255 (192.168.0.0/16 プレフィックス)

**2.IPアドレスの範囲は大きめに設定する**
IPアドレスの範囲は作成後の変更が不可能なので、VPC、サブネットのIPアドレス範囲は将来的に起こりそうな拡張に対応できるように大きめに設定します。
範囲は/28~/16であり、基本的に**/16**が推奨されています。

**3.IPアドレスの重複に気をつける**
重複してしまうと機能が利用できなくなるので、オンプレミス、他のVPCのIPアドレスとの範囲の重複に注意します。


### ・サブネットの作成
VPCを分割するために、サブネットを作成します。サブネットを作成することで、パブリックサブネットとプライベートサブネットに分けることができます。
また、VPCのままだとIPアドレスの範囲が広いので、分割して使いやすくします。

``IPアドレスを分割するメリット``
・セキュリティ上の理由で、パブリックサブネットとプライベートサブネットを構築したい場合に対応が可能となります

**1.使用するVPCを確認する**
先ほど作成したVPCが選択されていることを確認します。
![スクリーンショット 2021-08-10 17.15.04 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/04fd997f-b001-3fe0-1934-cf9af4d97272.png)

**2.サブネットを新規作成する**
左のメニューバーから、サブネットを選択すると、下のようなサブネット一覧画面に遷移します。
デフォルトでサブネットが複数存在しますが、新規作成を行うためサブネットを作成ボタンをクリックします。
![スクリーンショット 2021-08-10 17.19.14 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/814a6fd9-6f31-d924-d05f-dbd2c6324eb5.png)

**3.サブネット作成画面で必要事項を入力する**

``VPC ID:`` 
サブネットを作成するVPCを選択します

``サブネット名:`` 
好きなサブネット名を入力します(名前の後ろに1aなどを付けておくと、どのアベイラビリティゾーンを使用しているかが分かりやすいです)

``アベイラビリティーゾーン:``
使用するアベイラビリティーゾーンを選択します

``IPv4 CIDR ブロック:``
作成するサブネットのIPアドレスの範囲をCIDR形式で入力します

![スクリーンショット 2021-08-10 17.27.48 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/8f8c8c2e-9d68-36ee-a4ce-d997cea3c05c.png)

**4.作成したサブネットを確認する**
正常に作成が完了していれば、サブネット一覧画面で新規作成したサブネットを確認できます。
![スクリーンショット 2021-08-10 17.37.33 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/451be63c-9f16-2ec6-304d-7d45b1616d46.png)

### ・サブネットの設計ポイント
**1.VPCのCIDRブロック範囲からIPアドレスを設定する**
将来的に必要となるIPアドレス数を予め見積もって設定します。
基本的に、/24が推奨されています。

**2.サブネットの分割はルーティングポリシーとアベイラビリティーゾーンを基準として行う**
前提知識として、サブネットに割り当てられるルートテーブルは１つだけです。
上記のことを考慮しつつ、インターネットへのアクセスの有無や、拠点アクセスの有無などのルーティングポリシーに応じて分割します。
また、アベイラビリティーゾーンを基準に分割を行うとは、例えばwebサーバーを複数立てる際などに複数のアベイラビリティーゾーンを選択して、その数に応じたサブネットを作成してそれぞれのアベイラビリティーゾーンにサブネットを設定します。

### ・ルーティングの設定
ルーティングを設定する目的は、パブリックサブネットからインターネットに接続できるようにすることです。
webサーバーを設置するサブネットでは、ツールをインターネットからインストールするのでパブリックサブネットからインターネットに接続できるようにする必要があります。

ルーティングを設定する前は、ルートテーブルには自身のIPアドレスしか登録されておらず、自身のIPアドレスの範囲外の宛先への通信は全て破棄されるようになっています。この状態では、インターネットと通信ができません。

インターネットと通信するためには、インターネットと通信を行うパブリックサブネット用のルートテーブルを新規作成し、インターネットゲートウェイと接続するように設定する必要があります。

``注意点``
・AWSの場合、ルートテーブルはVPCと各サブネットに対して設定可能です(**サブネットごとにルーティングを設定する**)
・サブネットやインターネットゲートウェイでは、暗黙的にルーターが動いています。AWSでは、サブネットに対してルートテーブルを作成するとそのサブネットに対してルーターが動いている状態となります。

では、下記の手順に従ってルーティングを設定していきます。

### 1.インターネットゲートウェイを新規作成してVPCにアタッチする
**1-1.インターネットゲートウェイを新規作成する**
左のメニューバーからインターネットゲートウェイを選択して、インターネットゲートウェイの一覧画面に遷移します。
次に、インターネットゲートウェイを作成するボタンがあるので、クリックして作成画面に遷移します。
![スクリーンショット 2021-08-10 21.29.26 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/5a6e38eb-69b2-8e0a-fb1c-41b0c4303b5a.png)

**1-2.インターネットゲートウェイ作成画面で必要事項を入力する**
名前タグを入力し、作成ボタンをクリックします。
![スクリーンショット 2021-08-10 21.33.42 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/6194860e-806b-5670-a0cd-8334fc961d92.png)

**1-3.作成完了後、VPCへのアタッチを実行します**
作成完了画面を見ると分かる通り、作成したインターネットゲートウェイは**Detached状態**です。
このままでは、インターネットに接続することができないので、VPCへアタッチを選択して、選択画面に遷移後、VPCを選択します。
![スクリーンショット 2021-08-10 21.35.09 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/db3e0c20-94f1-8753-47f9-9888f1021fc4.png)

**1-4.VPC選択画面で、アタッチするVPCを選択する**
VPC選択画面に遷移後、新規作成したインターネットゲートウェイをどのVPCへアタッチするかを選択します。
アタッチボタンをクリックすると、完了画面に遷移して、インターネットゲートウェイの状態がDetachedからAttachedに変化していることが確認できます。
![スクリーンショット 2021-08-10 21.36.23 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/50b65163-452c-d4ad-86cd-3ef06ea7ade9.png)

**1-5.インターネットゲートウェイ一覧画面で新規作成したインターネットゲートウェイの状態を確認する**
インターネットゲートウェイ一覧画面で、新規作成したインターネットゲートウェイの状態が、AttachedになっていればVPCへのアタッチが成功しています。
![スクリーンショット 2021-08-10 21.45.56 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/f9d80aa0-a922-d156-23be-f24d5de37228.png)


### 2.ルートテーブルの作成後、パブリックサブネットに紐づけターゲットにigwを選択する
**2-1.デフォルトルートのターゲットとしてインターネットゲートウェイを設定するためにルートテーブルを新規作成する**
左のメニューバーからルートテーブルを選択すると、存在するルートテーブルが一覧で表示されます。

今回作成したVPCに紐付いているルートテーブルの状態を確認すると、**ターゲットがlocal**になっています。
この状態だと、自身のIPアドレス以外への通信は破棄してしまうので、ルートテーブルを新規作成してデフォルトルートのターゲットにインターネットゲートウェイを設定します。
![スクリーンショット 2021-08-10 22.01.53 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/9d099e95-b7bd-5257-3b87-9077f6b1c17e.png)


**2-2.ルートテーブル作成画面で必要事項を入力する**
下記項目を入力して、ルートテーブル作成ボタンをクリックします。

``名前タグ:`` 
好きなルートテーブル名を入力します

``VPC:`` 
該当するVPCを選択する

![スクリーンショット 2021-08-10 22.15.51 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/690d7971-33a5-607e-51a7-0a77cfaf54b6.png)

**2-3.作成完了画面で正常に作業が完了していることを確認する**
作成ボタンをクリックすると、正常動作の場合下のような画面に遷移して、正常にルートテーブルの作成が完了していることが確認できます。
![スクリーンショット 2021-08-10 22.19.33 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/5b8a36e1-acfa-9aba-7012-1d7129364533.png)



**2-4.新規作成したルートテーブルをパブリックサブネットに関連付ける**
新規作成したルートテーブルは、VPCには割り当てられていますが**パブリックサブネットには関連付けられていない状態**です。
従って、下の画面のように**サブネットの関連付け**をクリックして、**サブネットの関連付けを編集ボタン**をクリックします。
![スクリーンショット 2021-08-10 22.24.02（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/6d7c0ddd-75ce-c3ee-1761-52ae3a2d17ad.png)


編集画面に遷移後、下の画面のように関連付けるサブネットを選択して内容を保存します。
これで、新規作成したルートテーブルはパブリックサブネットのルートテーブルとなります。
![スクリーンショット 2021-08-10 22.31.11 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/b68b2881-b9fd-5828-3f76-167c7886531a.png)


**2-5.ルートテーブルに指定したパブリックサブネットが関連付けられているかを確認する**
ルートテーブル一覧画面でルートテーブルを選択し、サブネットの関連付けタグをクリックすると、関連付けられてサブネットを確認することができます。
![スクリーンショット 2021-08-10 22.35.40 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/17b807e1-a2f9-5c08-59be-461ee77a9944.png)

**2-6.デフォルトルートのターゲットをインターネットゲートウェイに設定する**
新規作成したルートテーブルを選択し、ルートタグを選択するとlocalしか設定されていません。
この状態だと、インターネットに接続できないので**ルートを編集**をクリックしてターゲットにインターネットゲートウェイを設定します。
![スクリーンショット 2021-08-10 22.52.23 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/fc3f68e6-8a74-9b5d-68f3-30857b526548.png)

編集画面に遷移後、**送信先IPアドレス(デフォルトルート)とターゲット(インターネットゲートウェイ)**を選択してルートを保存します。
![スクリーンショット 2021-08-10 22.58.02 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/e0460c26-49fc-048a-1515-3d6c2b953a63.png)

**2-7.ルートテーブル一覧画面で、設定したルートを確認する**
ルートテーブルを選択後、ルートタグをクリックしてターゲットに設定したインターネットゲートウェイが確認できれば作業は成功です。
![スクリーンショット 2021-08-10 23.00.22 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/f05af559-47dd-456a-9e07-aaaf5cf80df5.png)

以上で、インターネットゲートウェイを新規作成後、特定のVPCにアタッチ、新規ルートテーブルを作成後、特定のパブリックサブネットを関連付け、新規ルートテーブル内のデフォルトルート(0.0.0.0/0)のターゲットに新規作成したインターネットゲートウェイを設定する作業は終了です。
これにより、パブリックサブネットはインターネットに接続可能となります。

## ネットワーク構築の流れ　まとめ
最後に、ネットワーク構築の流れを図を使い簡単にまとめておきます。

**1.VPCの作成**
リージョン設定に間違いがないか確認後、VPCを作成する。
![スクリーンショット 2021-08-11 18.32.09 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/0cadb264-2f2e-f74c-4c34-781fdc296063.png)

**2.サブネットの作成**
サブネット作成では、属するアベイラビリティーゾーンが適切であるかと、サブネットのIPアドレスがVPCのIPアドレス範囲内に収まっているかを確認する。
![スクリーンショット 2021-08-11 18.54.26 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/2776abb5-fdbb-ef69-ca43-6a438c693d31.png)

**3.ルーティングの設定**
ルーティング設定では、igwを新規作成後、特定のVPCとのアッタッチを忘れずに行い、新規ルートテーブル作成後は対象となるパブリックサブネットと関連付け、デフォルトルートのターゲットに新規作成したigwを選択します。
![スクリーンショット 2021-08-11 19.04.39 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/80563f69-78ab-3920-0217-2909601a77ae.png)




下記にて、ルーティングを設定するにあたりルーティングに関する知識が必要となるので、補足として少しまとめておきます。

## [補足] ネットワーク構築に関する基本用語
### ・ルーター
ルーターとは、どのIPアドレスがどの機器に紐付いているか、どのネットワークに所属しているかを管理している機器です。
インターネットでは、ルーターを通じて機器同士が繋がっています。

### ・ルートテーブル
ルートテーブルとは、ネットワークの経路を設定するコンポーネントです。
ルートテーブルには、サブネットまたはゲートウェイからのネットワークトラフィックの経路を判断する際に使用される、ルートと呼ばれる一連のルールが含まれます。
サブネット内の通信がどの送信先IPアドレスのネットワークに対して、どのターゲット（igwとかEC2とか）に転送されて欲しいかを設定します。

1つのサブネットに1つのルートテーブルを割り当てることができますが、指定がない場合はVPC作成時に自動生成されるルートテーブルがサブネットに割り当てられます。

``例``

|送信先IPアドレス|ターゲット|
|:--|:--|
|10.0.0.0/16|local|
|172.31.0.0/16|pcx-11223344556677889|
|0.0.0.0/0|igw-12345678901234567|
``引用:``[AWS 公式ドキュメント VPC のルートテーブル](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Route_Tables.html#route-tables-priority)

``解説``

1行目のlocalとは、自身のネットワークのことを指します。
10.0.0.0/16に含まれるIPアドレス宛への通信は自身のネットワークに転送することを表しています。

2行目では、別のルーターが存在する場合、送信先IPアドレスとターゲットの組み合わせが、別のルーターのIPアドレスとそのルーター名となります。

3行目では、デフォルトルートといって、ルートテーブルに登録されているどのアドレスにも一致しない場合の経路を表します。
10.0.0.0/16と172.31.0.0/16に属さないIPアドレスへの通信がリクエストされた場合、3行目のターゲットに接続させることを表します。
基本的にデフォルトルートのターゲットにはigwを選択します。

### ・インターネットゲートウェイ
VPCをインターネット接続できるようにするコンポーネントです。

>インターネットゲートウェイは 2 つの目的を果たします。<br>1 つは、インターネットでルーティング可能なトラフィックの送信先をVPCのルートテーブルに追加することです。<br>もう1つは、パブリックIPv4アドレスが割り当てられているインスタンスに対してネットワークアドレス変換(NAT)を行うことです。
``引用:``[AWS Documentation インターネットゲートウェイ](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html)

## 参考文献
[AWS Documentation](https://docs.aws.amazon.com/index.html)
[AWS Black Belt Online Seminar Amazon Virtual Private Cloud(VPC)](https://d1.awsstatic.com/webinars/jp/pdf/services/20180418_AWS-BlackBelt_VPC.pdf)
[AWSのネットワーク設計入門 2018](https://d1.awsstatic.com/events/jp/2018/summit/tokyo/aws/07.pdf)
[AWSのネットワーク設計入門 2017]()