[Chapter-2]EC2の設定

| タイトル |
|:-|
|  [[Chapter-1]VPCの設定](https://qiita.com/Jackson123/items/c7b0a7a6ae659fe48a3b) |
|  [[Chapter-2]EC2の設定](https://qiita.com/Jackson123/items/53cc698b1b7cfdbfe368) |
| [[Chapter-3]EC2のサーバー環境構築](https://qiita.com/Jackson123/items/821d89184d87b6020df5)  |
|  [[Chapter-4]EC2にRailsアプリの配置](https://qiita.com/Jackson123/items/e91eec2f76774717bdee) |
|  [[Chapter-5]ロードバランサー(ELB)の作成](https://qiita.com/Jackson123/items/a739525d0084747405d7) |
| [[Chapter-6]ACM(AWS Certificate Manager)でSSL証明書を取得](https://qiita.com/Jackson123/items/eb586c33fe3c5b7d9dad)  |
|  [[Chapter-7]Route53の設定](https://qiita.com/Jackson123/items/6b41ebde0eec072a283e) |
|  [[Chapter-8]https化に向けたロードバランサーの設定](https://qiita.com/Jackson123/items/d6819d3dbf304aebd459) |
|  [[Chapter-9]https化によるRoute53の設定](https://qiita.com/Jackson123/items/9ceae188a53f646e55e9) |
|  [[Chapter-10]https化によるNginxの設定](https://qiita.com/Jackson123/items/255263a260f7a833bf1d) |
##はじめに
今回はEC2の設定をします。
画像なしで説明しますのであしからず。

手始めにAWSのサービス検索欄から「EC2」と検索し「EC2」を選択します。

##インスタンスを作成
画面左から「インスタンス」を選択して、その後「インスタンスの起動」を選択してください

1.AMIの選択
「Amazon Linux 2 AMI (HVM), SSD Volume Type」「64 ビット(x86)」を選択します。

2.インスタンスタイプの選択
無料利用枠(1年未満のユーザー)の「t2.micro」を選択

3.インスタンスの設定
インスタンス数：「1」
購入のオプション：「チェックなし」
ネットワーク：「VPC_for_アプリ名」
サブネット：「アプリ名_Subnet_1a」
自動割り当てパブリック IP：「サブネット設定を使用（無効）」
配置グループ：「チェックなし」
キャパシティーの予約：「開く」
ドメイン結合ディレクトリ：「ディレクトリなし」
IAM ロール：「なし」
シャットダウン動作：「停止」
停止 - 休止動作：「チェックなし」
終了保護の有効化：「チェック入れる」
モニタリング：「チェックなし」
テナンシー：「共有」
Elastic Inference：「チェックなし」
クレジット仕様：「チェックなし」
ファイルシステム：「空白」

4.ストレージの追加
初期設定で次へ

5.タグの追加
キー：「Name」
値：「アプリ名-instance」

6.セキュリティグループの設定
セキュリティグループの割り当て：「既存のセキュリティグループを選択する」
以前作成した「アプリ名-SecurityGroup」にチェック

「確認と作成」を選択する

「起動」を選択

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

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

すると「アプリ名.pem」がダウンロードされます。

そして「確認と作成」を選択します。

## Elastic IPを作成して紐付ける
画面左から「Elastic IP」を選択して、「Elastic IP アドレスの割り当て」を選択
以下の様に記述　※初期設定のままで良い
ネットワークボーダーグループ：　「ap-northeast-1」
IPv4 アドレスプール：「Amazon の IPv4 アドレスプール」

「割り当て」を選択

次にElastic IPをインスタンスに紐付けします。
先ほど作ったElastic IPを選択して「アクション」ボタンをクリックします。
その後「アドレスの関連付け」を選択します。

以下の様に記述
リソースタイプ：「インスタンス」
インスタンス：「アプリ名-instance」
プライベート IP：クリックして表示されるIPを選択
再関連付け：チェック入れる

「関連付ける」をクリックしてください

##EC2にログインする準備
作成したインスタンスが起動している事を確認します。
「インスタンス」をクリックして作成したインスタンスが**running**になっていることを確認する

ここでElastic IPアドレスをメモしておいてください


EC2にログインするために、ここからはコンソール画面を使います。

下準備としてこれらをインストールします。
1. python
2. pip
3. awscli　※awsをPCのコンソール上から扱うためのもの

ターミナルで以下のコマンドを入力します

```
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/へ移動させる

```
$ mkdir .ssh/
$ mv {ダウンロードしたディレクリのパス}/アプリ名.pem .ssh/
```

キーペアの権限を変更してアクセス権を与えます。

```
$ cd .ssh/
$ cdmod 600 アプリ名.pem
```

## EC2へログイン
公開鍵を利用してec2-userとしてログインします。
先ほどメモしたElastic IPを使います。

```
$ ssh -i アプリ名.pem ec2-user@{Elastic IP}
```
yesかnoを聞かれたら、yesと入力してください
これでログイン成功です。

## 新規ユーザー登録

```:サーバー
[ec2-user@ip-10-0-0-246 ~]$ sudo adduser ユーザ名
```
新規ユーザのパスワード登録

```:サーバー
[ec2-user@ip-10-0-0-246 ~]$ sudo passwd ユーザ名
```

## 作成したユーザーにマスター権限を与える
viを使って設定を編集します。`visudo`コマンドを使って行います。
※viでファイルを指定しても良いが`visudo`の方が簡単

```:サーバー
[ec2-user@ip-10-0-0-246 ~]$ sudo visudo
```

ファイルの中で以下の様になっている部分を探し作成したユーザに権限を与える記述をします。


```
#ここを探す
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL　　


ユーザ名   ALL=(ALL)       ALL ←ここを追加
```
`shift`+ZZで保存して終了します。

##ユーザーの切り替え

```:サーバー
[ec2-user@ip-10-0-0-246 ~]$ sudo su - ユーザ名
[ユーザ名@ip-10-0-0-246 ~]
```

##SSH通信でインスタンスへログイン
続いてSSH通信を使ってインスタンスにログインします。

以下の流れで行います。
1 . ローカルで鍵の生成
2 . その鍵をどの通信の認証時に使用するか等を設定
3 . サーバーとの認証処理を行う。
4 . 実際に新ユーザーでログイン

###1.ローカルで鍵の作成
ローカルで作業するので新しくターミナルを開きます。

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

そのままEnter ※passは指定しない
Enter passphrase (empty for no passphrase):

そのままEnter
Enter same passphrase again:
```
これで「アプリ名_key_rsa」と「アプリ名_key_rsa.pub」が生成される

```:ローカル
$ ls
アプリ名_key_rsa アプリ名_key_rsa.pub
```

##2.鍵をどの通信の認証時に使用するか等を設定
viで設定ファイルを編集する

```:ローカル
$ vi config
```

以下の様に編集する

```
Host アプリ名_key_rsa
  Hostname Elastic IP #自分の設定に合わせる
  Port 22
  User ユーザ名 #作成したのユーザー名
  IdentityFile ~/.ssh/アプリ名_key_rsa #秘密鍵の設定
```

`shift` + `ZZ`で保存して終了


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

```:ローカル
$ cat アプリ名_key_rsa.pub
ssh-rsa ~
~
~
~.local
```

###3.サーバーとの認証処理
次はサーバー側で作業をします。
サーバーにログインしていたターミナルに移ります。

```:サーバー
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ vi authorized_keys
```

ここで「アプリ名_key_rsa.pub」でコピーした**ssh-rsa ~~~ .local**を貼り付けます。

```
ssh-rsa ~
~
~
~.local
```
`shift` + `ZZ`で保存して終了します。

以下を入力して新ユーザーに権限を与えます

```
$ chmod 600 authorized_keys
```
これで権限が付与されました。

##新ユーザでログインする

```:ローカル
$ ssh アプリ名_key_rsa
```
ログインできればユーザー設定は終了です。

##参考

https://qiita.com/Yuki_Nagaoka/items/5be084c6efe1f797fd94