VPCの構築

# 目次
- 用語
- 注意点
- 作業内容

# 用語
- NATゲートウェイ　プライベートサブネットからインターネットに通信を返すことが可能になる
- IWゲートウェイ　インターネットへの通信が可能になる
- ルートテーブル　サブネットにゲートウェイへの設定を追加することで、サブネットからゲートウェイへの通信が可能になる
- セキュリティグループ　インスタンスへのトラフィックのアクセス可否を設定する。インスタンス単位で適用し、特定のVPCに紐づいて作成される。許可のみ指定可能で、インバウンドのみ設定すればアウトバウンドも許可される。
- ネットワークACL　VPCとサブネットへのトラフィックのアクセス可否を設定する。VPC/サブネット単位で適用する。許可と拒否を指定し、インバウンド設定のみではアウトバウンドは許可されない。

# 注意点
- NATゲートウェイのElastic IPアドレスは、使用されていないと課金されてしまうため、使わない場合は削除する。NATゲートウェイを削除後、Elastic IPアドレスのアドレスの解放をクリック。
- NACLを利用してサブネット内のリソースと通信をする際は、エフェメラルポートの設定をして、一時的にクライアントに利用可能なポートを指定する必要がある。
- Transit Gatewayは有料のため、使用したら削除する。
- ロールを作成する際、信頼ポリシーと許可ポリシーの2つを設定する必要がある。

# 作業内容
## VPC作成
1. マネジメントコンソールのVPCウィザードを起動をクリック。
1. 任意の名前を入力、IPv4 CIDRブロック`10.0.0.0/16`、AZを1つ、パブリックサブネットを1つ、プライベートサブネットを1つにする。
1. パブリックサブネットのCIDRブロックを`10.0.0.0/24`、プライベートサブネットのCIDRブロックを`10.0.1.0/24`を入力する。
1. DNSオプションで、`DNSホスト名を有効化`と`DNS解決を有効化`にチェックを入れる。
1. VPCを作成をクリック。

## パブリックサブネットの作成
1. サブネットをクリック
1. VPC IDは先程作成したVPCを選択、サブネット名は任意、アベイラビリティーゾーンを東京/ap-northeast-1c、IPv4 CIDRブロック`10.0.2.0/24`を入力。
1. サブネットを作成をクリック。
1. 対象のサブネットをチェックする。
1. ルートテーブルタブのルートテーブル名をクリックし、ルートテーブルにチェックを入れる。
1. ルートタブのルートの編集をクリック。
1. ルートの追加をクリック。
1. 送信先`0.0.0.0/0`、ターゲットを`インターネットゲートウェイ`にして、ルートの保存をクリック。

## プライベートサブネットの作成
1. サブネットをクリック
1. VPC IDは先程作成したVPCを選択、サブネット名は任意、アベイラビリティーゾーンを東京/ap-northeast-1c、IPv4 CIDRブロック`10.0.3.0/24`を入力。
1. サブネットを作成をクリック。
1. NATゲートウェイをクリック。
1. NATゲートウェイを作成をクリック。
1. 任意の名前を入力、サブネットは`パブリックサブネット`を選択、接続タイプは`パブリック`、`Elastic IPを割り当て`をクリック
1. NATゲートウェイを作成をクリック。
1. サブネットをクリックし、先程作成したプライベートサブネットを選択。
1. ルートテーブルタブのルートテーブルをクリック。
1. アクション→ルートの編集をクリック。
1. ルートの追加をクリック。
1. 送信先`0.0.0.0/0`、ターゲットを`NATゲートウェイ`にして、ルートの保存をクリック。

## ネットワークACLの作成
1. ネットワークACL→ネットワークACLを作成をクリック。
1. 任意の名前を入力、VPCを先程作成したものを選択し、ネットワークACLを作成をクリック。
1. ※デフォルトでは、インバウンドルールとアウトバウンドルールは全て拒否されているため、編集を行う。インバウンドルール→インバウンドルールを編集
1. 新しいルールを追加→ルール番号、タイプ(SSHなど)、送信元IP、許可/拒否を選択
1. 変更を保存
1. アウトバウンドも同様に編集する
1. サブネットの関連付け→サブネットの関連付けを編集
1. 先程作成したサブネットを選択し、変更を保存をクリック
1. ※クライアントPCに返信を返すためには、動的に割り当てるポート番号を設定する必要がある。アウトバウンドルールを編集→新しいルールを追加→ルール番号、タイプ(カスタムTCP)、ポート範囲(1024-65535)、送信先IP(0.0.0.0/0)、許可を選択
1. 変更を保存をクリック

## NATゲートウェイを作成
1. NATゲートウェイ→NATゲートウェイを作成
1. 任意の名前を入力、サブネットはパブリックサブネットを選択、接続タイプはパブリック、Elastic IPの割り当てをクリック
1. NATゲートウェイを作成をクリック
1. サブネット→プライベートサブネットを選択→ルートテーブルをクリック
1. ルート→ルートの編集をクリック
1. ルートの追加→ターゲット(NATゲートウェイ)、送信先(0.0.0.0/0)、ルートの保存をクリック

プライベートサブネットからS3へアクセスを試みた際、NATゲートウェイを削除していると、インターネットを通してリソースにアクセスしているため、S3にアクセスできなくなる。  
そこで、VPCエンドポイントを使用することで、インターネットを介さずに、S3にアクセスできるようになる。
## VPVエンドポイントを作成
1. エンドポイント→エンドポイントを作成をクリック
1. 任意の名前を入力、サービスでS3を選択(タイプはGateway)、VPCは作成したものを選択、ルートテーブルはプライベートサブネットを選択、ポリシーはフルアクセス、エンドポイントを作成をクリック
1. teratermで、プライベートサブネットから`aws s3 ls --region ap-northeast-1`を実行することで、S3にアクセスできた

## ピアリング接続を作成
1. ピアリング接続→ピアリング接続を作成をクリック
1. 任意の名前を入力、VPCは作成したものを選択、アカウントは自分のアカウント、リージョンはこのリージョン、VPC IDはデフォルトを選択、ピアリング接続を作成をクリック
1. 作成したピアリング接続を選択、アクション→リクエストを承諾をクリック

## Transit Gatewayを作成
1. Transit Gateway→Transit Gatewayを作成をクリック
1. 任意の名前を入力、Transit Gatewayを設定はデフォルト、Transit Gatewayを作成をクリック
1. Transit Gateway接続→Transit Gatewayアタッチメント作成をクリック ###Transit GatewayアタッチメントはVPC毎に作成する必要がある
1. 任意の名前を入力、Transit Gateway IDを先程作成したTransit Gatewayを選択、アタッチメントタイプをVPC、VPCアタッチメントはデフォルト、VPC IDはデフォルト、サブネットは全て選択、Transit Gatewayアタッチメント作成をクリック
1. 2つ目のTransit Gatewayアタッチメントの作成で、上記のVPC IDを作成したVPCに変えて同様に作成