【Rails AWS Docker】既存Ruby on Rails + MySQLアプリをDockerで構築し、AWSにデプロイする(4)

ポートフォリをとして作ったRuby on RailsアプリをDockerコンテナ化し本番環境をAWSで構築するまでの道のりです。
ポートフォリオ自体はこちらとなります。
[【ポートフォリオ】転職活動時に作成したポートフォリオの概要（テッ◯キャンプ）]
(https://qiita.com/sho_U/items/058e590325ee6833abb0)

かなり苦しめられたので、どなたかのお役に立てれば。

|  | タイトル |
|:-:|:--|
| 1  |  [ローカル環境のRailsアプリをDockerコンテナ化](https://qiita.com/sho_U/items/a1b5e4ddf13f3c42a722) |
| 2  | [AWSにVPCを作成する。パブリックサブネットを作成する](https://qiita.com/sho_U/items/9cdd37fd8c34c677d042)|
| 3 | [プライベートサブネットを作成する](https://qiita.com/sho_U/items/95c25df53a7e1fd20efd)  |
| 4 | EC2インスタンスを作成する |
| 5  | [RDSを作成する](https://qiita.com/sho_U/items/4e5431add35d9318865d)  |
|  6 | [DockerコンテナをAWSにアップロードする](https://qiita.com/sho_U/items/5ef6693f7ae8f1c27bb7) |

#EC2インスタンスを作成する

##EC2とは
Elastic Compute Cloudと呼ばれるもので、ざっくりというと仮想的なパソコンです。
それを、AWS上に置くことによって、クラウド上にシステムを構築します。

![IMG_718A6999530D-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/a9673ceb-7100-5732-a162-2957c542a09d.jpeg)

作成したEC2インスタンスは、パブリックサブネットに配置して、アプリ本体を置きます。

##EC2インスタンスの作成
検索ウィンドウからEC2を検索し、コンソールに入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/647035d9-0975-8bf9-8f23-c38e891dc86c.png)


インスタンスを起動をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/65a9fdba-95ee-0f06-d051-d5869067900c.png)

今回はインスタンスタイプにクイックスタートの「AMAZON Linux2」を利用します。
（ざっくり）どのタイプのコンピューターにするかということです。今回はOSがlinuxのものを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/71d44740-20cb-fcdb-0498-0dd076da820c.png)

タイプは無料利用枠のt2.microを選択します。
（ざっくり）どの程度のスペックにするかとうことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/3fe5170d-93bd-ff72-814e-e9fc92752bea.png)

→「次のステッップ：インスタンスの詳細設定」をクリックします。

| 項目 |内容  |説明（ざっくり） |
|:--|:--|:--|
| インスタンス数  |1   |起動するインスタンスの数   |
|購入のオプション |  チェックなし |スポットインスタンスを選択すると安価に利用できる（常時起動しない場合）   |
|ネットワーク   |fitO2_vpc   |先ほど作成したVPCに配置する。   |
| サブネット | fitO2_public_subnet_1a  |先ほど作成したパブリックサブネットに配置する。   |
|自動割り当てパブリック IP| サブネット設定を使用（無効）  |後ほど固定IPを割り振るため   |
| 配置グループ  | チェックなし  |複数のインスタンス間の通信を高速化する設定   |
|  キャパシティーの予約 |なし|リソースの上限を超えた時にインスタンスが起動できなくなることを回避（有料）   |
|IAM ロール| なし  |AWSのリソースに紐付けることができる権限設定を行うサービス|
| CPU オプション  | なし  |CPUの性能に対するオプション   |
|  シャットダウン動作 |停止   |シャットダウン時の動作   |
| 停止 - 休止動作  | なし | 停止動作に休止動作を追加する  |
|  終了保護の有効化 |  なし |  誤った終了を防止します |
|  モニタリング |  なし |5分間隔の監視を1分感覚にする。   |
|  テナンシー |共有   |ハードディスクを占有するか否か   |
|Elastic Inference| なし  |機械学習に効率化   |
|  クレジット仕様 |  なし |規定量の通信量が来た際に制限がなくなる   |

ネットワークインターフェイス

|  || |
|:-:|:-:|:-:|
|  プライマリIP | 10.0.10.10|サブネットにプライベートIPアドレスを設定する。  |

「次のステップ：ストレージの追加」をクリック

|項目| 内容 | 説明（ざっくり） |
|:--|:--|:--|
| サイズ  |8   |   |
| ボリュームタイプ  |汎用SSD   |   |
| 合わせて削除  |チェック   |   |
| 暗号化  |暗号化なし   |   |

「タグの追加」をクリック

|項目| 内容 | 説明（ざっくり） |
|:--|:--|:--|
| name |fitO2_web   |   |
| ボリュームタイプ  |汎用SSD   |   |
| インスタンス  |チェック   |   |
|ボリューム  |チェック   |   |

「セキュリティーグループの設定」をクリック

既存のセキュリティーグループを選択する。
先ほど作成した（fitO2_SG）を適用する。

「確認と作成」をクリック

「起動」をクリック

##キーペアの作成

新しいキーペアの作成（すでにキーペアを作っている場合は既存のものを作っても良い）

キーペア名を設定し、ダウンロード。

（ざっくり）キーペアとは、ssh接続する際に、使用する鍵。ssh接続する際にダウンロードしたキーペアを用いて接続し、AWS側にで生成した鍵と合致した場合接続が許可される。


「インスタンスの作成」


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/3ed79298-5d18-cda9-10c5-c01b6a6550c2.png)



作成されたら、分かりやすいようにインスタンスに名前を設定しておきます。
nameのところをクリックしたら名前が編集できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/0fd4bb1c-5315-1557-879e-4d0c17d7fd1c.png)

