【AWS学習レポート】VPCを使ったネットワーク設計について

#AWS学習レポート書いた経緯
本職はゲームクライアントエンジニアですが、ふとしたきっかけでAWSについて勉強を去年の年末あたりからやり始めたのでちょっとずつレポートにまとめようと思い書き出しました
で、AWSの勉強っていっても範囲はすごくひろくてそのすべてをうまいこと記事にする能力はないのでAWSが提供する基本的なサービスを一つずつ備忘録的に書き記していこうかなと思ったわけです
最終的にはAWSSAアソシエイトの資格を取得できるといいなって思ってます（とれるかな・・？）

##AmazonVPCとは
> Amazon Virtual Private Cloud (Amazon VPC) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。仮想ネットワークは、お客様自身のデータセンターで運用されていた従来のネットワークによく似ていますが、AWS のスケーラブルなインフラストラクチャを使用できるというメリットがあります。
※AWSユーザガイドより引用

よくわからんですね。
要するにAWS上にプライベートネットワーク環境を構築できるサービスで
AWSを用いてサービスを運用する場合、かなり多用することになる代表的なサービスの一つです

##VPCを使ってネットワーク設計をする際のポイント
### リージョンの選択
リージョンとはデータセンターのある場所だと考えていればいいと思います（東京とかオレゴンとか）  
リージョンはAZ（アベイラビリティゾーン）と呼ばれる複数のデータセンターで構成されており、東京には現在4つのAZが用意されています  
リージョンを選択する際には以下のポイントを気を付ける必要があります  

1.  法規や社内規定を満たすか  
データには保存先の国の法律が適用されるため、社内規定には触れないかどうか、保存先の国では問題ないかなど考慮する必要があります  

2. ユーザとの距離  
データセンターとユーザーの距離が物理的に離れていると、通信速度がどうしても遅くなってしまいます。  
そのため、サービスの内容によっては設置したリージョンから離れた場所にいるユーザだと満足のいくサービスの提供ができない可能性がでてきます。  
ちなみに東京リージョンとアメリカバージニア北部リージョンのレイテンシーの差は200ミリ秒ほどあります。

3. 使いたいほかのAWSのサービスが使えるかどうか  
VPCはネットワーク環境を構築するサービスなため、多くの場合ほかのAWSのサービスと連携させます  
しかし、新サービスなどは一部のリージョンでしか利用できない場合があるため、そもそも利用できるリージョンを選ぶ必要があります  

4. コストパフォーマンス  
AWSのサービスの価格はリージョンによって異なるため、価格の安いリージョンを選ぶことでコスト削減が見込めます

### サブネット
サブネットとは大きなネットワーク環境をさらに小分けに分割したネットワークのことです  
サブネットは基本的に独立しており、明示的に関係性を明らかにしない限り干渉しあうことありません  
なぜ分割するかというと主な理由は以下の通りです  

1. 障害を広げないため  
物理的に隔離することで一つのサブネット内で障害が発生してもその影響を全体に広げない効果があります  

2. セキュリティ上の理由  
サブネットをわけることで別々の設定ができるため「特定のサブネットのみアクセスが可能にする」といったことが可能になります  
また、インターネットに接続するサーバーだけのサブネットを作り、ローカルネットワークから隔離することでセキュリティを高めたりすることができます  

### Internet Gateway
サブネットを作成するだけではインターネットに接続することができません  
インターネットに接続するためにはInternet Gatewayへのルートを設定したカスタムルートテーブルを作成してサブネットに関連づける必要があります  
なので、作成するサブネットはインターネットに接続する必要があるかなどを考える必要があります  
また、インターネットに接続できるようにしたサブネットを「パブリックサブネット」、接続できないサブネットを「プライベートサブネット」と呼びます  

### パブリックIPアドレス/Elastic IPアドレスの割り当て
インターネットに接続するにはパブリックIPアドレスの割り当てを行う必要があります  
AWSのパブリックIPアドレスプールからランダムに割り当てられ宇パブリックIPアドレスを使用してもよいのですが、この場合インスタンスが再起動するたびに変化してしまいます(それで問題ない場合もある)  
もう一つの方法はElasticIPアドレスです。ElasticIPアドレスはAWSアカウントごとに割り当てられた固定IPアドレスでインスタンスに紐づけて使います  
独自ドメインのホスト名とIPアドレスを関連付ける場合など、インスタンスのパブリックIPアドレスを変更したくない場合はこちらを使います  

### Security GroupとNACLの設定
Security Groupはインスタンスレベルで動作するのに対して、NACLはサブネットレベルで動作しますので用途によって使い分ける必要があります
表にまとめると以下のようになります(AWSユーザガイドより引用)

| セキュリティグループ     |       NACL | 
|:-----------------|------------------:|
| インスタンスレベルで動作します|サブネットレベルで動作します。 |
|ルールの許可のみがサポートされます |ルールの許可と拒否がサポートされます|
| ステートフル: ルールに関係なく、返されたトラフィックが自動的に許可されます|ステートレス: 返されたトラフィックがルールによって明示的に許可されます|
| トラフィックを許可するかどうかを決める前に、すべてのルールを評価します|                トラフィックを許可するかどうかを決めるときに、順番にルールを処理します|
| インスタンスの起動時に誰かがセキュリティグループを指定した場合、または後でセキュリティグループをインスタンスに関連付けた場合にのみ、インスタンスに適用されます|             関連付けられたサブネット内のすべてのインスタンスに自動的に適用されます (したがって、セキュリティグループを指定するユーザーに依存する必要はありません)|



詳細は長いので以下のリンクを参考してください  

[AmazonVPC-セキュリティ](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Security.html)


#所感
ようやくVPCについてだけでもレポートにすることができました  
基本的なサービスは随時アウトプットしていきたいです
正直結構端折っているので詳しく知りたい方は本を読むなり、気になったワードを検索したほうがいいと思います  
ここが間違っているぞ、という箇所は指摘いただけると助かります
###参考文献

[Amazon Web Services 基礎からのネットワーク&サーバー構築 ](https://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/4822237443/ref=sr_1_3?ie=UTF8&qid=1549977707&sr=8-3&keywords=AWS)

[Amazon Web Services エンタープライズ基盤設計の基本](https://www.amazon.co.jp/Amazon-Web-Services-%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%A9%E3%82%A4%E3%82%BA%E5%9F%BA%E7%9B%A4%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E6%9C%AC-%E5%A0%80%E5%86%85/dp/4822292673/ref=sr_1_7?ie=UTF8&qid=1549977707&sr=8-7&keywords=AWS)