【備忘録】【Rails+Docker+AWS】開発環境構築から本番公開まで（2/3 AWSコンソール画面編）

（この記事は続きです）

下記記事を参考にさせていただき、dockerで環境構築してデプロイまでもっていきました。
多分何度も作り直すことになると思ったので、コピペするだけでスムーズに作れるように
バージョン情報を自分用に合わせて記事に残させていただきました。
※内容は下記記事とほとんど変わらないです。

▼参考にさせていただいた記事▼

https://qiita.com/obr-note/items/f897762b831b6f3c273c

# バージョン情報
Ruby 3.0.0
Rails 6.1.4
MySQL 5.7
Nginx 1.19.10

# 前提
AWSにアカウント作成済
docker hubにアカウント作成済
docker インストール済

# VPC

### VPC

VPC → VPC → VPCを作成

| 項目| 値 |
|:-:|:-:|
| 名前タグ  | remote-work-space-vpc  |
| IPv4  | 10.0.0.0/16  |
| IPv6  | なし  |
| テナンシー  | デフォルト  |


### サブネット

VPC → サブネット → サブネットを作成 × ３つ

| 項目| 値 |
|:-:|:-:|
| VPC ID  | remote-work-space-vpc  |
| サブネット名  | remote-work-space-subnet-public  |
| アベイラビリティーゾーン  | ap-northeast-1a |
| IPv4 | 10.0.0.0/20 |

| 項目 | 値 |
|:-:|:-:|
| VPC ID | remote-work-space-vpc |
| サブネット名 | remote-work-space-subnet-private01 |
| アベイラビリティーゾーン | ap-northeast-1a |
| IPv4 | 10.0.64.0/20 |

| 項目 | 値 |
|:-:|:-:|
| VPC ID | remote-work-space-vpc |
| サブネット名 | remote-work-space-subnet-private02 |
| アベイラビリティーゾーン | ap-northeast-1c |
| IPv4 | 10.0.80.0/20 |

### インターネットゲートウェイ

VPC → インターネットゲートウェイ → インターネットゲートウェイの作成
→ 作成 → (選択状態で)アクション → VPCへアタッチ

| 項目 | 値 |
|:-:|:-:|
| 名前タグ | remote-work-space-igw |
| VPC | remote-work-space-vpc |

### ルートテーブル

VPC → ルートテーブル → ルートテーブルを作成
→ 作成 → （選択状態で）ルート → ルートの編集 → ルートの追加
→ (選択状態で)サブネットの関連付け → サブネットの関連付けの編集

| 項目 | 値 |
|:-:|:-:|
| 名前タグ | remote-work-space-rt-public |

#### ルートの編集

ターゲットは「Internet Gateway → igw-0xxxxx（remote-work-space-igwのタグ名）」を選択

| 対象 | 送信先 | ターゲット |
|:-:|:-:|:-:|
| local	 | 10.0.0.0/16 | Local |
| 外部 | 0.0.0.0/0 | remote-work-space-igw |


#### サブネットの関連付け

| 名前 |
|:-:|
| remote-work-space-subnet-public |

### セキュリティグループ

VPC → セキュリティグループ → セキュリティグループを作成
・アウトバウンドルールは設定しなくて良い

| 項目 | 値 |
|:-:|:-:|
| セキュリティグループ名 | remote-work-space-sg-ec2 |
| 説明 | for ec2 |
| VPC | remote-work-space-vpc |
| インバウンドルール | タイプ:SSH ソース:0.0.0.0/0 |
| インバウンドルール | タイプ:HTTP ソース:0.0.0.0/0 |
| インバウンドルール | タイプ:HTTPS ソース:0.0.0.0/0 |

# EC2

EC2 → インスタンス → インスタンスを起動
→ （「確認と作成」ではなく「次のステップ」ボタンを押すこと）　→ 起動　→ キーペアダウンロード → インスタンスの作成（数分かかる）
・下記の他はデフォルトの設定にしておく
・セキュリティーグループは「既存のセキュリティグループを選択する」で、defaultとremote-work-space-sg-ec2にチェック
・キーペアは「新しいキーペアの作成」で「remote-work-space-ec2」を入力し、キーペアを~/Downloadsフォルダにダウンロード


