【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その2〜EC2設定編〜】

#AWSにRailsアプリをイチから上げるシリーズ　項目表
|No|タイトル|
|:---|:---|
|その1|[ネットワーク、データベース設定編](https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2)|
|その2|[EC2設定編](https://qiita.com/Yuki_Nagaoka/items/5be084c6efe1f797fd94)|
|その3|[サーバー設定、Railsアプリ配置編](https://qiita.com/Yuki_Nagaoka/items/dbb185feb6d4f051c2f2)|
|その4|[Railsアプリの公開編](https://qiita.com/Yuki_Nagaoka/items/1f0b814e52e603613556)|
|その5|[ドメイン設定編](https://qiita.com/Yuki_Nagaoka/items/3020f02d3fd74c8572a0)|
|その6|[http→httpsへSSL化編](https://qiita.com/Yuki_Nagaoka/items/55ed1610cfc1f59398b1)|

#【 第3章 】EC2の設定
クラウド上に存在する仮想サーバーのEC2（Elastic Compute Cloud）を作っていきましょう！
噛み砕いて説明すると、クラウド上に自分のパソコンを作成するといったイメージです。

##1.インスタンスの作成

画面左上のサービスを開き、検索欄に「EC2」と入力し、「EC2」を選択します。

画面左の「インスタンス」を選択して、
詳細ページ左上の「インスタンスの作成」を選択してください。
![image26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/c304ce35-7f94-78f8-b72a-46a42ccc6ebe.png)


**ステップ 1: Amazon マシンイメージ (AMI)**
今回は一番上ので無料利用枠の「Amazon Linux 2 AMI (HVM), SSD Volume Type」「x86」を選択します。
![image27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/ab265ce2-cfa1-a1ce-4236-0afed36cd287.png)


**ステップ 2: インスタンスタイプの選択**
こちらも無料利用枠の「t2.micro」を選択します。
(※無料枠は、AWSに登録して1年未満のユーザーにのみ与えられる特権です。
ですので、表示されない方も多数いらっしゃることをご了承ください。)
右下の「次のステップ：インスタンスの詳細の設定」を選択してください。
![image28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/f503a173-22b2-3067-7194-8e93bb4cfcfd.png)


**ステップ 3: インスタンスの詳細の設定**
以下の通り項目に記載
1 . インスタンス数：「1」
2 . 購入のオプション：「チェックなし」
3 . ネットワーク：「VPC_for_アプリ名」
4 . サブネット：「アプリ名_Subnet_1a」
5 . 自動割り当てパブリック IP：「サブネット設定を使用（無効）」
6 . 配置グループ：「チェックなし」
7 . キャパシティーの予約：「開く」
8 . IAM ロール：「なし」
9 . シャットダウン動作：「停止」
10 . 終了保護の有効化：「チェック入れる」
11 . モニタリング：「チェックなし」
12 . テナンシー：「共有」
13 . Elastic Inference：「チェックなし」
14 . T2/T3 無制限：「チェックなし」
15 . ファイルシステム：「空白」
右下の「次のステップ：ストレージの追加」を選択してください。
![image29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/f28cfe1a-fa73-1eb6-b2d3-9fa99bbf21b7.png)


**ステップ 4: ストレージの追加**
初期設定のままでOKです。
右下の「次のステップ：タグの追加」を選択してください。

**ステップ 5: タグの追加**
「タグの追加」を選択し、以下の通り項目に記載
1 . キー：「Name」
2 . 値：「アプリ名-instance」
右下の「次のステップ：セキュリティグループの設定」を選択してください。
![image30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/488f24f0-9b9b-466d-9716-5d56377f8181.png)


**ステップ 6: セキュリティグループの設定**
セキュリティグループの割り当て：「既存のセキュリティグループを選択する」にチェック
表示されたセキュリティグループから先ほど作成した「アプリ名-SecurityGroup」にチェック
右下の「確認と作成」を選択してください。
![image31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/e3d2d2b7-4eae-381e-f0d3-df114fae00c5.png)


「起動」ボタンを選択してください。

「既存のキーペアを選択するか、新しいキーペアを作成します。」という画面が表示されます。

上の選択ボックスから「新しいキーペアの作成」を選択
空白のキーペア名に「アプリ名」を入力
「キーペアのダウンロード」を選択

ダウンロードダイアログが開き、「アプリ名.pem」を任意のディレクトリに保存してください。
（Macの方はDownloadディレクトリに保存しておいてください）

「インスタンスの作成」ボタンを選択し、「インスタンスの表示」ボタンを選択してください。
右下の「確認と作成」を選択してください。
![image32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/66d67b7e-1a84-1a29-4579-379452808b15.png)


##2.Elastic IPの作成、紐付け
画面左の「Elastic IP」を選択して、詳細ページ左上の「新しいアドレスの割り当て」を選択してください。
![image33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/081826e8-4bf0-9df7-afe5-5398a4113746.png)


以下の通り項目に記載　※初期設定でOK
1 . スコープ：「VPC」
2 . IPv4 アドレスプール：「Amazonプール」を選択
右下の「割り当て」を選択してください。
![image34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/bcd9f624-2a92-ac83-158e-357d086cb08f.png)


次に割り当てたElastic IPをインスタンスに紐付けします。
先ほど割り当てられたElastic IPを選択した状態で、「アクション」ボタンを選択し、「アドレスの関連付け」を選択します。
![image24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/3c3149a8-eb19-a033-283c-6cc380c68019.png)


以下の通り項目に記載
1 . リソースタイプ：「インスタンス」
2 . インスタンス：「アプリ名-instance」を選択
3 . プライベート IP：「クリックして表示されるIPを選択」
4 . 再関連付け：「チェック入れる」
右下の「関連付け」を選択してください。
![image35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/42b46937-8399-3b6b-4b03-24a4d9d8fd9a.png)


##3.EC2へのログイン

まずは作成したインスタンスが起動している事を確認してください。

作成したインスタンスのインスタンスの状態が**「running」**となっていればOKです。

後ほど使用するので、Elastic IPをメモしておいてください。
![image36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/0f6c868e-a2b6-6a2e-4bca-8d05b72aa9f5.png)


ここからはコンソール画面を使っていきます。

まずは下準備です。

・python
・pip(pythonのパッケージ管理システム)
・awscli(awsをPCのコンソール上から扱うためのもの)

これらをインストールしていきます。

ターミナルから以下のコマンドを実行してください。

```Bash:ローカル環境
$ brew install python
$ sudo easy_install pip
$ sudo easy_install nose
$ sudo easy_install tornado
$ sudo -H pip install awscli --upgrade --ignore-installed six
```

EC2インスタンスへのログイン設定を行っていきましょう

AWSではデフォルトでec2-userという名前のユーザが用意されています。

そこで、以下の手順で進めていきたいと思います。

1 . ec2-userでEC2へログイン
2 . 新たなユーザの作成
3 . 作成したユーザにec2-userと同様の権限を付与
4 . 新たなユーザで再度ログイン


「キーペアのダウンロード」で保存したpemファイルを~/.ssh/へ移動させます。

```Bash:ローカル環境
$ mkdir .ssh/
$ mv Downloads/アプリ名.pem .ssh/
（キーペアをDownloadsディレクトリに保存した場合）
```

キーペアの権限を変更してアクセス権を付与

```Bash:ローカル環境
$ cd .ssh/
$ chmod 600 アプリ名.pem
```

公開鍵を利用してec2-userとしてログイン

```Bash:ローカル環境
$ ssh -i アプリ名.pem ec2-user@Elastic IP
（greetingの場合は、$: ssh -i greeting.pem ec2-user@3.115.68.178となります）

yesかnoを聞かれるので、yesと入力
```

EC2のアスキーアートが表示されれば、ログイン成功です。


続いて新たなユーザを作成し、作成したユーザにマスター権限を与えていきます。

新規ユーザの登録

```Bash:サーバー環境
$ sudo adduser ユーザ名
（著者は：$ sudo adduser yuki）
```

新規ユーザのパスワード登録

```Bash:サーバー環境
$ sudo passwd ユーザ名
```

ここからviエディタを使用していきます。
viコマンドの詳細は以下のページで確認してください。
viコマンド（vimコマンド）リファレンス
https://qiita.com/TD3P/items/0510bee10bcfd88afeee

今回の作業で必要なコマンドは以下です。

- vi ファイル名    ...ファイルをviエディタで表示
- i   ...入力モードに切り替え
- escボタン   ...入力モード終了
- :wq    ...書込み後終了
- :q    ...書込みを行わず終了(quit の意味)

設定を編集

```Bash:サーバー環境
$ sudo visudo

1.rootに関する権限の記述箇所(/root.*ALLで検索可能)
root    ALL=(ALL)       ALL　　を探す。
2.その下に、作成したユーザーに権限を追加する記述（iを入力すれば入力モードに切り替わります）
ユーザ名   ALL=(ALL)       ALL 　を追加する
3.escを押して入力モードを終了
4.:wq で保存&編集完了
```

編集が完了したらユーザの切り替えを行います。

```Bash:サーバー環境
$ sudo su - ユーザ名
```

無事に[ec2-user|が(作成したユーザー名)と切り替わればOKです。

SSH通信によるインスタンスへのログイン

続いては実際にSSHという通信方法を用いてインスタンスにログインしていきます。
流れとしては下記となります。
1 . ローカルで鍵の生成
2 . その鍵をどの通信の認証時に使用するか等を設定
3 . サーバーとの認証処理を行う。
4 . 実際に新ユーザーでログイン

では早速ローカルで鍵の作成から始めていきましょう。
（こちらは**ローカル環境**での作業となるので、新たにコンソール画面を開き作業してください）


公開鍵の作成

```Bash:ローカル環境
$ cd .ssh
$ ssh-keygen -t rsa
--------------------------------
以下のメッセージが表示されるので、「アプリ名_key_rsa」と入力
Enter file in which to save the key ():greeting_key_rsa

何もせずにそのままエンター
Enter passphrase (empty for no passphrase):

何もせずにそのままエンター
Enter same passphrase again:
--------------------------------
```

「アプリ名_key_rsa」と「アプリ名_key_rsa.pub」が生成されたことを確認

```Bash:ローカル環境
$ ls
```

VIMを起動し、設定ファイルを編集する

```Bash:ローカル環境
$ vi config
--------------------------------
#以下を追記

Host アプリ名_key_rsa
  Hostname 前出のElastic IP #自分の設定に合わせて
  Port 22
  User ユーザ名 #先ほどのユーザー名
  IdentityFile ~/.ssh/アプリ名_key_rsa #秘密鍵の設定
--------------------------------
```
:wq で保存&編集完了


著者の設定画面
![image37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/d11b71fd-fa99-05dd-09ac-0d201ec1ad37.png)


鍵の中身をターミナル上に出力、ssh〜localまで全文コピーしておく

```Bash:ローカル環境
$ cat アプリ名_key_rsa.pub
```

上記により、
1.ローカルで鍵の生成
2.その鍵をどの通信の認証時に使用するか等を設定
ここまでが完了しました。
次はサーバー側の作業となります。
（先ほど切り替えたユーザ名のままでの作業となります）

```Bash:サーバー環境
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ vi authorized_keys
--------------------------------
#開いたviに先ほどコピーした鍵の中身を貼り付け
ssh-rsa ~~~~~ .local
--------------------------------
:wq で保存&編集完了
$ chmod 600 authorized_keys
$ exit
$ exit
```

これで新ユーザに権限が付与されたはずです。
ローカルで下記コマンドを入力し、実際にログインできるか試してみましょう。

```Bash:ローカル環境
$ ssh アプリ名_key_rsa
```

ログインできれば、無事ユーザ設定は終了です。

これで自由にサーバーにログイン出来るようになりました！
次からはサーバーの環境構築をやっていきましょう！

[その3〜サーバー設定、Railsアプリ配置編〜](https://qiita.com/Yuki_Nagaoka/items/dbb185feb6d4f051c2f2)