【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その1〜ネットワーク,RDS環境設定編〜】

#まえがき

先日、Railsで制作したWebアプリケーションを、AWSのEC2にデプロイしました。

最初はHerokuにデプロイして運用していたのですが、表示されるまで時間がかかる事から、AWSへ移行する事を決意しました。

先輩エンジニアの方々が残してくれた記事を参考に作業をしたのですが、バージョン更新に伴う仕様の変更等があり、様々なエラーと格闘し大変苦労しました。

AWSは本当にサービスが豊富です。豊富故に、初学者のエンジニアが手を出すと、何から手をつけて良いのか分からないという側面もあります。

同じ様に大変な思いをされている方がいると思いますので、RailsアプリをAWSへ上げる方法を極力画像付きで分かりやすく紹介致します。

この記事では、「Hello World」と表示されるだけの簡単なアプリ「greeting」をアップロードするまでの過程を
解説していきます。

本記事を制作時点では、AWSは1年間の使用料が無料となっておりますので、是非この無料期間を活用して、AWSへのデプロイに挑戦されてはいかがでしょうか。

AWSへアプリをデプロイした後、ドメインと紐付け、更にHTTPS化する手順までを、画像付きで丁寧に解説した結果、まさかの6記事、10章までのボリュームとなりました。
大変かとは思いますが、是非最後までトライしてみてください！

それでは早速始めていきましょう！

