Amazon VPC とは Amazon Virtual Private Cloud の略称で,ユーザー専用のプライベートなネットワーク空間を構築できるサービスです。
RailsアプリをAWSで動作させるために,Webサーバーを配置する EC2 とデータベースシステムを動かす RDS を使用しますが,これらを配置するには先に VPC を設定する必要があります。
Amazon VPC は追加料金なしで使用できます。(参考:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/what-is-amazon-vpc.html)
2章では以下の部分を作成していきます。

【注意】 メニューバー右側の真ん中に「米国」などと表示されている場合は,「東京(アジアパシフィック(東京) ap-northeast-1)」に変更して下さい


【注意】 以下,左上の「New VPC Experience」をONにしていることを前提とします。

| キー | 値 |
|---|---|
| 名前タグ | アプリ名_vpc |
| IPv4 CIDR ブロック | 10.0.0.0/16 |
【注意】1章で注意しましたとおり,「アプリ名」の箇所はあらかじめ メモ しておいた「アプリ名」を使用して下さい

VPCの中に,「インターネットから直接通信できる EC2用 のサブネット」と「インターネットから直接通信できない RDS用 のサブネット」を2つずつ作成していきましょう。(許可する接続方法は後に設定します)
HTTPS化 する際に ALB を使用するため,異なる アベイラビリティーゾーン に属するサブネットを 2つ 用意する必要があります。
| キー | 値 |
|---|---|
| VPC | アプリ名_vpc ※リストから選択 |

| キー | 値 |
|---|---|
| 名前タグ | アプリ名_public_1a_subnet |
| アベイラビリティーゾーン | ap-northeast-1a ※リストから選択 |
| IPv4 CIDR ブロック | 10.0.0.0/24 |

| キー | 値 |
|---|---|
| 名前タグ | アプリ名_public_1c_subnet |
| アベイラビリティーゾーン | ap-northeast-1c ※リストから選択 |
| IPv4 CIDR ブロック | 10.0.1.0/24 |
※ まだ作成しますので,「サブネットを作成」ボタンをクリックしないこと!
RDS を利用するには異なる アベイラビリティーゾーン に属するサブネットを 2つ 用意する必要があります。
| キー | 値 |
|---|---|
| 名前タグ | アプリ名_private_1a_subnet |
| アベイラビリティーゾーン | ap-northeast-1a |
| IPv4 CIDR ブロック | 10.0.10.0/24 |
| キー | 値 |
|---|---|
| 名前タグ | アプリ名_private_1c_subnet |
| アベイラビリティーゾーン | ap-northeast-1c |
| IPv4 CIDR ブロック | 10.0.11.0/24 |
「サブネットを作成」ボタンをクリック
下図の状態になっていることを確認しておきましょう

VPC 内から インターネット に接続するための「出入口」に相当する インターネットゲートウェイ を作成しましょう。
| キー | 値 |
|---|---|
| 名前タグ | アプリ名_gateway |

| キー | 値 |
|---|---|
| 使用可能なVPC | アプリ名_vpc |

インターネットゲートウェイ をアタッチしただけでは,サブネットからインターネットにアクセスすることはできません。
インターネットゲートウェイ へ転送する経路である ルートテーブル を設定する必要があります。
| キー | 値 |
|---|---|
| 名前タグ | アプリ名_table |
| VPC | アプリ名_vpc |

「閉じる」ボタンをクリック
作成したルートテーブルを選択し,「アクション」ボタンをクリックし,「ルートの編集」を選択

local を消さないこと!| キー | 値 |
|---|---|
| 送信先 | 0.0.0.0/0 |
| ターゲット | 「Internet Gateway」を選択し,先ほど作成した「アプリ名_gateway」を選択 |


「閉じる」ボタンをクリック
(作成したルートテーブルを選択したまま)「アクション」ボタンをクリックし,「サブネットの関連付けの編集」を選択
「アプリ名_public_1a_subnet」「アプリ名_public_1c_subnet」のみを選択し,「保存」ボタンをクリック

インスタンスごとに許可する通信を設定するため, セキュリティグループ を作成しておきましょう。
( EC2 や RDS に適用する作業は,後で行います)
【構成内容】 クライアント --(HTTP or SSH)--> EC2

| キー | 値 |
|---|---|
| セキュリティグループ名 | アプリ名_ec2_security_group |
| 説明 | アプリ名_ec2_security_group |
| VPC | アプリ名_vpc |
「インバウンドルール」の「ルールを追加」を2回クリック
| キー | 値 |
|---|---|
| タイプ | HTTP ※「HTTPS」ではありません! |
| プロトコル | TCP ※自動選択 |
| ポート範囲 | 80 ※自動選択 |
| ソース | 任意の場所 (0.0.0.0/0 と ::/0 が表示) |
| 説明 | ※空白でOK |
| キー | 値 |
|---|---|
| タイプ | SSH |
| プロトコル | TCP ※自動選択 |
| ポート範囲 | 22 ※自動選択 |
| ソース | マイIP (自分のグローバルIPが表示) |
| 説明 | ※空白でOK |

【注意】ソースを マイIP とすることで,SSH接続できるIPアドレスを制限できます。ただし,自宅以外で EC2 にアクセスする可能性がある場合は,他のIPアドレスも登録が必要です。(意味が分からない場合は,SSH のソースも 任意の場所 に設定して下さい)
【構成内容】 EC2 --(TCP)--> RDS
データベースは EC2 からのリクエストのみを受け付けるように設定しておきます。
画面左のメニューバーの「セキュリティグループ」を選択し,「セキュリティグループを作成」ボタンをクリック
| キー | 値 |
|---|---|
| セキュリティグループ名 | アプリ名_db_security_group |
| 説明 | アプリ名_db_security_group |
| VPC | アプリ名_vpc |
「インバウンドルール」の「ルールを追加」をクリック
【注意】アプリで使用するデータベースシステムを確認し,「いずれか一方」のルールを追加して下さい
MySQL の場合| キー | 値 |
|---|---|
| タイプ | MySQL/Aurora |
| プロトコル | TCP ※自動選択 |
| ポート範囲 | 3306 ※自動選択 |
| ソース | カスタム : アプリ名_ec2_security_group |
| 説明 | ※空白でOK |

「セキュリティグループを作成」をクリック
PostgreSQL の場合| キー | 値 |
|---|---|
| タイプ | PostgreSQL |
| プロトコル | TCP ※自動選択 |
| ポート範囲 | 5432 ※自動選択 |
| ソース | カスタム : アプリ名_ec2_security_group |
| 説明 | ※空白でOK |

「セキュリティグループを作成」をクリック