【　Ruby on Rails 6.0　】AWS + Nginx + Unicornでデプロイ①

# 始めに
AWSをインフラとしてポートフォリオを本番環境にデプロイしました。
本シリーズではrailsアプリをデプロイし、独自ドメインを取得する過程までをアウトプットしたいと思います。

# 開発環境

* macOS Catalina
* Ruby 2.6.5
* Ruby on Rails 6.0.0
* AWS
* nginx
* unicorn
* mariaDB（本番環境のデータベース）

# 目次
|章|記載内容|
|:--:|:--:|:--:|
|セクション１|**EC2インスタンス作成**（今回の内容）|
|セクション2|[Linuxサーバー構築](https://qiita.com/anago1030/items/07f7026c0f4c42a63440)|
|セクション3|[データベース設定](https://qiita.com/anago1030/items/79eebdc8474255b962b4)|
|セクション4|[EC2上でGemをインストールし環境変数を設定](https://qiita.com/anago1030/items/0a9a8937421f64f46a44)|
|セクション5|[Railsアプリを起動](https://qiita.com/anago1030/items/36d0da7e25c57d0e5780)|
|セクション6|[Nginxの導入](https://qiita.com/anago1030/items/c4c80a46a75ff306db8d)|
|セクション7|[自動デプロイ](https://qiita.com/anago1030/items/cb60c8e99d408dc4fd80)|
|セクション8|[独自ドメイン取得](https://qiita.com/anago1030/items/5e487ec48fd7c0be86bc)|

## EC2インスタンス作成
まずは[AWSのアカウント](https://aws.amazon.com/jp/free/?trk=ps_a134p000003yhoPAAQ&trkCampaign=acq_paid_search_brand&sc_channel=ps&sc_campaign=acquisition_JP&sc_publisher=google&sc_category=core-main&sc_country=JP&sc_geo=JP&sc_outcome=devadopt&sc_detail=aws&sc_content=Brand_Core_aws_e&sc_matchtype=e&sc_segment=487544183164&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Core-Main|Core|JP|EN|Text|dx&ef_id=Cj0KCQiA7NKBBhDBARIsAHbXCB4m4z0f8z1feA-lLY581uH8Y_4yqiLaYREB3YZ9ziLRIAK1KUZgmF0aArLKEALw_wcB:G:s&s_kwcid=AL!4422!3!487544183164!e!!g!!aws&gclid=Cj0KCQiA7NKBBhDBARIsAHbXCB4m4z0f8z1feA-lLY581uH8Y_4yqiLaYREB3YZ9ziLRIAK1KUZgmF0aArLKEALw_wcB&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc)を作成しましょう。

EC2インスタンスとは、AWSで用意している仮想サーバーのことです。
この仮想サーバーを設定することでクライアントとアプリケーションがデータのやり取りを本番環境でできるようになります。

まず、サービスからEC2を選択し画面遷移しましょう。
![スクリーンショット 2021-02-23 22.57.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/5ea812aa-1b83-41f8-25a5-840dbdb17d23.png)



次にインスタンスの起動をクリックします。
![スクリーンショット 2021-02-23 22.09.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/a8e561a9-2aea-550b-968f-64667cd6b3d4.png)


### AMIの選択
AMIは、「Amazon Machine Image」の略語で、サーバのデータをまるごと保存したデ ータのことです。この中には、OSやWEBサーバなどが事前にインストールされているので自分でゼロからインストールする手間を削減することができます。
今回は「 Amazon Linux AMI 2 」という、AWSが独自にカスタマイズしたAMIを利用します。

![スクリーンショット 2021-02-23 22.13.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/c3687513-9a04-2017-3a71-c8c5a35f63f8.png)


### EC2インスタンスのタイプ選択
EC2インスタンスのタイプを選択します。EC2ではさまざまなインスタンスタイプが用意 されており、CPUやメモリなどのスペックを柔軟に指定することができます。 今回は、無料枠で利用できる「t2.micro」を選択しましょう。


![スクリーンショット 2021-02-23 23.06.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/55bd450f-8016-155c-b245-547725b788de.png)
起動をクリックしましょう。
![スクリーンショット 2021-02-23 23.07.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/58ad2181-99e8-237b-fcd9-85fc2410b9c3.png)

### キーペアのダウンロード
内容を確認する際に、**「キーペア」**をダウンロードすることが出来ます。
これはインスタンスにSSHでログインする際に必要となる「秘密鍵」です。

`SSHログインとは安全なリモートログインまたはその他の安全でないネットワーク上の安全なネットワークサービス用のプロトコルです。`
これがないとEC2インスタ ンスにログインできないので、必ずダウンロードしてパソコンに保存しておきましょう。 また、間違って他人に渡さないよう気をつけてください。`名前にスペースを含めるとエラーが起きるので注意してください。`

![スクリーンショット 2021-02-24 18.18.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/b0bbb9fa-7c37-8251-4d83-fddf5b955901.png)




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


![スクリーンショット 2021-02-23 23.11.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/95babd1d-a981-30ee-4aa4-c89330b09044.png)
インスタンス一覧画面に戻るので、作成した「インスタンスID」をコピーしてメモしておきます。

![スクリーンショット 2021-02-23 22.19.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/c677e8dc-dcdb-143d-7316-38e45d0e2128.png)

### Elastic IPの作成と紐付けをしよう
先ほど作成したEC2インスタンスには、作成時にIPアドレスが自動で割り振られていま す。これをパブリックIPと言います。しかし、サーバーを再起動させるたびにこのパブリ ックIPが変わってしまうという欠点を持っています。IPが変わってしまうということは、 設定ファイル等をその都度書き換えなければいけません。これを解決してくれるの が、Elastic IPです。

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

![スクリーンショット 2021-02-23 22.21.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/3d3f7001-46b1-0e1d-7eba-96288d86be12.png)

![スクリーンショット 2021-02-23 22.23.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/99a5fbdb-dd7a-a5b6-b15e-a3c415f4ad5e.png)
次に、取得したElastic IPアドレスを、作成したEC2インスタンスと紐付けましょう。
![スクリーンショット 2021-02-23 22.26.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/499cf9d2-f63f-9463-8adb-59f950006c9c.png)




![スクリーンショット 2021-02-23 23.16.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/3459109d-af2f-4f73-a613-434d15173e67.png)
上の画像のようにインスタンスを選択すると、その下にあるプライベートIPアドレスが自 動で選択されます。
再びインスタンス一覧画面に戻り、作成したインスタンスの「Elastic IP」が設定されて いることを確認しましょう。 

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

#### セキュリティグループとは
ポートの設定をするためには、「セキュリティグループ」という設定を変更する必要があります。
セキュリティグループとは、EC2インスタンスが属するまとまりのようなもので、複数の EC2インスタンスのネットワーク設定を一括で行うためのものです。

#### セキュリティグループのポートを設定する
下図の手順に従って、セキュリティグループのポートを設定しましょう。 まず、EC2インスタンス一覧画面から、対象のインスタンスを選択し、「セキュリティグ
ループ」のリンクをクリックします。

![スクリーンショット 2021-02-23 22.31.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/ed879111-ae9d-4738-1206-db3e36bb0154.png)
すると、インスタンスの属するセキュリティグループの設定画面に移動するので、「インバウンドルール」タブの中の「インバウンドのルールの編集」をクリックします。

![スクリーンショット 2021-02-23 23.24.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/d16a2e95-874f-832a-858a-41e8bd088903.png)
ページが切り替わるので、「ルールの追加」をクリックします。

|タイプ|HTTP|
|:--:|:--:|:--:|
|プロトコル|TCP|
|ポート範囲|80|
|送信元|カスタム / 0.0.0.0/0, ::/0|
「0.0.0.0」や「::/0」は「全てのアクセスを許可す る」という意味です。
`もともと設定してあったSSHの設定は削除しないでください！`

![スクリーンショット 2021-02-23 23.30.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/675c4e56-a6ad-b647-7603-81632d512369.png)
最後に、右下の「ルールを保存」を押します。
以上で、ポートの開放が完了です。
この作業が終わっていないと、次以降のカリキュラムでWEBサーバを起動した時にアクセ スできなくなるので注意してください。

以上でインスタンス作成の工程は終了です！

### EC2インスタンスへのログインしてみよう
EC2インスタンスを作成すると、 ec2-userというユーザーと対応するSSH秘密鍵が生成されました。次にターミナル上でSSHログインをします。

### ec2-userでログイン

```php:ターミナル
#ホームディレクトリに移動
$ cd ~　

#.sshというディレクトリを作成
# エラー『　mkdir: /Users/owner/.ssh: File exists　』と表示の場合、すでに存在しているのでスキップ
$ mkdir ~/.ssh　　

# mvコマンドで、ダウンロードしたキーペア（ファイル名.pem）を .sshディレクトリに格納
$ mv Downloads/ファイル名.pem .ssh/

# .sshディレクトリに移動
$ cd .ssh/

# pemファイルが存在するか確認します
$ ls
【キーペア名】.pem

#　パーミッションを設定
$ chmod 600 ダウンロードした鍵の名前.pem

# SSHログイン実行
$ ssh -i ダウンロードした鍵の名前.pem ec2-user@Elastic IPアドレス
```
初回ログインの場合、以下のように表示されます。

```php:ターミナル
The authenticity of host '52.68.~~~~~~ (52.68.~~~~~~)' can't be established.
RSA key fingerprint is eb:7a:bd:e6:aa:da:~~~~~~~~~~~~~~~~~~~~~~~~.
Are you sure you want to continue connecting (yes/no)? 
```
ここでyesを押して以下の画像が表示されればログイン完了です！
![スクリーンショット 2021-02-24 18.32.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/772095/88408899-13db-5de5-0bcc-36f3dc557a2a.png)




# 終わりに
次回は本番環境に必要な設定ファイルをインストールしてデプロイを進めていきます。
お疲れさまでした。。

次回
[Linuxサーバーの構築](https://qiita.com/anago1030/items/07f7026c0f4c42a63440)