EC2環境構築【Rails編】
Ruby on Railsを利用したいけど、色々と通過点が多かったり、構築が難しすぎてできない、と思ったことはありませんか。確かに簡単ではありませんが、言葉の意味や仕様を理解する中で徐々にできるようになっていきます。その中でもAWSは、初心者でもある程度利用しやすい仕様になっています。今回はAWSにてRails利用環境を構築していきます。
■Ruby on Railsとは
Ruby on Rails(ルビーオンレイルズ)は、Webアプリケーション開発用のフレームワークです。アプリを作成するのに必要な機能や構造がひとつにまとまったもので、フレームワークを利用することにより開発者は必要最低限のプログラムを書くだけになり、作業効率が上がり、負担を大きく減らすことができます。
■Ruby on Railsの特徴(基本理念)
・MVCアーキテクチャ
モデル(Model)、ビュー(View)、コントローラー(Controller)の3つがそれぞれの機能を果たしながら開発していく考え方で、コントローラーはユーザーからの情報に基づき、モデルとビューを制御します。機能によって分担して開発が行えるので、メンテナンスのし易さ、業務の効率化において利点があります。分割することにより、コードの再利用性を高めることもできます。
・同じことを繰り返さない
Ruby on Railsでは、一度書いたコードや内容は何度書かなくても済むように設計されており、それはDRY原則(Don’t Repeat Yourself)とも言われています。記述個所を少なくすることで、仕様変更時などにおける修正漏れなどを防ぐことができます。
・設定より規約
Ruby on Railsが持つ規約に沿ってコーディングをすることで、より効率的に開発ができるという考え方です。例えば、「apple」というデータベースを使用する場合、Railsが規約に沿って自動で判断し、appleという名前のモデルを使用します。これにより開発者はデータベースとモデルクラスを紐づける設定ファイルを記述せずに利用することができます。
■EC2環境構築
Railsをデプロイするために、AWSのEC2インスタンス環境構築をする必要があります。
【構築する環境を理解する】
構築に必要な環境は一言でいうと「Web3層構成」です。それぞれの層が役割を担うのに必要なソフトウェアをインストールし、それらを関連付けることで構築していきます。以下の3つの層で成り立っています。
- ・Webサーバー層
- Webブラウザからのアクセス要求を処理する層を示します。必要に応じて、Webアプリケーション層へリクエストを要求します。
- ・Webアプリケーション層
- Webサーバーから受けたリクエストをもとに、バックエンドで動作するJavaやPHP、Rubyなどを実行したり、データベースへのアクセスや処理を行います。
- ・データベース層
- 入力したデータやアプリケーションで参照するデータを補完する役割持ちます。
■AWSにてRailsを動作させるために、実際に必要な手順
【まず下準備!1~5】
1、VPCの作成
- ・ネームタグ:任意の名前
- ・CIDRブロック:このVPCが使用できるIPの範囲を指定
- ・テナンシー:VPC作成時にハードウェアを占有有無を選択(占有する場合は追加料金)
- ・ネームタグ:任意の名前
- ・VPC:現在作成しているサブネットがどのVPCに属しているかを選択
- ・アベイラビリティゾーン:EC2作成時に選択したリージョンから指定
- ・CIDRブロック:VPC作成時に指定したIP範囲
- ・ネームタグ:任意の名前
- ・VPCにアタッチ:作成したVPCと紐づけ
- ・ネームタグ:任意の名前
- ・VPC:作成したVPCと紐づけ
- ・ネームタグ:セキュリティグループを認識するタグ名
- ・グループ名:セキュリティグループの名前(ネームタグと同じでも可)
- ・説明:インバウンドルルールかアウトバウンドルールかの選択
- ・VPC:セキュリティグループを適応させるVPC
- ●インスタンスの仕様
- ・DBインスタンスのクラス:t2_micro
- ・マルチAZ配置:いいえ
- ※上記は別のものを選択した場合、無料枠での使用が不可。
- ・AMI選択:OSのタイプ選択
- ・インスタンスタイプ選択:「無料枠」にて選択(登録から1年以上経過している場合は表示なし)
- ・インスタンス:作成したElastic IPを紐づけるインスタンスを選択
- ・使用するSSH通信の仕様に従って設定を実施
- ・yum:設定ファイルのインストール
- ・node.js:サーバーサイドで動作するJavaScriptのインストール
- ・rbenv:複数のRubyのバージョン管理などを可能とするツールのインストール
- ・ruby-build:Rubyをインストールするためのrbenvプラグインをインストール
- ・Ruby:Rubyのインストール
- ・gitに関する設定ファイルを作成
- ・Railsアプリを配置するディレクトリを作成
- ・公開鍵を使用し、gitと接続させる
- ・git cloneの実行
- ・Unicornのインストール
- ・Nginxのインストール
- ・MySQLのインストール
- ※権限が原因で起動ができない場合があるため、その場合は関連ファイルの権限変更を実施。
- ・Unicornの起動確認
- ・Nginxの再起動
- ・プリコンパイルが出来ていない可能性がある場合は、Unicornの停止→rake assents:precompile RAILS_ENV=productionの実行→Unicornの再起動
VPCとは「Virtual Private Cloud」の略で、AWSの中に自分の使用領域を設定するといったイメージです。
2、サブネットの作成
サブネットは一言でいうと「ネットワークグループ」です。外部接続グループや内部接続グループなど、同じVPCの中でも異なるいくつかのグループを作成します。
3、インターネットゲートウェイの作成
その名の通り「インターネットの入口」になります。1で作成したVPCはあくまでAWS内での占有領域のため、外部と接続を行う際はその領域から出ていかなければなりません。その窓口となるのがインターネットゲートウェイです。
4、ルートテーブルの作成
ルートテーブルとは、通信に関するルールブックのような概念です。サブネット単位で設定が可能なため、状況により通信を分ける際はここで設定します。
5、セキュリティグループの作成
セキュリティに関するルールを記載したものを設定します。適応されたグループごとに通信の許可/拒否を設定できます。
【データベース・サーバー構築!6~8】
6、RDSインスタンスの作成
RDSは「Relational Database Service」の略で、AWSにおいてのデータベースのことです。AWSでDBを利用する場合、EC2インスタンスにDBのシステムそのものをインストールするか、RDSを利用するかの2択から選択できます。EC2インスタンスにインストールする場合は、この設定は不要になります。
7、EC2インスタンスの作成
EC2とは「Elastic Compute Cloud」の略で、AWSにおけるクラウド上の仮想サーバー本体にあたります。
8、Elastic IPの作成、紐づけ
パブリックIPの変動による欠点を解消するためElastic IPを作成し、それをパブリックIPとしてEC2インスタンスに紐づけます。
【EC2インスタンスへデプロイ!9~15】
9、SSH通信によるインスタンスへのログイン
SSH通信とは「Secure Shell」の略で、セキュリティの強固な通信方法のことです。SSH通信を用いた情報は暗号化され、内容が簡単に外部に出ない仕組みになっています。
10、EC2インスタンスの環境構築
作成したインスタンス内でRubyやその他の環境が動くように設定していきます。
11、gitとの連携、アプリのクローン
Rubyの実行環境が整ったので、Railsアプリをgitからクローンし、EC2インスタンス内に配置します。
12、Unicornの設定
Unicornとは、アプリケーションサーバーの一種で、アプリ本体を格納するためのサーバーです。
13、Nginxの設定
NginxはWebサーバーにあたり、受付窓口の役割をになっています。
14、MySQLの設定
入力したデータやアプリケーションで参照するデータを補完する役割をするデータベースです。
15、Nginxの起動
設定したNginxをsudoにて起動します。もし起動がうまくできない場合は、以下を確認します。
■上記でもうまく動作しない場合
環境構築は簡単ではありません。使用している機器や環境によって多少動作が変わったり、うまく操作できない場合があります。その場合は原因がどこか探るためにひとつづつ精査しなければなりません。大変ですが、再度ひとつひとつ設定などを確認していきましょう。
■あとがき
AWSは本当にサービスが豊富です。豊富ゆえに、初学者のエンジニアが手を出すと、何から手を付けて良いのか分からないという側面もあります。
AWSは無料枠内での使用であれば1年間の無料期間が付与されますので、この機会にAWSへのデプロイに挑戦してみるのもよいと思います。