目的
AWS
のサーバーを利用し、Railsで作成したアプリを公開する。
開発環境
macOS: Big Sur
Rubyバージョン: 2.6.5
Railsバージョン: 6.0.0
前提
-
AWS
にてアカウントが作成されている。
手順
- はじめに
- リージョンの確認
- EC2インスタンスの作成
- AMIの選択
- インスタンスタイプの選択
- キーペアの作成
- サーバー起動の準備
- Elastic IPの作成
- Elastic IPの紐付け
- EC2インスタンスの設定変更
- セキュリティグループのポート設定
- EC2インスタンスへログイン
- 必要なツールのインストール
- パッケージのアップデート
- Node.jsのインストール
- Yarnのインストール
- rbenvとruby-buildのインストール
- Rubyのインストール
はじめに
AWS
のサーバーを利用し、アプリを公開していきますが、今回はまず「AWS内の環境構築」
を行っていきます。
ここで行う設定は、AWSのアカウントを作成した際の一度きりの作業となるので、今後デプロイさせるために同じ作業を行う必要はありません。
リージョンの確認
それでは早速始めていきます!
まずは、AWSアカウントにルートユーザーでログインし、リージョンを確認します。
リージョンが東京となっていない場合は、メニューからアジアパシフィック(東京)ap-northeast-1
を選択します。
EC2インスタンスの作成
続いて、EC2インスタンス
を作成していきます。
ECインスタンス
とは、AWSで仮想マシン
と呼ばれるものです。サーバーを生成するといっても、AWSがすべてのサーバーを物理的に用意しているわけではなく、実際には仮想マシン
と呼ばれるソフトウェアを利用して、仮想的に1つのLinuxサーバーを利用できる仕組みを利用します。
トップページ左上の「サービス」から「EC2」を選択し、オレンジ色の「インスタンスを起動」をクリックします。
AMIの選択
次に、AMI
を選択します。
AMIとは、サーバーのデータをまるごと保存したデータのことです。この中には「OS」などが事前にインストールされているものもあるので、自分でゼロから様々なツールをインストールする手間を削減できます。
今回はAmazon Linux 2 AMI
という、AWSが独自にカスタマイズしたAMIを利用します。
インスタンスタイプの選択
次に、EC2インスタンスのタイプ
を選択します。
EC2ではさまざまなインスタンスタイプが用意されており、CPUやメモリなどのスペックを柔軟に指定することができます。
今回は、無料枠で利用できるt2.micro
を選択して、「確認と作成」をクリックします。
次の画面では、「起動」をクリックします。
キーペアの作成
次に、キーペア
というものをダウンロードします。
これは、インスタンスへログインする際に必要となる秘密鍵
のことです。
これがないとEC2インスタンスにログインできないので、必ずダウンロードしてPCに保存しておきます。
「新しいキーペアの作成」を選択して、キーペア名を入力します。
この時、キーペアの名前にスペースを含まないようにします。
キーペアのダウンロードが完了すると、クリック出来ない状態になっていた「インスタンスの作成」がクリックできるように変更されます。そちらをクリックして、EC2インスタンスを作成しましょう。
完了画面に遷移した後、「インスタンスの表示」をクリックします。
「インスタンス一覧画面」に戻るので、作成した「インスタンスID」をクリックします。
インスタンスの概要が表示されます。作成した「インスタンスID」はこの後使用するため、コピーしてメモアプリなどに控えておきます。
サーバー起動の準備
さきほど作成した「EC2インスタンス」には、作成時にIPアドレスが自動で割り振られています。これを「パブリックIP」と言います。しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っています。IPが変わってしまうということは、設定ファイル等をその都度書き換えなければいけません。これを解決してくれるのが「Elastic IP」です。
それでは実際に「Elastic IPの作成・紐付け」を行っていきます!
Elastic IPの作成
まずはElastic IPを取得するために、左側の選択欄から「Elastic IP」をクリックしましょう。画面の表示が変わったら「Elastic IP アドレスの割り当て」をクリックします。
画面が遷移したら、「Amazon の IPv4 アドレスプール」にチェックが入ってることを確認します。確認後、「割り当て」をクリックします。
Elastic IPの紐付け
「取得したElastic IPアドレス」と「EC2インスタンス」を紐付けします。
まずは、右上にある「アクション」をクリックし、表示されたプルダウンから「Elastic IP アドレスの関連付け」を選択します!
画面が遷移したら、インスタンスにチェックが入っていることを確認しましょう。
次に、その下にあるインスタンスの入力欄をクリックすると、メモしたインスタンスIDが表示されるので、表示されたインスタンスIDを選択します。
「最後に関連付ける」をクリックします。
再びインスタンス一覧画面に戻り、作成したインスタンスの「Elastic IP」が設定されていることを確認します。
EC2インスタンスの設定変更
続いてECインスタンスの設定変更を行っていきます!
立ち上げたばかりのEC2インスタンスはssh
でアクセスすることはできますが、HTTPなどの他の接続は一切つながらないようになっています。そのため、サーバーとして利用するEC2インスタンスは事前にHTTPがつながるようにポート
を開放する必要があります。
ssh
は、離れた場所にあるサーバーの中で作業を行いたい場合に利用します。暗号や認証の技術を利用して、安全にリモートサーバーと通信できます。
ポート
とは、1つのサーバーとクライアントを繋ぐ仕組みです。ポートにはそれぞれ番号が割り振られており、リクエスト側はポート番号を指定すれば該当する番号のポートに接続されます。
ポート番号には「0〜65535」までを使うことができます。しかし、「0〜1023」までの番号はよく使われるもので基本的なインターネット接続などのポートとして予約されており、自由に使うことはできません。
このポートの設定をするためには、セキュリティグループ
という設定を変更する必要があります。
セキュリティグループ
とは、EC2インスタンスが属するまとまりのようなもので、複数のEC2インスタンスのネットワーク設定を一括で行うためのものです。
それでは実際にポートを設定していきます!
セキュリティグループのポート設定
以下の手順で、セキュリティグループのポートを設定します。
まず、インスタンスの概要画面下部にある、「セキュリティ」のタブをクリックします。表示が変わったらセキュリティグループの下にある文字列をクリックします。
すると、インスタンスの属するセキュリティグループの設定画面に遷移します。
次に、「インバウンドルール」をクリックし、右上の「インバウンドのルールの編集」をクリックします。
ページが切り替わるので、「ルールの追加」をクリックし、タイプ「HTTP」のポート範囲「80」を追加します。
最後に、右下の「ルールを保存」を押して、ポートの開放は完了です。
EC2インスタンスへログイン
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成されました。本来はこのec2-userではなく、サービスを稼働させるためにより権限を小さくしたユーザーを作成して運用しますが、ここでは簡易化のためにこの「ec2-user」を使って作業を進めていきます。
それでは「ec2-user」を使ってログインします。
% cd ~
.sshというディレクトリを作成
File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進みます。
% mkdir ~/.ssh
mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動します。
「ダウンロードした鍵の名前」の部分は、Finderでダウンロードフォルダから「〜.pem」というファイルを探し、「〜」の部分の名前に置き換えてください。
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/
% cd .ssh/
pemファイルが存在するか確認します。
% ls
% chmod 600 ダウンロードした鍵の名前.pem
% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスに紐付けたElastic IP
ssh接続(以下のコマンド)を実行すると以下の様なメッセージが表示されることがありますが、「yes」と入力し、実行してください。
% ssh -i aws_key.pem ec2-user@52.68.~~~~~~
The authenticity of host '52.68.~~~~~~ (52.68.~~~~~~)' can't be established.
RSA key fingerprint is eb:7a:bd:e6:aa:da:~~~~~~~~~~~~~~~~~~~~~~~~.
Are you sure you want to continue connecting (yes/no)?
(ここで「yes」を入力し、実行する)
ssh接続は、一定時間操作をせずにいるとタイムアウトしてしまいます。その場合は、「ssh -i 〜」のコマンドを再度実行することでサーバーに接続できます。
必要なツールのインストール
ここからは、EC2インスタンスの環境構築をするためにさまざまなツールをインストールします。
まずはyumコマンド
というコマンドを使ってこのサーバに元々あるプログラムをアップデートします。
yumコマンド
とは、Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンド
を利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。
パッケージのアップデート
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y update
次に、その他環境構築に必要なパッケージを諸々インストールします。
[ec2-user@ip-172-31-25-189 ~]$ 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
-yオプション
とは、yumコマンドのオプションです。
yum install などのコマンドでは、本当にインストールして良いのか [y/n](「Yes or No」の意味)が問われます。
この場合、「Y(Yesのイニシャル)」を入力し、Enterキーを押して実行すればインストールされます。しかし、誤ってYキー以外を押してしまう場合もあります。 ここでは確実にインストールするために、あらかじめオプションで「-y」を設定する事で「すべての問いにYesで自動的に答える」という設定してコマンドを実行しています。
無事に入力画面に戻れば、インストール完了です。
Node.jsのインストール
続いて、EC2上でJavaScriptを動かすためにNode.js
というものをインストールします。
Node.js
とは、サーバーサイドで動くJavaScriptのパッケージのことです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejs
これでNode.js
のインストールができました!
Yarnのインストール
Railsのバージョンが6.0以降のアプリケーションを動かすために、Yarn
をインストールします。
Yarn
とは、Railsに搭載されているJavaScriptのパッケージを管理するためのパッケージマネージャーです。
ターミナルで以下のコマンドを実行してインストールします。
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install wget
[ec2-user@ip-172-31-25-189 ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install yarn
Yarn
のインストールは以上です!
rbenvとruby-buildのインストール
続いては、rbenv
とruby-build
をインストールします。
これらはRubyをインストールする前に、インストールする必要があり、Rubyのバージョンを管理する際に組み合わせて使うツールになります。
ターミナルで以下のコマンドを実行してインストールします。
gitからrbenv
をクローンします。
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
パスを通す(どのディレクトリからもアプリケーションを呼び出せる状態にする)ために必要なコマンドです。
[ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
[ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
設定したパスを読み込みます。
[ec2-user@ip-172-31-25-189 ~]$ source .bash_profile
gitからruby-build
をクローンします。
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash
これでrbenv
とruby-build
のインストールは完了です!
Rubyのインストール
最後はRuby
をインストールします。
今回は「2.6.5」をインストールしていきます。
Ruby 2.6.5のバージョンをインストール
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.6.5
EC2インスタンス内で使用するRubyのバージョンを決める
[ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.6.5
rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash
Rubyのバージョンを確認
[ec2-user@ip-172-31-25-189 ~]$ ruby -v
以上でRuby
のインストールが完了しました!
最後に
かなり長くなりましたが、以上で初期設定は完了です。
次回はデータベースの設定です。【AWS】EC2でのデプロイ(データベースの設定)
では。