ダウンロードしたキーペアを適当な位置に移動させます。(今回は ~/.ssh）

##Elastic IP（固定）アドレスを作成する。

現状インスタンスを停止したら、IPアドレスが変わってしまうので、固定IPを割り割り振ります。

EC2ダッシュボードから、Elastic IPを選択します。

「新しいアドレスの割り当て」をクリックします。

ネットワークボーダーグループ : ap-northease-1
パブリック IPv4 アドレスプール : Amazon の IPv4 アドレスプール

「割り当て」をクリック。

作成したElastic IPアドレスに分かりやすい様に名前を付けておく。

##Elastic IP（固定）アドレスをインスタンスに紐づける。

作成したIPアドレスにチェックを入れてアクションから「アドレスの関連付け」を選択する。

リソース : インスタンス
インスタンス : 作成したインスタンスを選択
プライベートIPアドレス : 10.0.10.10

「関連付け」をクリック

##ssh接続を試みて確認する。
インスタンスの状態が、runningになっていることを確認後

```
 sudo ssh -i ~/.ssh/fitO2_key.pem ec2-user@固定IPアドレス
```
~/.ssh/fitO2_key.pemは秘密鍵の保管している場所/秘密鍵の名前
固定IPは、インスタンス一覧から選択して、説明タグをクリックし、Elastic IPと表示されているものです。

```
Are you sure you want to continue connecting (yes/no/[fingerprint])?

yesと打ってenter
```

```

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
```
上記のように表示されれば接続成功。

図にすると下記の様なイメージで接続しました。

![IMG_D7961C5FA634-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/6cff6db4-b222-10a7-9b9d-3b3b5f1bb6f0.jpeg)

EC2には先ほど作成したセキュリティーグループ（fitO2_SG)が適用されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/6af4b230-402b-4313-6c50-3917beffe4a4.png)


インバウンド（入ってくる方の通信）に対し、ssh接続の場合、２２番ポートを使用し、全てのアクセス元（0.0.0.0/0)を許可しているので、ssh接続することが可能だったわけです。


EC２インスタンスを作成し、ssh接続を行うことができました。

80番ポートもhttp通信に対し、開放されているので、今作成したインスタンスは下記のような通信を許可する状態となっています。

![IMG_378691F05F41-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547556/a4df00ed-1d54-65a9-2327-4af05a7da2cd.jpeg)

これでパブリックサブネットEC2インスタンスに対し、上記のようなセキュリティーグループが設定されました。

次回(5)へ続く
[RDSを作成する](https://qiita.com/sho_U/items/4e5431add35d9318865d)