はじめに
本記事ではAWSのEC2,VPC,RDSを用いた基本的な構成でRailsアプリケーションを動作するまでの手順を記述しています。
現時点では最終的に http://パブリックIP:3000
でアクセスできるまでの手順となっています。
本番を想定した設定に関しては随時記載していきます。
VPC作成
1 VPCダッシュボードを開き、「VPCを作成」を押します。
「VPC作成」画面から名前タグ、IPV4CIDRブロックを入力し、「VPCを作成」を押してください。
- 名前タグ: rails-vpc
- IPv4 CIDR: 10.0.0.0/16
VPCを作成する際、プライベートIPv4アドレスの範囲は下記範囲内で作成します。
クラス | 範囲 |
---|---|
クラスA | 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/16) |
クラスB | 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/16) |
クラスC | 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16) |
サブネットの作成
パブリックサブネットの作成
VPCダッシュボードを開き、「サブネット」画面から「サブネットを作成」を押します。
「サブネットを作成」画面から必須入力項目を設定し、「サブネットを作成」を押します。
- VPC ID: 先ほど作成したVPC
- サブネット名: rails-public-subnet01
- アベイラビリティーゾーン: ap-northeast-1a
- IPv4 CIDR ブロック: 10.0.10.0/24
プライベートサブネットの作成
VPCダッシュボードを開き、「サブネット」画面から「サブネットを作成」を押します。
「サブネットを作成」画面から必須入力項目を設定し、「サブネットを作成」を押します。
- VPC ID: 先ほど作成したVPC
- サブネット名: rails-private-subnet01
- アベイラビリティーゾーン: ap-northeast-1a
- IPv4 CIDR ブロック: 10.0.20.0/24
インターネットゲートウェイにアクセスできるよう設定する
インターネットゲートウェイの作成
1 「インターネットゲートウェイ」から「インターネットゲートウェイの作成」を押します。
2 「インターネットゲートウェイの作成」画面にて名前タグを設定し、「インターネットゲートウェイの作成」を押します。
3 作成されたインターネットゲートウェイを選択し、「VPCにアタッチ」を選択します。
「VPCにアタッチ」画面にて作成したVPCを選択し、「インターネットゲートウェイにアタッチ」を押します。
パブリックサブネット用のルートテーブルの設定
1 作成したパブリックサブネットに紐づいているルートテーブルを押します。
2 「ルートテーブル」画面に遷移するので「ルート編集」を押します。
3 「ルート編集」画面にて作成した「インターネットゲートウェイ」を設定します。
- 送信先: 0.0.00/0
- ターゲット: 作成したインターネットゲートウェイ
プライベートサブネット用のルートテーブルの設定
1 「ルートテーブル」から「ルートテーブルを作成」を押します。
2 「ルートテーブルを作成」画面にて対象項目を設定し、「ルートテーブルを作成」を押します。
- 名前: rails-private-subnet01
- VPC: 作成したVPC
3 「サブネット」から作成したプライベートサブネット選択し、ルートテーブルの関連付けを編集します。
4 「ルートテーブルの関連付けを編集」画面から作成したプライベートサブネット用のルートテーブルを選択し、「保存」を押します。
EC2作成
1 EC2ダッシュボードから「インスタンスを起動」を押します。
2 「AMIの選択」画面にて 「Amazon Linux2」を選択し、「選択」を押します。
3 「インスタンスの設定」画面にて、ネットワーク、サブネットに作成したVPC,パブリックサブネットを設定します。
4 「ストレージの追加」画面では特に変更は不要のため「次のステップ:タグの追加」を押します。
5 「タグの追加」画面では、Nameタグを追加し、「次のステップ:タグの追加」を押します。
6 「セキュリティグループの設定」画面にて、 SSH,HTTPのプロトコルの通信できるよう新しくセキュリティグループを作成設定します。
7 「インスタンス作成の確認」画面にて設定内容を確認し、「起動」を押してください。
その後、「既存のキーペアを選択するか、新しいキーペアを作成します。」の画面が表示されるので、すでに作成されている場合は作成したキーペアを設定して 「インスタンスの作成」を押してください。
「インスタンス」画面にて、「インスタンスの状態」が「実行中」であり、「ステータスチェック」が「2/2のチェックに合格しました」と表示されましたら作成完了です。
EIPの作成
1 「Elastic IPアドレス」から「Elastic IPアドレスを割り当てる」を押します。
2 「Elastic IPアドレスを割り当てる」画面から「割り当て」を押します。
3 作成されたEIPを選択し「Elastic IPアドレスの関連付け」を選択します。
4 「Elastic IPアドレス関連付け」画面から対象のEC2インスタンスを選択し、「関連付ける」を押します。
5 パブリックIPv4アドレスにてSSH接続ができるか確認します。
ssh -i 'SSHキー' ec2-user@IPアドレス
RDSの作成
すでに作成したサブネットを参考に別のリージョンにサブネットを作成します。
パブリックサブネットの作成
VPC: 作成したVPC
サブネット名: rails-public-subnet02
アベイラビリティーゾーン: ap-northeast-1c
IPv4 CIDR: 10.0.30.0/24
プライベートサブネットの作成
VPC: 作成したVPC
サブネット名: rails-private-subnet02
アベイラビリティーゾーン: ap-northeast-1c
IPv4 CIDR: 10.0.40.0/24
サブネットグループの作成
1 RDSから「サブネットグループ」を押し、「DBサブネットグループを作成」を押します。
2 「DBサブネットグループ」から対象の入力項目を設定します。
- 名前: RailsSubnetGroup
- 説明: RailsSubnetGroup
- VPC: 作成したVPC
- アベイラビリティゾーン: ap-northeast-1a, ap-northeast-1c
- サブネット: 各AZのパブリックサブネット
DBの作成
2 DB作成画面から対象項目を設定します。
- エンジンのオプション: MySQL
- ユースケース: 開発/テスト
- DBインスタンスのクラス: db.t2.micro
- DBインスタンス識別子: rails-db
- マスターユーザー名: 任意のユーザー名
- パスワード: 任意のパスワード
- VPC: 作成したVPC
- サブネットグループ: 作成したサブネットグループ
- アベイラビリティーゾーン: ap-northeast-1a
- データベース名: 任意のDB名
セキュリティーグループの修正
1 作成したDBの「VPCセキュリティグループ」を押します。
2 RDSセキュリティグループの修正
Railアプリケーションのセットアップ
# 既存のプログラムアップデート
sudo yum -y update
# 環境構築に必要なパッケージインストール
sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl wget
# nodenvのインストール
git clone git://github.com/nodenv/nodenv.git ~/.nodenv
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(nodenv init -)"' >> ~/.bash_profile
# シェルの再起動
exec $SHELL -l
# node-buildのインストール
git clone https://github.com/nodenv/node-build.git ~/.nodenv/plugins/node-build
# nodeのインストール
nodenv install 15.14.0
nodenv rehash
nodenv global 15.14.0
# yarnのインストール
sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
sudo yum -y install yarn
# rbenvのインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source .bash_profile
# ruby-buildのインストール
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv rehash
# Rubyのインストール
rbenv install 3.0.1
rbenv global 3.0.1
rbenv rehash
# Rubyのバージョン確認
ruby -v
# MariaDBのアンインストール
yum list installed | grep mariadb
sudo yum remove mariadb-libs.x86_64
# MySQL8.0のリポジトリ追加
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# MySQL8.0リポジトリの有効可
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql80-community
# クライアントツールのインストール
sudo yum install -y mysql-community-client mysql-devel
# MySQLのバージョン確認
mysql --version
# RDSの接続確認
mysql -h rdsのエンドポイント -u root -p
Gitの設定
# GitHubの設定
ssh-keygen
# 鍵が生成されたか確認
ls -la ~/.ssh
# 公開鍵の表示、値をGitHubにアクセスし登録を行う
cat ~/.ssh/id_rsa.pub
# Railsアプリケーションの取得
git clone 対象リポジトリのgiturl
環境変数の設定
export DATABASE_DEV_USER="ユーザー名"
export DATABASE_DEV_PASSWORD="パスワード"
export DATABASE_DEV_HOST="RDSのエンドポイント"
default: &default
adapter: mysql2
encoding: unicode
host: <%= ENV['DATABASE_DEV_HOST'] %>
username: <%= ENV['DATABASE_DEV_USER'] %>
password: <%= ENV['DATABASE_DEV_PASSWORD'] %>
初期セットアップ
# 環境の設定
bin/rails db:environment:set RAILS_ENV=development
# DB作成
bundle exec rails db:create
bundle exec rails db:migrate
bundle exec rails db:seed
3000番ポートの解放
Railsサーバーで使用するポート番号を解放します。
EC2Webサーバーのセキュリティグループのインバウンドルールにルールを追加します。
起動
bundle exec rails s -b 0.0.0.0
下記URLにアクセスにRailsアプリケーションが起動することを確認します。
参考URL
EC2インスタンスにRails + MySQL環境構築
【AWS EC2】Amazon Linux2にMySQLのclientだけをインストールしてRDSに接続する方法
【AmazonLinux2】MySQL2のGemをインストールする際にエラー