EC2の初期設定

##はじめに
「AWSのサーバーを利用する」ための手順を5つに分けて書いています。

記事は以下にまとめておりますのでご確認ください。

①[EC2の初期設定](https://qiita.com/maca12vel/items/902dde37a267ceca1c53) ← イマココ 
②[本番環境でデータベースを作成する](https://qiita.com/maca12vel/items/68d6ae3d4308e330847d)
③[EC2のRailsを起動する](https://qiita.com/maca12vel/items/2a04d39f958b53d687e2)
④[Webサーバーを設定する](https://qiita.com/maca12vel/items/35f9fb73bb21cb4869fb) 
⑤[デプロイを自動化する](https://qiita.com/maca12vel/items/7b33dd6ea1ad556e3fec)

##AWSの環境構築
AWSアカウントにログインし、アカウントの隣にある「リージョン」を東京に設定。

##EC2インスタンスを作成
EC2インスタンスとは、AWSで「仮想マシン」と呼ばれるもの。
「サーバーを生成する」といっても、AWSがすべてのサーバーを物理的に用意しているわけではなく、
実際には「仮想マシン」と呼ばれるソフトウェアを利用して、仮想的に1つのLinuxサーバーを利用できる仕組みを利用する。

AWSアカウントにログインし、トップページに遷移したら左上の「サービス」から「EC2」を選択
[![Image from Gyazo](https://i.gyazo.com/174eaf75d5cdc41b0d04339c9ae5cc01.png)](https://gyazo.com/174eaf75d5cdc41b0d04339c9ae5cc01)

「インスタンスを起動」をクリック
[![Image from Gyazo](https://i.gyazo.com/78cfbcbc0dc347d1d8e5f3e38c36cba6.png)](https://gyazo.com/78cfbcbc0dc347d1d8e5f3e38c36cba6)

---

次に、「AMI」というものを選択します。
AMIとは、「Amazon Machine Image」の略語で、サーバーのデータをまるごと保存したデータのこと。
この中には「OS」などが事前にインストールされているものもあるので、自分でゼロから様々なツールをインストールする手間を削減できる。

「 Amazon Linux 2 AMI 」を選択
[![Image from Gyazo](https://i.gyazo.com/3125cd2e96819f63286116e3849ebe8d.png)](https://gyazo.com/3125cd2e96819f63286116e3849ebe8d)

次に、「EC2インスタンスのタイプ」を選択
今回は、無料枠で利用できる「t2.micro」を選択し、「確認と作成」をクリック
[![Image from Gyazo](https://i.gyazo.com/fd89f02eca3d63effc5b0bf0d7aceaf8.png)](https://gyazo.com/fd89f02eca3d63effc5b0bf0d7aceaf8)

画面遷移後、右下の「起動」をクリック

---

次に、「キーペア」というものをダウンロードします。
キーペアとは、インスタンスへログインする際に必要となる「秘密鍵」のこと

「新しいキーペアの作成」を選択して、キーペアの名前を入力
その後、「キーペアのダウンロード」をクリック
[![Image from Gyazo](https://i.gyazo.com/8835341a17f682d396ead99ba514c512.png)](https://gyazo.com/8835341a17f682d396ead99ba514c512)

キーペアのダウンロードが完了すると、クリック出来ない状態になっていた
「インスタンスの作成」がクリックできるように変更される。
そちらをクリックして、EC2インスタンスを作成します。すると完了画面に遷移します。

右下の「インスタンスの表示」をクリックすると、「インスタンス一覧画面」に戻るので、
作成した「インスタンスID」をコピーしてメモアプリなどに控えておきます。
[![Image from Gyazo](https://i.gyazo.com/636cbec5166fc5841822576f7005582d.png)](https://gyazo.com/636cbec5166fc5841822576f7005582d)

---

##サーバーを起動させる準備
さきほど作成した「EC2インスタンス」には、作成時にIPアドレスが自動で割り振られていますが、
サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点があります。

これを解決してくれるのが「Elastic IP」です。

Elastic IPとは、AWSから割り振られた固定の「パブリックIPアドレス」のこと。
このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動・停止にかかわらず
常に同じIPアドレスで通信をすることが可能になります。

左側の「ネットワークセキュリティ」から「Elastic IP」をクリックし、
右上の「Elastic IPアドレスの割り当て」をクリック
[![Image from Gyazo](https://i.gyazo.com/fdd72bde3ce780f3f0e2fe8073e38fb4.png)](https://gyazo.com/fdd72bde3ce780f3f0e2fe8073e38fb4)

「画面が遷移したら、AmazonのIPv4アドレスプール」を選択し、「割り当て」をクリック

次に、「取得したElastic IPアドレス」と「EC2インスタンス」を紐付けます。

右上の「アクション」をクリックし、「Elastic IPアドレスの関連付け」を選択します
[![Image from Gyazo](https://i.gyazo.com/4f12c9f892752cb684b6296f9dd02669.png)]
(https://gyazo.com/4f12c9f892752cb684b6296f9dd02669)

画面が遷移したら、インスタンスの検索窓で、先ほどメモしたインスタンスを選択
「プライベートIPアドレス」は空欄のまま、右下の「関連付ける」をクリック
[![Image from Gyazo](https://i.gyazo.com/84cb665734c52793e947fefef2154185.png)](https://gyazo.com/84cb665734c52793e947fefef2154185).

再びインスタンス一覧画面に戻り、作成したインスタンスの「Elastic IP」が設定されていることを確認してください。
画像右下に、「Elastic IP」が設定されています。
[![Image from Gyazo](https://i.gyazo.com/03f4f3d3c96d2f0f8acc187cd220c313.png)](https://gyazo.com/03f4f3d3c96d2f0f8acc187cd220c313)

---

##EC2インスタンスの設定変更
立ち上げたばかりのEC2インスタンスは「ssh」でアクセスすることはできるが、
HTTPなどの他の接続は一切つながらないようになっている。
そのため、サーバーとして利用するEC2インスタンスは、
事前にHTTPがつながるように「ポート」を開放する必要がある。

「ssh」は、離れた場所にあるサーバーの中で作業を行いたい場合に利用。
暗号や認証の技術を利用して、安全にリモートサーバーと通信できる。

###セキュリティグループのポートを設定

EC2インスタンス一覧画面から作成したインスタンスを選択し、
「セキュリティグループ」のリンク（図中では「launch-wizard-1」）をクリック
[![Image from Gyazo](https://i.gyazo.com/44bd111b4907da403f20a55c5ead87be.png)](https://gyazo.com/44bd111b4907da403f20a55c5ead87be)

インスタンスの属するセキュリティグループの設定画面に遷移するので、
セキュリティグループに表示されている「launch-wizard-1」にチェックを入れる。
「インバウンドルール」をクリックし、右上の「インバウンドのルールの編集」をクリック。
[![Image from Gyazo](https://i.gyazo.com/d834c56fd012b1dbce9b5041eebc52a2.png)](https://gyazo.com/d834c56fd012b1dbce9b5041eebc52a2)

ページが切り替わるので、「ルールの追加」をクリック
タイプは「HTTP」を選択し、ポート番号等の情報を確認する。
カスタムの隣の虫眼鏡のマークから「0.0.0./0」を選択する。
選択後、もう一度虫眼鏡から「：：/0」を選択する。

※既にある「sshの設定」がなくならないように注意

最後に、右下の「ルールを保存」を押し、ポートの開放が完了

---

##EC2インスタンスへログイン
EC2インスタンスを作成すると、「ec2-user」というユーザーと対応するssh秘密鍵が生成される。

ターミナルで以下のコマンドを実行

```
% cd ~
```

```
% mkdir ~/.ssh

# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在している
```

```
% mv Downloads/ダウンロードした鍵の名前.pem .ssh/

# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動
# 「ダウンロードした鍵の名前」の部分は、Finderでダウンロードフォルダから「〜.pem」というファイルを探し、「〜」の部分の名前に置き換える
```

```
% cd .ssh/
```

```
% ls

# pemファイルが存在するか確認
```

```
% chmod 600 ダウンロードした鍵の名前.pem

# 「ダウンロードした鍵の名前」はダウンロードフォルダから探す
```

```
% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP

# 「作成したEC2インスタンスと紐付けたElastic IP」はAWSのインスタンスから確認する
```

ssh接続（以下のコマンド）を実行すると以下の様なメッセージが表示されることがありますが、「yes」と入力し実行

```
EC２　Amazon　Linux　AMI
```

と、でかでかと表示されれば成功です。

---

##設定に必要なツールのインストール
まずはyumコマンドというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。

「yumコマンド」とは、Linuxにおけるソフトウェア管理の仕組みで、MacOSにとってのhomebrewと同じ役割を果たす。
yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、
一括でアップデートしたりできます。

「パッケージ」とは、LinuxOS下におけるある役割/機能をもったプログラムの集合のこと。
「ソフトウェア」や「ライブラリ」とも呼ぶ。

ターミナル（EC2内)で以下のコマンドを実行しパッケージをアップデート

```
[ec2-user@ip-***-**-**-*** ~]$ sudo yum -y update
```

次に、その他環境構築に必要なパッケージを諸々インストール(右に長いです)

```
[ec2-user@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
```
-yをつけています。
「-yオプション」とは、yumコマンドのオプションで、
「すべての問いにYesで自動的に答える」という設定してコマンドを実行します。
yum install などのコマンドでは、本当にインストールして良いのかを
[y/n]（「Yes or No」の意味）が問われ流ので、それを省略できます。

---

続いて、EC2上でJavaScriptを動かすためにNode.jsというものをインストールします。

「Node.js」とは、サーバーサイドで動くJavaScriptのパッケージのこと。
今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用される。

ターミナル（EC2内)で以下のコマンドを実行

```
[ec2-user@ip-***-**-**-*** ~]$ sudo curl -sL https://rpm.nodesource.com/setup_10.x | sudo bash -
[ec2-user@ip-***-**-**-*** ~]$ sudo yum -y install nodejs
```

※確認画面が出てきた場合は「Y」を入力し、Enterキーを押してインストールを完了する。

---

##Railsのバージョンが6.0以降のアプリケーションを動かすための準備
Railsのバージョンが6.0以降のアプリケーションを動かすために、Yarnをインストールする必要がある。

ターミナル（EC2内)で以下のコマンドを実行

```
[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をインストール
これらはRubyをインストールする前に、インストールする必要があり、
Rubyのバージョンを管理する際に組み合わせて使うツール

ターミナル（EC2内)で以下のコマンドを実行

```
# ①rbenvのインストール
[ec2-user@ip-***-**-**-*** ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 

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

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

# ④.bash_profileの読み込み
[ec2-user@ip-***-**-**-*** ~]$ source .bash_profile

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

# ⑥rehashを行う
[ec2-user@ip-***-**-**-*** ~]$ rbenv rehash 
```

コマンドの役割
①	gitから「rbenv」をクローン
②＆③	パスを通す際に必要なコマンド
④	設定したパスを読み込む
⑤	gitから「ruby-build」をクローン
⑥	使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンド

---

##Rubyをインストール
以下で実行するコマンド群は、
「インストールするRubyのバージョン」
「自身のアプリケーションで使っているRubyのバージョン」
によって適宜変更してください。

ここでは「2.6.5」をインストールしていきます。

ターミナル（EC2内)で以下のコマンドを実行

```
# Ruby 2.6.5のバージョンをインストール
[ec2-user@ip-***-**-**-*** ~]$ rbenv install 2.6.5

# EC2インスタンス内で使用するRubyのバージョンを決める
[ec2-user@ip-***-**-**-*** ~]$ rbenv global 2.6.5

# rehashを行う
[ec2-user@ip-***-**-**-*** ~]$ rbenv rehash  

# Rubyのバージョンを確認
[ec2-user@ip-***-**-**-*** ~]$ ruby -v 
```

---

以上です。お疲れ様でした。

続きは → [こちら](https://qiita.com/maca12vel/items/68d6ae3d4308e330847d)