EC2の初期設定をしてみた

# 初めまして
今回、オリアプをherokuだけではなくEC2でもデプロイをしてみようと考え、挑戦してみました。
備忘録として残りたいと思います。

# EC2とは
AWSでEC2インスタンスを使って、「仮想マシン」と呼ばれるソフトウェアを利用し仮想的にLinuxサーバーを利用する仕組みです。

#初期設定

①AWSにてEC2を選択します。EC2ダッシュボードで「インスタンスを起動」をクリックします。
②AMIを選択します。※私は「Amazon Linux 2 AMI」を選択しました。次のページで検索と作成をクリックし、次のページで起動をクリックします。

③次に、キーペアを選択し、新しいキーペアを作るを選択します。（初期設定のため）
キーペアの名前は任意で構いません。
キーペアをダウンロードします。
インスタンスの生成をクリックします。

④作成後、サイドバーのインスタンスをクリックし、先ほど作成した「インスタンス名」をクリックします。
後ほど、インスタンスIDは使用するため、インスタンスIDをコピーしておいてください。

# サーバーを起動させる準備
まず、最初に「Elastic IP」という言葉を覚えておくことをお勧めします！
AWSから割り振られた固定の「パブリックIPアドレス」のことです。
EC2を作成したら「パブリックIP」が自動的に割り振られています。しかし、定期的に「パブリックIP」が変更されてしまい、その都度、書き換えないといけません。

そこで、ご自身が作成されたEC2インスタンスとElastic IPを紐付けを行います。

①サイドバーの「Elastic IP」をクリックし、右側上部の「Elastic IPの割り当て」のクリックします。
②「AmazonのlPv4 アドレスプール」にチェックが入っていることを確認し、「割り当て」をクリックします。
③アクションから「Elastic IPアドレスの関連付け」を選択します。
④Elastic IPアドレス関連付け画面にて、インスタンスのプルダウンから先ほど選択したインスタンスを選択します。
「関連付ける」をクリックします。

これでインスタンス画面に戻ると「Elastic IP」が紐付けされていることが確認できます。

# EC2インスタンスの設定変更
次に「ssh」からでしかアクセスできないのを、「ポート」を開放し、HTTPでも使用できるようにします。

①インスタンス画面の下部に「セキュリティ」を選択し、セキュリティグループをクリックします。
②インバウンドルールをクリックし、ルールを２つ追加します。※既存のものは消さないようにします。

|タイプ|プロトコル|ポート範囲|送信元     |
|----|--------|-------|----------|
|HTTP|TCP     |80     |/0.0.0.0/0|
|HTTO|TCP     |80     |::/0      |

③ルール保存します

# EC2インスタンスへログイン

EC2インスタンスを作成すると「ec2-user」というユーザーと対応するssh秘密鍵が生成されます。
本来は、サービスを稼働させるために権限をより小さくしたユーザーを作成して運用するべきですが、
今回はこのまま「ec2-user」でログインします。（練習の為、私はこのままします）

```
ターミナル　ホームディレクトリで
% mkdir ~/.ssh  #.shhというディレクトリを作成
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/ #先ほどダウンロードしたキーペアを入力
% cd .ssh/
% chomod 600 ダウンロードした鍵の名前.pem
% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
#この先でyesを求められた場合は「yes」と入力し、enterで大丈夫です！

```
上記コマンドを実行後、「Amazon Linux AMI」とドデカいEC2ロゴが出てきたら無事ログイン完了です！
※ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IPのコマンドですが、結構これから使うのでどこかにコピペしておくと便利ですよ！

# 必要なツールのインストール
EC2インスタンス内でも環境構築をしなければなりませんので、色々とダウンロードしていきます。

まずは、サーバーに元々パッケージをアップデートします。

```
[ec2-user@ip-ご自身のIP ~]$ sudo yum -y update
[ec2-user@ip-ご自身のIP ~]$ 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
```

## 次にJavaScriptをうごかく為の準備をします

```
先ほどのターミナルに引き続き

[ec2-user@ip-ご自身のIP ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@ip-ご自身のIP ~]$ sudo yum -y install nodejs

```

# Railsのバージョン6.0以降の人の為の準備
Yarnが必要になるのでインストールします。
自分はYarnってなんぞやってなったので一応「Railsに搭載されているJavaScriptのパッケージを管理する為のパッケージマネジャー」のことらしいです！

```
先ほどのターミナルに引き続き
[ec2-user@ご自身のIP ~]$ sudo yum -y install wget
[ec2-user@ご自身のIP ~]$ sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
[ec2-user@ご自身のIP ~]$ sudo yum -y install yarn
```

##rbenvとruby-buildをインストール
```
# ①rbenvのインストール
[ec2-user@ご自身のIP ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 

# ②パスを通す
[ec2-user@ip-ご自身のIP ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 

# ③rbenvを呼び出すための記述
[ec2-user@ip-ご自身のIP ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

# ④.bash_profileの読み込み
[ec2-user@ip-ご自身のIP ~]$ source .bash_profile

# ⑤ruby-buildのインストール
[ec2-user@ip-ご自身のIP ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# ⑥rehashを行う
[ec2-user@ip-ご自身のIP ~]$ rbenv rehash 
```

## Rubyのインストール
```
# Ruby ご自身が使っているRubyのバージョンを選択ください
[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 

```

ちなみに、最初の「rbenv install 2.6.5」コマンドかなり時間かかります。
「Installing ruby-2.6.5...」←で止まっているの状態が続くのですが、止まっていないのでご安心を！
私は、「２時間」待ちました。

# 最後に
初期設定は以上です。
EC2の初期設定は立ち上げる時だけなので、何度もする内容ではないですが慣れないの難しく感じました。
やっていて思うのですが、インフラの知識って難しいなーと。
コツコツと手を動かして学習する！これにつきますね。

ここまで読んでいただきありがとうございました！