AWS

【初心者向け】AWS(EC2)にRailsアプリを0からデプロイする方法①

何をするのか?

☆Railsで作成したアプリケーションを、AWSのEC2にデプロイします。
以前はHerokuの方にデプロイしていましたが、読み込み速度が遅いと感じたのとAWS周りを触りたいという理由から実施しました。
先駆者たちの方法を色々と調べながら行い、何度かエラーと闘いながらもデプロイまでやり遂げました。
それらの一連の流れをメモ&同じ境遇の人達の助けになればと思います。

今回準備するもの

☆筆者の環境
・Windows10 Home
・AWSの1年間無料枠
・Github(リポジトリにアプリケーションのソースコード有)

1.VPCの作成

VPCとはVirtual Private Cloudの略でAWSという広い領域の中で自分だけの領域をつくるようなイメージです。このVPCの中にサーバーやDBなどを入れていきます。

右上のリージョンを東京にしておきましょう。
①左上の検索バーからVPCと打ち込み出てきたVPCを押下します。

②左の一覧から「VPC」を選択し、右上の「VPCを作成」を押下。

③画像の通りに記載後、右下の「VPCを作成」を押下。タグは特に触れないで大丈夫です(名前タグと同じになっていると思います)。以下補足説明。
・ネームタグ:作成したいVPCの名前(VPC-for-アプリ名)。今回は「VPC-for-portfolio」としています。
・CIDRブロック:このVPCが使用できるIPの範囲を決める(10.0.0.0/28(16IPアドレス) ~ 10.0.0.0/16(65,536IPアドレス)まで選択可)。今回は「IPv4 CIDR ブロック:10.0.0.0/16」と「IPv6 CIDR ブロック:IPv6 CIDR ブロックなし」にします。
・テナンシー: VPCを作る際にハードウェアを占有するかどうかを選択できる(占有すると追加料金がかかるためデフォルト推奨)

2.サブネットの作成

左の一覧で「VPC」を選択した時の下にある「サブネット」を選択した後、右上の「サブネットの作成」を押下します。

①「VPC ID」は選択できるので、一つ前に作成した「VPC_for_アプリ名」を選択します。
今回は「VPC-forportfolio」とします。
②サブネットの名は「アプリ名-Subnet-1a」とします。今回は「portfolio-Sbnet-1a」とします。
③ アベイラビリティーゾーン:「ap-northeast-1a」
④ IPv4 CIDR ブロック:「10.0.0.0/24」
タグは以前と同じで触れないで大丈夫です。
⑤今後使用するRDS用にもう一つ作成します(ここでは詳細は割愛します)。
同様に「サブネットの作成」を選択して、以下の通り項目に記載
⑤-①VPC ID:「VPC-for-アプリ名」→「VPC-for-portfolio」
⑤-② サブネット名:「アプリ名-Subnet-1c」→「portfolio-Subnet-1c」
⑤-③アベイラビリティーゾーン:「ap-northeast-1c」
⑤-④IPv4 CIDR ブロック:「10.0.1.0/24」
右下の「作成」を選択。

以下説明。
・ネームタグ:分かりやすい名前
・VPC:現在作成しているサブネットがどのVPCに属するのかを選択
・アベイラビリティゾーン:アカウント管理者が使用可能なデータセンター(ここではリージョン:東京の「ap-northeast-1a」「ap-northeast-1c」)
・CIDRブロック:前出のIP範囲

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

①左のメニュー一覧から「インターネットゲートウェイ」を選択し、右上の「インターネットゲートウェイの作成」を押下。

②名前タグ:「Gateway_for_アプリ名」→「Gateway_for_portfolio」と記載後右下の「インターネットゲートウェイの作成」を押下。

③このゲートウェイをVPCと紐付けます。作成したゲートウェイを選択した状態で、「アクション」を選択し、「VPCにアタッチ」を選択します。
④VPCに先ほど作成した「VPC_for_アプリ名」を指定します。右下の「アタッチ」を選択して連携。

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

①左の一覧から「ルートテーブル」を選択後に「ルートテーブルの作成」を押下。

②画像の通りに記載します。
②-①名前タグ:「Table_for_アプリ名」→「Table_for_portfolio」
②-②VPCに先ほど作成した:「VPC_for_アプリ名」→「VPC_for_portfolio」
右下の「作成」を選択。

③作成したルートテーブルに「インターネットゲートウェイをルーティングするというルール」を記載します。作成したテーブルを選択した状態で、下のタブの「ルート」を選択し、「ルートの編集」を選択します。

④「ルートの追加」ボタンを選択し、画像の通りに記載。
④-①送信先:「0.0.0.0/0」
④-②ターゲットの項目を選択し、「Internet Gateway」を選択、先ほど作成したゲートウェイを選択「ルートの保存」を選択します。

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

⑥ルートテーブルIDの項目を選択し、先ほど作成したテーブル「Table_for_アプリ名」を選択します。
右下の「保存」を押下します。
⑦同様に、もう一つのサブネットの「アプリ名-Subnet-1c」もルートテーブルを紐付けしていきます。
同手順でルートテーブルの関連付けを実施します(⑤と⑥を実施)。

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

①画面左の一覧から「セキュリティグループ」を選択し、右上の「セキュリティグループの作成」を押下します。

②画像の通りに記載します。
②-①セキュリティグループ名:「アプリ名-SecurityGroup」
②-②説明:「Security for アプリ名」
②-③VPCに先ほど作成した:「VPC_for_アプリ名」
②-④ルールを追加(2回):
タイプ:SSH(22)
プロトコル:TCP(6) ※自動選択
ポート範囲:22 ※自動選択
送信元:自分のグローバルIP/32

タイプ:HTTP(80)
プロトコル:TCP(6) ※自動選択
ポート範囲:80 ※自動選択
送信元: 0.0.0.0/0
右下の「作成」を押下。

以下補足。
・HTTP通信: 普通の通信
・SSH通信: セキュリティが強固な通信

以上で、ネットワークの環境設定は終了となります。
次はEC2の設定になります。