Help us understand the problem. What is going on with this article?

【画像付きで丁寧に解説】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 ネットワーク、データベース設定編
その2 EC2設定編
その3 サーバー設定、Railsアプリ配置編
その4 Railsアプリの公開編
その5 ドメイン設定編
その6 http→httpsへSSL化編

【 第1章 】ネットワーク環境設定

初めにVPC(Virtual Private Cloud)の設定を行っていきましょう!
広いAWSという敷地の中で、自分の領域を決めるというイメージです。

1.VPCの作成

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

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

トップ画面より「VPC」を選択して、詳細ページ左上の「VPCの作成」を選択してください。
image02.png

以下の通り項目に記載
1 . 名前タグ:「VPC_for_アプリ名」
2 . IPv4 CIDR ブロック:「10.0.0.0/16」
3 . IPv6 CIDR ブロック:「IPv6 CIDR ブロックなし
4 . テナンシー:「デフォルト」
右下の「作成」を選択
image03.png

2.サブネットの作成

画面左の「サブネット」を選択して、詳細ページ左上の「サブネットの作成」を選択してください。
image04.png

以下の通り項目に記載
1 . 名前タグ:「アプリ名-Subnet-1a」
2 . VPCに先ほど作成した:「VPC_for_アプリ名」
3 . アベイラビリティーゾーン:「ap-northeast-1a」
4 . IPv4 CIDR ブロック:「10.0.0.0/24」
右下の「作成」を選択
image05.png

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

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

画面左の「インターネットゲートウェイ」を選択して、詳細ページ左上の「インターネットゲートウェイの作成」を選択してください。
image06.png

以下の通り項目に記載
1 . 名前タグ:「Gateway_for_アプリ名」
右下の「作成」を選択
image07.png

このゲートウェイをVPCと紐付けます。
作成したゲートウェイを選択した状態で、「アクション」を選択し、「VPCにアタッチ」を選択します。
image08.png

VPCに先ほど作成した「VPC_for_アプリ名」を指定
右下の「アタッチ」を選択
image09.png

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

画面左の「ルートテーブル」を選択して、詳細ページ左上の「ルートテーブルの作成」を選択してください。
image10.png

以下の通り項目に記載
1 . 名前タグ:「Table_for_アプリ名」
2 . VPCに先ほど作成した:「VPC_for_アプリ名」
右下の「作成」を選択
image11.png

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

作成したテーブルを選択した状態で、下のタブの「ルート」を選択し、「ルートの編集」を選択します。
image12.png

「ルートの追加」ボタンを選択し、以下の通り項目に記載
1 . 送信先:「0.0.0.0/0」
2 . ターゲットの項目を選択し、「Internet Gateway」を選択、先ほど作成したゲートウェイを選択
「ルートの保存」を選択します。
image13.png

最後にサブネットとの紐付けを行います。
画面左の「サブネット」を選択して、先ほど作成した「アプリ名-Subnet-1a」を選択した状態で、画面下のルートテーブルタブを選択して、「ルートテーブルの関連付けの編集」ボタンを選択
image14.png

ルートテーブルIDの項目を選択し、先ほど作成したテーブル「Table_for_アプリ名」を選択します。
右下の「保存」を選択します。
image15.png

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

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

続けてセキュリティグループの設定を行っていきましょう。
画面左の「セキュリティグループ」を選択して、詳細ページ左上の「セキュリティグループの作成」を選択してください。
image16.png

以下の通り項目に記載
1 . セキュリティグループ名:「アプリ名-SecurityGroup」
2 . 説明:「Security for アプリ名」
3 . VPCに先ほど作成した:「VPC_for_アプリ名」
右下の「作成」を選択
image17.png

作成したセキュリティグループに実際にルールを記載していきます。
先ほど作成したセキュリティグループを選択した状態で、下のタブの「インバウンドのルール」を選択し、
「ルールの編集」を選択します。
image18.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

【 第2章 】RDSの設定

次にRDS(Relational Database Service)の設定、
つまりはデータベースの設定を行っていきます。

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

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

画面左の「サブネットグループ」を選択して、
詳細ページ右上の「DBサブネットグループの作成」を選択してください。
image21.png

以下の通り項目に記載
サブネットグループの詳細
1 . 名前「アプリ名DB-Subnet-Group」
2 . 説明「DB Subnet Group for アプリ名」
3 . VPC「VPC_for
アプリ名」
サブネットの追加
「このVPCに関連するすべてのサブネットを追加します」ボタンを選択
下部に自動的に二つのサブネットが追加された事を確認
「作成」を選択します。
image22.png

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

画面左の「データベース」を選択して、
詳細ページ右上の「データベースの作成」を選択してください。
image23.png

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

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

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

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

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

ストレージ ※初期設定でOK
1 . ストレージタイプ:「プロビジョンドIOPS(SSD)」
2 . ストレージ割り当て:「100」
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

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

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

その2〜EC2設定編〜

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away