LoginSignup
13
5

EC2(AmazonLinux2)環境でのRails6.0/MySQL構築手順

Last updated at Posted at 2021-12-21

はじめに

本記事ではAWSのEC2,VPC,RDSを用いた基本的な構成でRailsアプリケーションを動作するまでの手順を記述しています。
現時点では最終的に http://パブリックIP:3000でアクセスできるまでの手順となっています。
本番を想定した設定に関しては随時記載していきます。

VPC作成

1 VPCダッシュボードを開き、「VPCを作成」を押します。
スクリーンショット 2021-12-20 23.01.30.png

「VPC作成」画面から名前タグ、IPV4CIDRブロックを入力し、「VPCを作成」を押してください。

  • 名前タグ: rails-vpc
  • IPv4 CIDR: 10.0.0.0/16

スクリーンショット 2021-12-20 23.05.39.png

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)

IPv4 用の VPC とサブネットのサイズ設定

サブネットの作成

パブリックサブネットの作成

VPCダッシュボードを開き、「サブネット」画面から「サブネットを作成」を押します。
スクリーンショット 2021-12-21 19.23.49.png

「サブネットを作成」画面から必須入力項目を設定し、「サブネットを作成」を押します。

  • VPC ID: 先ほど作成したVPC
  • サブネット名: rails-public-subnet01
  • アベイラビリティーゾーン: ap-northeast-1a
  • IPv4 CIDR ブロック: 10.0.10.0/24

スクリーンショット 2021-12-21 19.27.49.png
スクリーンショット 2021-12-21 19.32.59.png

プライベートサブネットの作成

VPCダッシュボードを開き、「サブネット」画面から「サブネットを作成」を押します。
スクリーンショット 2021-12-21 19.23.49.png
「サブネットを作成」画面から必須入力項目を設定し、「サブネットを作成」を押します。

  • VPC ID: 先ほど作成したVPC
  • サブネット名: rails-private-subnet01
  • アベイラビリティーゾーン: ap-northeast-1a
  • IPv4 CIDR ブロック: 10.0.20.0/24

スクリーンショット 2021-12-21 19.27.49.png
スクリーンショット 2021-12-21 21.49.56.png

インターネットゲートウェイにアクセスできるよう設定する

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

1 「インターネットゲートウェイ」から「インターネットゲートウェイの作成」を押します。
スクリーンショット 2021-12-21 22.46.48.png

2 「インターネットゲートウェイの作成」画面にて名前タグを設定し、「インターネットゲートウェイの作成」を押します。
スクリーンショット 2021-12-21 22.48.15.png

3 作成されたインターネットゲートウェイを選択し、「VPCにアタッチ」を選択します。
スクリーンショット 2021-12-21 22.53.30.png
「VPCにアタッチ」画面にて作成したVPCを選択し、「インターネットゲートウェイにアタッチ」を押します。
スクリーンショット 2021-12-21 22.52.44.png

パブリックサブネット用のルートテーブルの設定

1 作成したパブリックサブネットに紐づいているルートテーブルを押します。
スクリーンショット 2021-12-21 22.59.39.png

2 「ルートテーブル」画面に遷移するので「ルート編集」を押します。
スクリーンショット 2021-12-21 23.01.51.png

3 「ルート編集」画面にて作成した「インターネットゲートウェイ」を設定します。

  • 送信先: 0.0.00/0
  • ターゲット: 作成したインターネットゲートウェイ

スクリーンショット 2021-12-21 23.06.03.png

プライベートサブネット用のルートテーブルの設定

1 「ルートテーブル」から「ルートテーブルを作成」を押します。
スクリーンショット 2021-12-21 23.08.58.png

2 「ルートテーブルを作成」画面にて対象項目を設定し、「ルートテーブルを作成」を押します。

  • 名前: rails-private-subnet01
  • VPC: 作成したVPC

スクリーンショット 2021-12-21 23.10.27.png

3 「サブネット」から作成したプライベートサブネット選択し、ルートテーブルの関連付けを編集します。
スクリーンショット 2021-12-21 23.49.14.png

4 「ルートテーブルの関連付けを編集」画面から作成したプライベートサブネット用のルートテーブルを選択し、「保存」を押します。
スクリーンショット 2021-12-21 23.51.19.png

EC2作成

1 EC2ダッシュボードから「インスタンスを起動」を押します。

スクリーンショット 2021-12-21 22.08.37.png

