【Rails AWS Docker】既存Ruby on Rails + MySQLアプリをDockerで構築し、AWSにデプロイする(2)

ポートフォリをとして作ったRuby on RailsアプリをDockerコンテナ化し本番環境をAWSで構築するまでの道のりです。
ポートフォリオ自体はこちらとなります。
[【ポートフォリオ】転職活動時に作成したポートフォリオの概要（テッ◯キャンプ）]
(https://qiita.com/sho_U/items/058e590325ee6833abb0)

かなり苦しめられたので、どなたかのお役に立てれば。

|  | タイトル |
|:-:|:--|
| 1  |  [ローカル環境のRailsアプリをDockerコンテナ化](https://qiita.com/sho_U/items/a1b5e4ddf13f3c42a722) |
| 2  | [AWSにVPCを作成する。パブリックサブネットを作成する]|
| 3 | [プライベートサブネットを作成する](https://qiita.com/sho_U/items/95c25df53a7e1fd20efd)  |
| 4 | [EC2インスタンスを作成する](https://qiita.com/sho_U/items/cb268b774f60cb01c226) |
| 5  | [RDSを作成する](https://qiita.com/sho_U/items/4e5431add35d9318865d)  |
|  6 | [DockerコンテナをAWSにアップロードする](https://qiita.com/sho_U/items/5ef6693f7ae8f1c27bb7) |

#AWSにVPCを作成する。

##VPCとは(ざっくり）
Virtual Private Cloud と呼ばれるものでAWS内に作成する仮想的なネットワーク網のことです。


まずは下記の様な構成のVPCとサブベットを作成します。 

 **サブネット**とは、VPC内でさらに区分されたネットワークのことです。
 **パブリックサブネット**にアプリ本体。**プライベートサブネット**にデーターベースを置きます。
 パブリックサブネットは、**外部からのアクセスを許可**する設定します。
プライベートサブネットは、**外部からのアクセスを許可せず、パブリックサブネットからのアクセスのみ**を許可します。（データーベースは外部からアクセスする必要はないのでセキュリティー向上のため）

 なお、「パブリックサブネット」「プライベートサブネット」という設定自体はなく、後ほど設定するセキュリティーグループにおいて、上記のようなネットワークのアクセス制限を設定していきます。

![IMG_A66BC051DFB8-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/aa094aad-36c3-4ca2-6612-a5bef50e433b.jpeg)

　vpcのプライベートIPアドレスは、サイダー表記が16ビットなので、先頭から１６ビット分つまり、10.0が、ネットワーク部となります。

　パブリックサブネット、プライベートサブネット共にプライベートアドレスは10.0.から始まっているので、VPC内のネットワークにあります。

　また、パブリックサブネットのサイダー表記は/24なので24ビット分、つまり10.0.10.までがネットワーク部。
プライベートサブネットのサイダー表記も/24なので24ビット分、つまり10.0.20.までがネットワーク部であり、
パブリックサブネットとプライベートサブネットは異なるネットワーク空間となります。

![IMG_BD8661923AD3-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/54ec0e52-8268-caeb-3f02-febf381686b4.jpeg)

###VPCの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/c35aae43-579d-c954-709a-6b8534e5d5db.png)

AWSにログインして、VPCダッシュボードに入り、VPCを作成する。

名前 ： VPCの名前任意

IPv4 CIDR ブロック : VPC用のプライベートIPアドレス(今回は10.0.0.0/16)

「VPCを作成」をクリック

##パブリックサブネット作成

AWSコンソールからVPCにVPCに入り、サブネットを選択してサブネットを作成する。


VPC IDに先ほど作成したVPCを選択する。

アベイラビリティーゾーン：今回はap-northease-1a

名前:fitO2_public_subnet_1a

IPv4 CIDR ブロック : 10.0.10.0/24

「サブネットを作成」をクリック

##パブリックサブネットのルーティングの作成

###インターネットゲートウェイ(IGW)を作成し、VPCにアタッチします。

![IMG_174B7A21241B-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/266e8aaa-4e6a-baaa-2361-04b6e2f33dbd.jpeg)

IGWとは、ざっくりいうとVPCとインタネットを繋ぐ窓口のようなものです。IGWを通じて、インターネットとVPC通信を行います。アタッチとは、作成したIGWをVPCと紐づける作業となります。

VPCコンソールから、「インタネットゲートウェイ」を選択、「インターネットゲートウェイの作成」をクリック。
名前を決めて、作成。

一覧から作成したIGWを選択して、右上のアクションからVPCに「アタッチをクリック」


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/c29c5308-a787-f814-bca1-e2284b1834ea.png)

先ほど作成したVPCを選択して、「インターネットゲートウェイのアタッチ」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/33687cd6-6088-7da0-fe09-a226a0e4470d.png)

###ルートテーブルを作成して、パブリックサブネットに紐付け

パブリックサブネット用のルーティングテーブルを作成します。

![IMG_92E66ED01F79-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/004e0658-88bc-578d-c78a-a1e89e357b35.jpeg)


パブリックサブネットに来たアクセスのうち

10.0.0.0/16　が宛先のものはVPCに送ります。
10.0.10.0/24 が宛先のものはパブリックサブネット（自分自身）に送ります。
0.0.0.0/0 （上記以外全ての宛先）は、IGWに送ります。

VPCコンソールから、「ルートテーブル」を選択し、「ルートテーブルの作成」をクリックして、名前を決めてVPCに先ほど作成したVPCを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/b0ab2172-a4ee-04ec-6cf8-ab989b90e35e.png)

一覧から作成した、ルーティングを選択し、下部の「ルート」タブを確認すると、
送信先「10.0.0.0/16」のものが宛先（ターゲット）がVPC（local)となっていることが確認できます。
ルートテーブルは、必ず所属するVPCが必須であるためため、先ほど選択したVPCが紐付けられます。

「サブネットの関連付け」タブをクリックし、「サブネットの関連付け編集」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/15d89091-d3b9-3b9c-2c9e-4b1e1782c8e5.png)

パブリックサブネットを選択し、保存をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/b479eeb2-f096-3549-64bf-56862b7f0123.png)

