RailsアプリをEC2上にデプロイする方法について解説します。
EC2上にRails+Nginx+Unicornでアプリサーバーとwebサーバーを構築し、
DBはRDS(MySQL)を使用した環境にします。
最近はそのまま上げることなく、
Dockerでコンテナ化するかと思いますが、
まずは基本的な環境を構築するためにこのような構成のデプロイ方法について説明します。
開発環境
使用するツールの各バージョンは以下の通りです。
Name | Version |
Rails |
6.0.3.7 |
Nginx |
1.20.0 |
Unicorn |
5.4.1 |
MySQL |
8.0.23 |
Nodejs | 14.17.0 |
EC2 | t2.micro(インスタンスタイプ) |
RDS | db.t2.micro(インスタンスタイプ) |
全体の手順
- VPC設定
- サブネットの設定
- ルートテーブルとインターネットゲートウェイの設定
VPC設定
AWSでEC2やRDSを使用するためにはVPCを設定する必要があります。
AWS上で様々なツールやサービスを入れて環境を構築するのですが、
それらを入れる自分専用の箱のようなイメージです。
VPCを作成する手順は以下の通りです。
- ダッシュボードからVPCを検索
- 左のメニューからVPCをクリック
- VPCを作成
- 下のように設定します
・
・IPv4 CIDR ブロック:10.0.0.0/16
・IPv6 CIDR ブロック:IPv6 CIDR ブロックなし
・テナンシー:デフォルト - VPCを作成
これでVPCを作成することができました。
サブネットの設定
続いてVPCの中にサブネットを作ります。
サブネットはWebサーバやDBサーバなどの領域を区切るのに必要です。
Webサーバは外部からリクエストが来たらデータを返しますが、
DBサーバにはクライアントから直接アクセスしないようにするのが一般的です。
サブネットを設定することで、
アクセスできる場所とできない場所をはっきり区別できるようになります。
Webサーバのようにアクセスできるサブネットをpublicサブネット、
DBサーバのように外部からはアクセスできないサブネットをprivateサブネットと呼びます。
まずはpublicサブネットを作成します。
- ダッシュボードからVPCを検索
- 左のメニューからサブネットをクリック
- サブネットを作成
- 下のように設定します。
・VPC ID:上で作成したVPC(test-vpc-01)を設定
・サブネット名:public-test-subnet-1a
・アベイラビリティーゾーン:ap-northeast-1a
・IPv4 CIDR ブロック:10.0.10.0/24 - サブネットを作成
privateサブネットも上と同じやり方で設定します。
設定内容は以下の通りで、privateサブネットをもう一つ作りましょう。
・VPC ID:上で作成したVPC(test-vpc-01)を設定
・サブネット名:private-test-subnet-1a
・アベイラビリティーゾーン:ap-northeast-1a
・IPv4 CIDR ブロック:10.0.20.0/24
インターネットゲートウェイとルートテーブルの設定
このままではまだインターネットを経由してアクセスできません。
そのための設定としてインターネットゲートウェイ(IGW)とルートテーブルの設定をします。
ここで詳しく解説しませんが、
インターネットからのアクセス先をどこに向けるかを決める設定になります。
インターネットゲートウェイの設定
まずはIGWを作成します。
手順は以下の通りです。
- ダッシュボードからVPCを検索
- 左のメニューからインターネットゲートウェイをクリック
- インターネットゲートウェイを作成
- 以下のように設定します。
・名前タグ:test-igw - インターネットゲートウェイの作成
続いて、作成したIGWをVPCに適用(アタッチ)します。
- VPCの左メニューのインターネットゲートウェイからtest-igwを選択
- 「アクション」からVPCにアタッチをクリック
- 使用可能なVPCに
- インターネットゲートウェイのアタッチ
これでIGWの設定が完了しました。
ルートテーブルの設定
publicサブネットにインターネットからアクセスが来るようにルートテーブルの設定を行います。
設定手順は以下の通りです。
- 左のメニューからルートテーブルをクリック
- ルートテーブルを作成
- 以下のように設定
・名前 - オプション:public-route
・VPC:test-vpc-01 - ルートテーブルを作成
publicサブネットに対するルートテーブルを作成できました。
これだけでは、まだアクセスすることができません。
最後に以下の設定をします。
- 作成したルートテーブルを選択して、 アクションから「サブネットの関連付けを編集」を選択
- 紐付けるサブネット(public-test-subnet-1a)を選択して保存
- public-routeを選択した状態で、下に表示されている[ルート] から[ルートの編集]をクリック
- ルートを追加(Add route)して以下のように設定。
・送信先:0.0.0.0/0
・ターゲット:IGW - 変更を保存
publicサブネットにデフォルトルートがIGWのルートテーブルを関連づけさせることができました。
つまり、これでpublicサブネットからインターネットに接続できるようになったわけです。
本記事ではここで一旦終わります。
その2に続きます。
次の記事
-
-
RailsをEC2にデプロイする方法 その2
RailsをEC2をデプロイする方法の解説の続きです。 前回は下の記事でVPCやルートテーブルの設定まで行いました。 今回はrailsアプリをデプロイするEC2を構築する手順について解説します。 全体 ...
続きを見る