2 「AMIの選択」画面にて 「Amazon Linux2」を選択し、「選択」を押します。
スクリーンショット 2021-12-21 22.10.04.png

3 「インスタンスの設定」画面にて、ネットワーク、サブネットに作成したVPC,パブリックサブネットを設定します。
スクリーンショット 2021-12-21 22.14.50.png

4 「ストレージの追加」画面では特に変更は不要のため「次のステップ:タグの追加」を押します。
スクリーンショット 2021-12-21 22.23.38.png

5 「タグの追加」画面では、Nameタグを追加し、「次のステップ:タグの追加」を押します。スクリーンショット 2021-12-21 22.26.08.png

6 「セキュリティグループの設定」画面にて、 SSH,HTTPのプロトコルの通信できるよう新しくセキュリティグループを作成設定します。
スクリーンショット 2021-12-21 22.29.58.png

7 「インスタンス作成の確認」画面にて設定内容を確認し、「起動」を押してください。
スクリーンショット 2021-12-21 22.34.09.png

その後、「既存のキーペアを選択するか、新しいキーペアを作成します。」の画面が表示されるので、すでに作成されている場合は作成したキーペアを設定して 「インスタンスの作成」を押してください。
スクリーンショット 2021-12-21 22.36.03.png

「インスタンス」画面にて、「インスタンスの状態」が「実行中」であり、「ステータスチェック」が「2/2のチェックに合格しました」と表示されましたら作成完了です。

EIPの作成

1 「Elastic IPアドレス」から「Elastic IPアドレスを割り当てる」を押します。
スクリーンショット 2021-12-21 23.56.14.png

2 「Elastic IPアドレスを割り当てる」画面から「割り当て」を押します。

  • タグ: rails-webserver-eip
    スクリーンショット 2021-12-22 0.02.50.png

3 作成されたEIPを選択し「Elastic IPアドレスの関連付け」を選択します。
スクリーンショット 2021-12-22 0.05.33.png

4 「Elastic IPアドレス関連付け」画面から対象のEC2インスタンスを選択し、「関連付ける」を押します。
スクリーンショット 2021-12-22 0.05.39.png

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

スクリーンショット 2021-12-22 0.16.52.png

プライベートサブネットの作成

VPC: 作成したVPC
サブネット名: rails-private-subnet02
アベイラビリティーゾーン: ap-northeast-1c
IPv4 CIDR: 10.0.40.0/24

スクリーンショット 2021-12-22 0.21.01.png

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

1 RDSから「サブネットグループ」を押し、「DBサブネットグループを作成」を押します。
スクリーンショット 2021-12-22 0.24.11.png

2  「DBサブネットグループ」から対象の入力項目を設定します。

  • 名前: RailsSubnetGroup
  • 説明: RailsSubnetGroup
  • VPC: 作成したVPC
  • アベイラビリティゾーン: ap-northeast-1a, ap-northeast-1c
  • サブネット: 各AZのパブリックサブネット

スクリーンショット 2021-12-22 0.27.35.png
スクリーンショット 2021-12-22 0.27.42.png

DBの作成

1 データベースから「データベースの作成」を押します。
スクリーンショット 2021-12-22 0.33.22.png

2 DB作成画面から対象項目を設定します。

  • エンジンのオプション: MySQL
  • ユースケース: 開発/テスト
  • DBインスタンスのクラス: db.t2.micro
  • DBインスタンス識別子: rails-db
  • マスターユーザー名: 任意のユーザー名
  • パスワード: 任意のパスワード
  • VPC: 作成したVPC
  • サブネットグループ: 作成したサブネットグループ
  • アベイラビリティーゾーン: ap-northeast-1a
  • データベース名: 任意のDB名

セキュリティーグループの修正

1 作成したDBの「VPCセキュリティグループ」を押します。
スクリーンショット 2021-12-22 1.04.42.png

2 RDSセキュリティグループの修正

  • Nameタグ: RailsDB
  • インバウンドルール
    • タイプ: MYSQL/Aurora
    • ソース: Webサーバーのセキュリティグループ
      スクリーンショット 2021-12-22 1.09.25.png

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

環境変数の設定

.bash
export DATABASE_DEV_USER="ユーザー名"
export DATABASE_DEV_PASSWORD="パスワード"
export DATABASE_DEV_HOST="RDSのエンドポイント"
database.yml
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サーバーのセキュリティグループのインバウンドルールにルールを追加します。
スクリーンショット 2021-12-22 3.31.31.png

起動

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をインストールする際にエラー

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5