##IGWへのルートを作成する。

「ルートタブ」を選択し、「ルートの編集」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/cd318c11-930a-0757-4fbe-8576a4dc4918.png)

「ルートの追加」を選択して、「0.0.0.0/0」を選択する。
先ほど作成したIGWを選択する。

「ルートの保存」をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/cbe3d142-7d4a-9a50-0c0f-51b3bdf058dc.png)

これで、パブリックサブネットに紐づくルーティングテーブルが作成されました。

作り方をまとめると、下記の様になります。

![IMG_AE0A928B8E61-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/5873c669-02a7-8806-1a4f-c15b821742ff.jpeg)

それぞれ作り方が異なるのでややこしいですが、やっていることは、宛先IPアドレスに対して、どこに通信を振り分けるかということです。

##パブリックサブネット用のセキュリティーグループを作成する。

EC2ダッシュボードのセキュリティーグループをクリックして、「セキュリティーグループの作成」をクリックする。

「ルールの追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/0d986202-3265-9dc2-2959-aa13557e5ad2.png)


セキュリティーグループ名 : fitO2_SG
VPC: 先ほど作成したVPC
インバウンド：
　上記図の様に作成

これで、全てのアクセス元に対して、SSH通信（22番ポート)とhttp通信（80番ポート)を開放するセキュリティーグループが作成できました。後ほど、作るEC2インスタンスに、このセキュリティーグループを適用させる予定です。
(セキュリティーグループは後ほど、もうちょっと詳しく説明します。）

次回(3)へ続く
[プライベートサブネットを作成する](https://qiita.com/sho_U/items/95c25df53a7e1fd20efd)