| 項目 | 値 |
|:-:|:-:|
| Amazonマシンイメージ | Amazon Linux2 AMI |
| インスタンスタイプ | t2.micro |
| ネットワーク | remote-work-space-vpc |
| サブネット | remote-work-space-subnet-public |
| 自動割り当てパブリックIP | 有効 |
| EBSサイズ(GiB)	 | 20 |
| タグ | Name:remote-work-space-ec2 |
| セキュリティグループ	 | default + remote-work-space-sg-ec2 |
| キーペア名 | remote-work-space-ec2 |


### 動作確認

※キーペアはremote-work-space-ec2.pemとして、~/Downloadsフォルダにダウンロードしたと仮定する
EC2 → インスタンス → (選択状態で）詳細 → パブリックIPv4アドレス をコピー

```
$ ls ~/Downloads # remote-work-space-ec2.pemがあるか確認
$ mv ~/Downloads/remote-work-space-ec2.pem ~/.ssh/
$ chmod 700 ~/.ssh/remote-work-space-ec2.pem
$ ssh -i ~/.ssh/remote-work-space-ec2.pem ec2-user@xxx.xxx.xxx.xxx # パブリックIPv4アドレス
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[ec2]$ exit
```

ec2にログイン出来たらOK


# RDS

### パラメータグループ

RDS → パラメータグループ → パラメータグループの作成

| 項目 | 値 |
|:-:|:-:|
| パラメータグループファミリー | mysql5.7 |
| グループ名 | remote-work-space-db-pg |
| 説明 | remote-work-space parameter group  |

### オプショングループ

| 項目 | 値 |
|:-:|:-:|
| グループ名 | remote-work-space-db-og |
| 説明 | remote-work-space option group |
| エンジン | mysql |
| メジャーエンジンバージョン | 5.7 |

### サブネットグループ

RDS → サブネットグループ → サブネットグループの作成
・remote-work-space-subnet-private01 ・・・　10.0.64.0/20
・remote-work-space-subnet-private02 ・・・　10.0.80.0/20

| 項目 | 値 |
|:-:|:-:|
| グループ名 | remote-work-space-db-subnet |
| 説明 | remote-work-space db subnet |
| VPC | remote-work-space-vpc |
| アベイラビリティゾーン | ap-northeast-1a + ap-northeast-1c |
| サブネット | remote-work-space-subnet-private01 + remote-work-space-subnet-private02 |


### データベース

RDS → データベース → データベースの作成（作成から起動まで約10分かかる）
・下表の他はデフォルトの設定にしておく
・DBパラメータグループとオプショングループは「追加設定」を開くと選択できる


| 項目 | 値 |
|:-:|:-:|
| 作成方法 | 標準作成 |
| エンジンのタイプ | MySQL |
| バージョン | 5.7.33 |
| テンプレート | 無料利用枠 |
| DBインスタンス識別子 | remote-work-space-db |
| マスターユーザー名 | admin |
| マスターパスワード | admin_password |
| DBインスタンスクラス | db.t2.micro |
| Virtual Private Cloud | remote-work-space-vpc |
| サブネットグループ | remote-work-space-db-subnet |
| パブリックアクセス可能 | なし |
| 既存のVPCセキュリティグループ | default |
| データベース認識オプション | パスワード認証 |
| 最初のデータベース名 | (空欄) |
| DBパラメータグループ | remote-work-space-db-pg |
| オプショングループ | remote-work-space-db-og |


### 動作確認

RDS → データベース → remote-work-space-dbを選択 → 接続とセキュリティ → エンドポイントをコピー

```
$ ssh -i ~/.ssh/remote-work-space-ec2.pem ec2-user@xxx.xxx.xxx.xxx # EC2のパブリックIPv4アドレス
[ec2]$ sudo yum -y install mysql
[ec2]$ mysqladmin ping -u admin -p -h remote-work-space-db.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -p # RDSのエンドポイント
Enter password: admin_password
[ec2]$ exit
```

mysqld is alive が返ってくればOK

デプロイ編へ続く
https://qiita.com/asami___t/items/a54fc6a7f1f9a8571b14