Rails アプリを EC2 にデプロイしよう！（サーバー構築編）

Rails アプリを Amazon Web Service を使ってデプロイするまでの手順をまとめました。
次の順番でデプロイまで持っていきます。

1, 準備編
2, サーバー構築編
3, 環境構築編
4, デプロイ編

今回は「サーバー構築編」です。
「[準備編](https://qiita.com/tao066/items/9eb25b840694f8805221)」を読んでない方は先に読んでください。

# EC2 インスタンスの作成
EC2とは Elastic Compute Cloud の略で、クラウド上に存在する仮想のサーバーのことです。
サーバーは、サービスを提供する (server) コンピューターのことです。
要するにパソコンを借ります。

早速借りましょう。

1, コンソール画面から検索するなりして「EC2」をクリックしてください。
2, 左のメニューバーから「インスタンス」をクリックしてください。
3, 左上辺りにある[インスタンスの作成]をクリックしてください。

## AMIの選択
最初に「AMIの選択」を行います。
AMIとは Amazon Machine Image の略で、ここでは今作成しようとしているパソコン(EC2)のタイプを選択します。

4, 今回は `Ruby` を使用するので、
「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」
を選択しましょう。
<img width="1320" alt="Elastic Compute Cloud 2［AMI］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/61a72e60-6644-8c19-bca9-359c7cde6ed1.png">
**AMIを間違えるとRubyが動かない**ので注意しましょう。
OSもここで決まります。今回はAmazon Linuxを使用します。
名称が変わっている場合は、次のような説明文が書かれているものを選択してください。
> Amazon Linux AMI は、AWS がサポートする EBS-backed イメージです。デフォルトのイメージには、AWS コマンドラインツール、Python、Ruby、Perl、および Java が含まれます。レポジトリには、Docker、PHP、MySQL、PostgreSQL、およびその他のパッケージが含まれます。

## インスタンスタイプの選択
次に「インスタンスタイプの選択」を行います。
AWSにはさまざまな種類のCPUやメモリ、ストレージなどを組み合わせたインスタンスが存在しています。
今回は具体的なインスタンスタイプの種類について割愛します。

5, 今回は `t2.micro` を使用するので
次のインスタンスタイプを選択してください。
<img width="800" alt="Elastic Compute Cloud 2［Instance Type］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/7785e8be-c167-7b95-1856-822ff52cc10a.png">
今回は「無料枠」を選択しています。
無料枠が表示されない方もいるかもしれませんが、それについてはご了承ください。

## インスタンスの詳細の設定
次は「インスタンスの詳細の設定」を行います。
いろいろ項目がありますが、意味は次の通りです。

|名称|意味|
|---|---|
|インスタンス数|作成するインスタンスの数|
|スポットインスタンスのリクエスト|同じ地域の使用されていないインスタンスを、入札制で使用出来る仕組み。費用削減が期待できる。今回はチェックしない。|
|ネットワーク|使用するVPCを選択する。準備編で作成したVPCをプルダウンで選択しましょう。|
|サブネット|使用するサブネットを選択する。準備編で作成したサブネットをプルダウンで選択しましょう。|
|自動割り当てパブリックIP|インターネットを通じてインスタンスにアクセスするためのIPアドレス。有効化します。|
|配置グループ|プレイスメントグループというグループを作成することで、インスタンス間の通信速度を高速化させることができます。今回は使用しません。|
|キャパシティーの予約|任意の時間やタイミングでキャパシティー（性能）を上げることができます。今回は使用しません。|
|IAMロール|IAMというユーザーの種類別にリソースの使用権限を割り振ったもの。誰がこのインスタンスにアクセス出来て、誰が出来ないかなどを設定できる。今回は設定しない。|
|シャットダウン動作|EC2をシャットダウンした際に削除するのか停止させるのか選択できる。|
|停止 - 休止動作|インスタンスの停止中に「休止状態」が選択できるようにする。|
|終了保護の有効化|インスタンスを誤って削除しないように設定できる。|
|モニタリング|CloudWatchというインスタンス監視サービスを利用するかどうかを選択できる。利用すると追加料金が発生する。|
|テナンシー|ハードウェアを占有するか、それとも他の利用者と共有するかを選択できる。|
|Elastic Inference|説明を割愛します。|
|T2/T3 無制限|説明を割愛します。|

6, 今回は次のように設定します。
<img width="800" alt="Elastic Compute Cloud 2［Config］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/e7fbdc12-c28c-26ae-f6b3-ffd614ddd2af.png">

## ストレージの追加
次は「ストレージの追加」を行います。
ストレージシステム(EC2)の管理に役立つ特別なディレクトリと構成ファイルが格納されている場所で、Windowsで言う所の「Cドライブ」に該当します。

7, 今回は次のように設定します。
<img width="800" alt="Elastic Compute Cloud 2［Storage］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/a25cd0aa-b934-c26a-ea01-235ce4b388b3.png">

## タグの追加
次は「タグの追加」を行います。
ここでEC2に名前をつけましょう。

8, 今回は次のように設定します。
<img width="800" alt="Elastic Compute Cloud 2［Tag］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/87e7e01e-f988-acfe-6101-b5dc8962c75a.png">

## セキュリティグループの設定
最後に「セキュリティグループの設定」を行います。
準備編で設定したセキュリティグループを選択しましょう。

9, 今回は次のように設定します。
<img width="800" alt="Elastic Compute Cloud 2［Security Group］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/7138ff65-9776-1e85-20fc-358cc4675d3e.png">

## インスタンス作成の確認
これまでの手順を振り返って問題がなければ、
右下にある「起動」をクリックしましょう。

クリックすると「既存のキーペアを選択するか、新しいキーペアを作成します。」という画面が出てきます。

## 新しいキーペアの作成
SSH という通信プロトコルを使って安全な通信を行います。
この通信では、ユーザーはプライベートファイルをAWSから保存して、これを使用してインスタンスに接続します。

10, 新しいキーペアを作成して、キーペアをダウンロードしてください。
<img width="600" alt="Elastic Compute Cloud 2［Key Pair］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/2b4cf420-2388-def5-c944-278b3175e0be.png">
**再度ダウンロードすることはできないので注意してください。**
**また、安全な場所に保存するようにしてください。**

これを保存した後、やっとインスタンスを作成することができます。

11, 「インスタンスの作成」をクリックしましょう。
12, 作成ステータスが表示されますが、そのまま「インスタンスの表示」をクリックしましょう。

以下のようにインスタンスが作成されていれば OK です。

<img width="800" alt="Elastic Compute Cloud 2［Instance Index］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/c7531cf3-06af-4688-9955-a6e4c933ead4.png">

# Elastic IP の設定
今回の最後に Elastic IP を設定していきます。

EC2サーバーはインターネットに接続を行う場合、どのサーバーも例外なくパブリックIPというものを持つ必要があります。そして、先ほど作成したEC2インスタンスにも作成時にパブリックIPが自動で割り振られるのですが、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っています。

そこで Elastic IP を使用します。
これは、先に固定のIPアドレスを他に使用されないように押さえてしまい、それをパブリックIPとしてEC2インスタンスに紐付けることで、インスタンスの起動、停止に関わらず常に同じIPで通信を行うことができます。

では早速作成していきましょう。

1, 左のメニューバーから「Elastic IP」をクリックしてください。
2, 右上辺りにある「セキュリティグループの作成」をクリックしてください。
3, 「Amazon の IPv4 アドレスプール」が設定されていると思います。
4, そのまま「割り当て」をクリックしましょう。
<img width="800" alt="Elastic IP［一覧］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/8cfbea8e-f91d-e85b-20de-3f70958481e4.png">
ここでは既に`Name`タグを設定していますが、「タグの管理」をクリックすれば設定できます。

次に、このIPを先ほど作成したインスタンスに割り当てましょう。

5, 右上辺りにある「Action」から「Elastic IP アドレスの関連付け」を選択してください。
 <img width="800" alt="Elastic IP［割り当て01］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/807335f8-f5d6-2742-9a3e-f83785f1def8.png">
6, 先ほど作成したインスタンスとそのパブリックIPを選択して「関連付ける」をクリックしてください。
<img width="800" alt="Elastic IP［割り当て02］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/b00efcc5-aaac-83a5-cf9b-647ca724e2c4.png">

以下の画面のように、インスタンスが関連づけられていれば OK です。
<img width="800" alt="Elastic IP［割り当て03］" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530541/177b88fe-1d77-5a63-25b1-ffe3e72384f0.png">

# 最後に
今回は「サーバー構築編」でした。
次回からやっとコマンドラインを使用することになります（長い！）。

それでは次回「[環境構築編](https://qiita.com/tao066/items/6d1c535b4aec4e2ed448)」お楽しみに。