#AWSにRailsアプリをイチから上げるシリーズ　項目表
|No|タイトル|
|:---|:---|
|その1|[ネットワーク、データベース設定編](https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2)|
|その2|[EC2設定編](https://qiita.com/Yuki_Nagaoka/items/5be084c6efe1f797fd94)|
|その3|[サーバー設定、Railsアプリ配置編](https://qiita.com/Yuki_Nagaoka/items/dbb185feb6d4f051c2f2)|
|その4|[Railsアプリの公開編](https://qiita.com/Yuki_Nagaoka/items/1f0b814e52e603613556)|
|その5|[ドメイン設定編](https://qiita.com/Yuki_Nagaoka/items/3020f02d3fd74c8572a0)|
|その6|[http→httpsへSSL化編](https://qiita.com/Yuki_Nagaoka/items/55ed1610cfc1f59398b1)|


# 【 第1章 】ネットワーク環境設定
初めにVPC（Virtual Private Cloud）の設定を行っていきましょう！
広いAWSという敷地の中で、自分の領域を決めるというイメージです。

##1.VPCの作成

画面左上のサービスを開き、検索欄に「VPC」と入力し、「VPC」を選択します。
![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/231e0281-b540-3b66-a844-b5cfc5819ca6.png)

まず右上のリージョンを「アジアパシフィック（東京）」に設定しましょう。

トップ画面より「VPC」を選択して、詳細ページ左上の「VPCの作成」を選択してください。
![image02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/036bee7f-4c39-9eb4-b840-b9a00e7aaaf6.png)


以下の通り項目に記載
1 . 名前タグ：「VPC_for_アプリ名」
2 . IPv4 CIDR ブロック：「10.0.0.0/16」
3 . IPv6 CIDR ブロック：「IPv6 CIDR ブロックなし
4 . テナンシー：「デフォルト」
右下の「作成」を選択
![image03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/53598ad4-d3f7-0e89-2421-3b7c673186b3.png)


##2.サブネットの作成

画面左の「サブネット」を選択して、詳細ページ左上の「サブネットの作成」を選択してください。
![image04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/62a801cf-260d-5c37-36f7-7fa5733b291f.png)


以下の通り項目に記載
1 . 名前タグ：「アプリ名-Subnet-1a」
2 . VPCに先ほど作成した：「VPC_for_アプリ名」
3 . アベイラビリティーゾーン：「ap-northeast-1a」
4 . IPv4 CIDR ブロック：「10.0.0.0/24」
右下の「作成」を選択
![image05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/523b4bd2-f4d7-ec18-5e1d-ea141b58ac59.png)

RDS用にもう一つサブネットを作成します。
同様に「サブネットの作成」を選択して、以下の通り項目に記載
1 . 名前タグ：「アプリ名-Subnet-1c」
2 . VPCに先ほど作成した：「VPC_for_アプリ名」
3 . アベイラビリティーゾーン：「ap-northeast-1c」
4 . IPv4 CIDR ブロック：「10.0.1.0/24」
右下の「作成」を選択

##3.インターネットゲートウェイの作成

画面左の「インターネットゲートウェイ」を選択して、詳細ページ左上の「インターネットゲートウェイの作成」を選択してください。
![image06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/01036041-dfd6-798d-e3ce-7944968ce489.png)

以下の通り項目に記載
1 . 名前タグ：「Gateway_for_アプリ名」
右下の「作成」を選択
![image07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/edce7940-b4d7-f90a-5126-307aff31989d.png)

このゲートウェイをVPCと紐付けます。
作成したゲートウェイを選択した状態で、「アクション」を選択し、「VPCにアタッチ」を選択します。
![image08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/298e9032-cd6c-365b-81da-0b72795a1ced.png)

VPCに先ほど作成した「VPC_for_アプリ名」を指定
右下の「アタッチ」を選択
![image09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/c93d7cc5-4e3b-3c31-7b07-cb7df5f7196b.png)

##4.ルートテーブルの作成

画面左の「ルートテーブル」を選択して、詳細ページ左上の「ルートテーブルの作成」を選択してください。
![image10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/885dee2f-c542-b544-0e20-a2a877a41ef9.png)

以下の通り項目に記載
1 . 名前タグ：「Table_for_アプリ名」
2 . VPCに先ほど作成した：「VPC_for_アプリ名」
右下の「作成」を選択
![image11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/5f9839d8-1dab-ccb5-ff04-d145bf606145.png)

次に作成したルートテーブルに「インターネットゲートウェイをルーティングするというルール」を記載したいと思います。

作成したテーブルを選択した状態で、下のタブの「ルート」を選択し、「ルートの編集」を選択します。
![image12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/064097db-c0a3-fd36-4ded-cd08c272905b.png)

「ルートの追加」ボタンを選択し、以下の通り項目に記載
1 . 送信先：「0.0.0.0/0」
2 . ターゲットの項目を選択し、「Internet Gateway」を選択、先ほど作成したゲートウェイを選択
「ルートの保存」を選択します。
![image13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/0dd2f63e-4638-1b17-3e3c-5d1fda34351f.png)

最後にサブネットとの紐付けを行います。
画面左の「サブネット」を選択して、先ほど作成した「アプリ名-Subnet-1a」を選択した状態で、画面下のルートテーブルタブを選択して、「ルートテーブルの関連付けの編集」ボタンを選択
![image14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/656a8cb3-bbf3-b546-445d-db241d5a6d8b.png)

ルートテーブルIDの項目を選択し、先ほど作成したテーブル「Table_for_アプリ名」を選択します。
右下の「保存」を選択します。
![image15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/83bc6cb1-5cc7-ecb5-0715-67acef564ff6.png)

同様に、もう一つのサブネットの「アプリ名-Subnet-1c」もルートテーブルを紐付けしていきます。
同手順でルートテーブルの関連付けを実施してください。

##5.セキュリティグループの作成

続けてセキュリティグループの設定を行っていきましょう。
画面左の「セキュリティグループ」を選択して、詳細ページ左上の「セキュリティグループの作成」を選択してください。
![image16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/b8bf2bb5-1b3c-b19c-e107-f8601d2b51d9.png)


以下の通り項目に記載
1 . セキュリティグループ名：「アプリ名-SecurityGroup」
2 . 説明：「Security for アプリ名」
3 . VPCに先ほど作成した：「VPC_for_アプリ名」
右下の「作成」を選択
![image17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/c896f56b-a9ae-8813-d7e4-8eb4501e4dd1.png)

作成したセキュリティグループに実際にルールを記載していきます。
先ほど作成したセキュリティグループを選択した状態で、下のタブの「インバウンドのルール」を選択し、
「ルールの編集」を選択します。
![image18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/87242c58-21de-c50a-7479-feb858f0c082.png)

「ルールの追加」ボタンを選択します。
以下の通り項目に記載
1 . タイプ：「SSH」
2 . プロトコル：「TCP」※自動選択
3 . ポート範囲：「22」※自動選択
4 . ソース：「マイIP」（自分のグローバルIPが表示される）
5 . 説明：「任意」（空白でもOKです）

さらにルールを追加するので、再度「ルールの追加」ボタンを選択します。
新しく追加されたレコードに以下の通り記載
1 . タイプ：「HTTP」
2 . プロトコル：「TCP」※自動選択
3 . ポート範囲：「80」※自動選択
4 . ソース：「任意の場所」（0.0.0.0/0, ::/0）
5 . 説明：「任意」（空白でもOKです）
「ルールの保存」を選択します。
![image19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/fcf47033-01c2-d809-2920-c3ca56482b1a.png)

#【 第2章 】RDSの設定
次にRDS（Relational Database Service）の設定、
つまりはデータベースの設定を行っていきます。

##1.サブネットグループの作成

画面左上のサービスを開き、検索欄に「RDS」と入力し、「RDS」を選択します。

画面左の「サブネットグループ」を選択して、
詳細ページ右上の「DBサブネットグループの作成」を選択してください。
![image21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/13d379d6-f7ab-f7d7-0145-7a592e637e2e.png)

以下の通り項目に記載
サブネットグループの詳細
1 . 名前「アプリ名_DB-Subnet-Group」
2 . 説明「DB Subnet Group for アプリ名」
3 . VPC「VPC_for_アプリ名」
サブネットの追加
「このVPCに関連するすべてのサブネットを追加します」ボタンを選択
下部に自動的に二つのサブネットが追加された事を確認
「作成」を選択します。
![image22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/faeb9a3a-8f2d-2f01-faf4-da4d3dabbb70.png)


##2.DBインスタンスの作成

画面左の「データベース」を選択して、
詳細ページ右上の「データベースの作成」を選択してください。
![image23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/12ab4628-d02a-1c4b-378a-ef5f0c5c45d4.png)


**データベース作成方法を選択**
「標準作成」を選択

**エンジンのオプション**
1 . エンジンのタイプ：「好きなDBエンジンを選択」※今回はMySQL
2 . バージョン：「任意のMySQLのバージョンを選択」※今回はMySQL 5.7.26を選択

**テンプレート**
「無料利用枠」を選択

**設定**
1 . DB インスタンス識別子：「アプリ名-mysql」
2 . マスターユーザー名：「お好きな設定で」※今回はroot
3 . マスターパスワード：「お好きな設定で」

**DB インスタンスサイズ**　※初期設定でOK
「標準クラス（mクラスを含む）」を選択

**ストレージ**　※初期設定でOK
1 . ストレージタイプ：「プロビジョンドIOPS(SSD)」
2 . ストレージ割り当て：「20」
3 . プロビジョンド IOPS：「1000」
4 . ストレージの自動スケーリングを有効にする：「チェックを入れる」
5 . 最大ストレージしきい値：「1000」

**可用性と耐久性**　※初期設定でOK
1 . マルチ AZ 配置「スタンバイインスタンスを作成する」を選択

**接続**
1 . Virtual Private Cloud (VPC)「VPC_for_アプリ名」
「追加の接続設定」を選択
2 . サブネットグループ：「アプリ名_db-subnet-group」
3 . パブリックアクセス可能：「なし」を選択
4 . VPC セキュリティグループ：「既存の選択」、「default」を×で消し、「アプリ名-SecurityGroup」を追加
5 . アベイラビリティーゾーン：「指定なし」
6 . データベースポート：「3306」

**データベース認証**　※初期設定でOK
1 . データベース認証オプション：「パスワード認証」にチェック

「追加設定」を選択

**データベースの選択肢**　※データベース名だけ変更
1 . 最初のデータベース名：「アプリ名_production」
2 . DB パラメータグループ：「default.mysql5.7」
3 . オプショングループ：「default:mysql-5-7」

**バックアップ**　※バックアップの保持期間だけ変更
1 . 自動バックアップの有効化：「チェックを入れる」
2 . バックアップ保持期間：「1日間」
3 . バックアップウィンドウ：「設定なしにチェック」
4 . スナップショットにタグをコピー：「チェック」

以下、初期設定でOK

「データベースの作成」を選択してください。

![image25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/cd7307ef-1a67-e3b9-c9b1-678d5a22b140.png)


ステータスが「利用可能」になるまでしばらく待ちましょう。


これで、AWS上に自分の領域を確保し、データベースの作成までが完了しました。
次にEC2と呼ばれる仮想サーバーの構築をしていきましょう！

[その2〜EC2設定編〜](https://qiita.com/Yuki_Nagaoka/items/5be084c6efe1f797fd94)