EC2 + RDS でRails環境構築
ゴール
AWSにて EC2 + RDS でRailsの環境構築を実施
Railsの初期ページの表示を確認できたらゴール
作業手順
- VPC構築
- EC2構築
- EC2にRails導入
- RDS構築
- Railsの初期ページを確認
上記は作業手順
ただし、作業状況次第で、一部前後する可能性あり
VPC構築
-
AWSコンソールからVPCへ
-
VPCウィザードの手順通りVPCを構築(ほぼデフォルト)
「作成するリソース」 項目では 「VPCなど」 を選択
「名前タグ」 のみ「Rails-EC2-RDS-20220725」へ変更
-
VPCの構築を確認
- サブネットが構築されていることも確認
VPCと同時に構築される
EC2構築
- AWSコンソールからEC2選択
- EC2にて各種設定を実施
- 名前とタグ「Rails-EC2-RDS-20220725」
- OSイメージはデフォルト
- EC2にて各種設定を実施
- Railsの初期ページ表示がゴールなので、インスタンスタイプは無料枠の「t2.micro」
- EC2にて各種設定を実施
- キーペアの作成
キーペア名を入力して、キーペアを作成する。
設定はデフォルトのまま
- EC2にて各種設定を実施
- ネットワーク設定
- VPCは先ほど作成した「Rails-EC2-RDS-20220725」を選択
- サブネットには4つのサブネットの中から「Public-1a」を選択
- セキリュティグループも新規作成。「 Rails-EC2-RDS-SG-20220725」
- インバウンドセキリュティグループの設定はデフォルトのまま。(後で追加する)
- EC2にて各種設定を実施
- ストレージ設定・高度な詳細はデフォルト
- 上記の設定でEC2インスタンスを起動
SSHでEC2へ接続
(mr110825は自分のユーザー名です。)
- ドキュメントフォルダに保存したキーペアをホームディレクトリ配下の.sshへ移動する
mv railsec2rds20220725.cer ../.ssh
- .ssh内部のキーペアを確認する
ls -l ./.ssh
-rw-r--r--@ 1 mr110825 staff 1674 7 25 12:04 railsec2rds20220725.cer
- EC2にSSH接続
ssh -i ~/.ssh/railsec2rds20220725.cer ec2-user@13.230.184.55
ssh -i <キーペアの保存場所> ec2-user@<EC2のパブリック IPv4 アドレス>
EC2のインスタンス概要にパブリック IPv4 アドレスが表示されています。
エラー確認
mr110825@Air ~ % ssh -i ~/.ssh/railsec2rds20220725.cer ec2-user@13.230.184.55
The authenticity of host '13.230.184.55 (13.230.184.55)' can't be established.
ED25519 key fingerprint is SHA256:EIh1tBWXXtUw76tuBNMSPNoZ1xBLgjFKDGEZEmU7a90.
This key is not known by any other names
このエラーについては下記を参照
EC2にSSHで接続しようとしたら、秘密鍵のパーミッションエラーが出る
ファイル権限を付与して、再度EC2へログイン
mr110825@Air ~ % chmod 600 ~/.ssh/railsec2rds20220725.cer
mr110825@Air ~ % ssh -i ~/.ssh/railsec2rds20220725.cer ec2-user@13.230.184.55
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
12 package(s) needed for security, out of 22 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-8-225 ~]$
ログインできることを確認。
client_loop: send disconnect: Broken pipe への対応
EC2にログインした状態で一定時間放置すると自動的にログアウトするので、設定を変更する
[ec2-user@ip-10-0-8-225 ~]$ client_loop: send disconnect: Broken pipe
- .sshフォルダ配下にconfigを作成
mr110825@Air ~ % vi ~/.ssh/config
- 下記の設定を追記
Host *
ServerAliveInterval 60
ServerAliveCountMax 60
この設定により1時間は放置しても問題ないようになります。
参考サイト
[ec2-user@ip-10-0-8-225 ~]$
[ec2-user@ip-<EC2のプライベート IPv4 アドレス>]
EC2にログインした後は、プライベート IPv4 アドレスを確認
目的のEC2にログインできているか判断できます
EC2にRails導入
下記が参考記事
Zenn:Rails6 + EC2(Amazon Linux2) + RDS + Puma + Nginx の環境構築
- sudo yum update実行
[ec2-user@ip-10-0-8-225 ~]$ sudo yum update -y
- Railsに必要なパッケージをインストール
sudo yum install git bzip2 readline-devel zlib-devel gcc libyaml-devel libffi-devel gdbm-devel ncurses-devel gcc-c++ mysql-devel ImageMagick ImageMagick-devel
- ruby-build, rbenvのインストール
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
vim ~/.bash_profile
下記を追記
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
source ~/.bash_profile
- Rubyをインストール
インストールに時間がかかるので注意
[ec2-user@ip-10-0-8-225 ~]$ rbenv install 2.7.3
インストールを確認
[ec2-user@ip-10-0-8-225 ~]$ rbenv versions
2.7.3
RDS構築
Rubyのインストールで時間がかかるので、RDS構築を同時並行で実施する
- RDSにてサブネットグループを作成
- AWSコンソールからRDSを選択、サブネットグループを作成する
- 名前:Rails-EC2-RDS-20220725
- 説明:Rails-EC2-RDS-20220725(特に意味はないので、どの構築に利用するか判別のため)
- VPC:今回新規に構築したVPCを選択
- アベイラビティゾーン:1aと1c。VPC構築と同じものを選択
- サブネット:VPC構築時の4つのサブネットより、privateのサブネットを選択
上記の設定でRDSのサブネットグループを作成
- RDSデータベース構築
- 「エンジンのオプション」はmysqlを選択、バージョンも最新
- テンプレートは無料利用枠
- DBインスタンス識別子:rails-ec2-rds-20220725
- マスターユーザー名:root(adminからrootへ)
- マスターパスワード:任意のパスワード
- db.t2.microに設定
- 自動スケーリングは解除(Railsの初期ページのみ表示なので、必要なし)
- VPCは今回構築したものを選択
- VPCセキリュティグループは新規作成「rails_ec2_rds_for_vpc_20220725」
- AZは1aを選択
上記の設定で RDSを構築
EC2にRails導入(初期ページの表示まで)
- bundlerインストール
rbenv install 2.7.3 #既に完了
rbenv rehash
rbenv global 2.7.3
gem install bundler:1.17.1
- nvm, NodeJsのインストール
git clone https://github.com/creationix/nvm.git ~/.nvm
vim ~/.bashrc
以下の記述を追記
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
下記のコマンドを実行
source ~/.bashrc
nvm install v6.17.1
npm install -g yarn
- Railsアプリケーションの配置
下記のコマンド実行
sudo mkdir -p /var/www
sudo chmod -R 755 /var/www
sudo chown -R ec2-user:ec2-user /var/www
cd /var/www
- Railsの構築
# Railsのインストール
gem install rails
# バージョンの確認
rails -v
Rails 7.0.3.1を確認
# Railsアプリ新規作成
rails new rails-test-app -d mysql
- すでにインストールされているmariadbを取り除く
# mariadbを確認
[ec2-user@ip-10-0-8-225 rails-test-app]$ yum list installed | grep mariadb
mariadb-devel.x86_64 1:5.5.68-1.amzn2 @amzn2-core
mariadb-libs.x86_64 1:5.5.68-1.amzn2 installed
# mariadbを削除
[ec2-user@ip-10-0-8-225 rails-test-app]$ sudo yum remove mariadb-libs
- mysqlをインストール可能か確認
[ec2-user@ip-10-0-8-225 rails-test-app]$ yum info mysql
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
エラー: 表示するパッケージはありません
- mysqlのリポジトリ追加
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
- mysqlリポジトリ有効化
# mysql5.7のリポジトリを無効化し、mysql8.0のリポジトリを有効化する
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql80-community
- mysql-community-clientをインストールする
sudo yum install -y mysql-community-client
- インストールされているか確認
mysql --version
エラーを確認
mysqlインストール時にエラー発生
〜
mysql-community-libs-8.0.29-1.el7.x86_64.rpm の公開鍵がインストールされていません
Failing package is: mysql-community-libs-8.0.29-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
- 公開鍵を最新にして再度インストール
# 公開鍵をインストール
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# mysqlをインストール
sudo yum install -y mysql-community-client
# mysqlを確認
mysql --version
上記のエラー対策の参考記事
Qiita:EC2にMySQL8.Xをセットアップする
- RDSと接続
現状では、RDSと接続しようとしてもセキリュティグループで排除されるので、再設定する
- RDS構築時のVPC「rails_ec2_rds_for_vpc_20220725」にて
EC2構築時「Rails-EC2-RDS-SG-20220725」のVPCの接続を許可するよう設定
「rails_ec2_rds_for_vpc_20220725」のインバウンドルールに
「Rails-EC2-RDS-SG-20220725」のセキリュティグループIDを設定している
- RDSへ接続
mysql -h rails-ec2-rds-20220725.crfqcvs3zcns.ap-northeast-1.rds.amazonaws.com -P 3306 -u root -p
# RDSへ接続
mysql -h <RDSのエンドポイント> -P 3306 -u root -p
- RDS構築に設定したパスワードを入力して接続を確認する
[ec2-user@ip-10-0-8-225 rails-test-app]$ mysql -h rails-ec2-rds-20220725.crfqcvs3zcns.ap-northeast-1.rds.amazonaws.com -P 3306 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 88
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
- Railsのconfig設定
Railsのdatabase.ymlを編集する
vim ./config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: rootpass #設定したパスワードを入力
host: rails-ec2-rds-20220725.crfqcvs3zcns.ap-northeast-1.rds.amazonaws.com #RDSのエンドポイント
エラー発生
-
rails s
コマンドで下記のエラー発生。mysqlについて必要なパッケージがない旨のメッセージを確認。
/home/ec2-user/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/gems/bootsnap-1.12.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:
in `require': libmysqlclient.so.18: cannot open shared object file: No such file or directory - /home/ec2-user/.rbenv/versions/2.7.3/lib/ruby/gems/2.7.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.so (LoadError)
- mysql-develを個別でインストール
sudo yum install mysql-devel
- 改めて、
bundle
bundle install --path vender/path
- 必要なgemがない旨のメッセージを確認。
bundle update
bundle install --path vender/path #再度トライ
上記の手順で解決。
- Rails サーバー起動を確認
- rails の初期ページ表示
- ポート3000をEC2のセキリュティグループにて許可する
- Railsサーバー起動
rails s -b 0.0.0.0
- ブラウザのURLにて
<EC2のパブリック IPv4 アドレス> :3000
へ接続する
- エラー発生:ActiveRecord::NoDatabaseError
単純にデータベース作成を忘れていたので、
rails db:create
rails db:migrate
- 再度、Railsサーバー起動
rails s -b 0.0.0.0
表示を確認
EC2でRailsアプリを起動したけどブラウザからアクセスできないとき
rails s -b 0.0.0.0
についての参考記事