【AWS入門】RDSでMySQL環境を構築してEC2上のWebアプリと連携

[VSCode Remote Containersで.NET Core + MySQL + Elasticsearchの開発環境構築](https://qiita.com/ashicom/items/88d5e5bfc0febe1db30a) の続きです。

今回はRDSを使用したMySQLインスタンスをAWS上に構築し、EC2インスタンス上に配置されたWebアプリから接続するところまでをご紹介しようと思います。

#環境
MySQL 8.0.20

#RDSインスタンスの作成
まずはRDSインスタンスを作成していきましょう。
以下手順でRDSのコンソールを開き、データベースの作成メニューを開いてください。

1. AWSマネジメントコンソールにログイン
2. 「サービス」の「すべてのサービス」に`RDS`を入力
3. RDSへのリンクが表示されるので押下
4. RDSコンソールが表示されるので、「データベースの作成」を押下

以降各セクションごとに説明します。

---

###データベースの作成方法
簡単作成でも問題ありませんが、今回は練習の意味で標準作成を選択します。
![スクリーンショット 2020-10-21 3.32.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/63a46ff2-bc4a-1615-46b4-1d2244f0a0b0.png)

###エンジンのオプション
MySQLを選択します。
バージョンは8.0.20にしました。
![スクリーンショット 2020-10-26 19.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/ef8e9f89-f2c4-aef8-b12d-9b551d6faa19.png)


###テンプレート
今回は勉強用なので、無料利用枠を使用します。
![スクリーンショット 2020-10-21 3.31.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/20f25196-b148-8f02-7350-a7719fc6940d.png)

###設定
MySQLに接続するマスターユーザの情報を入力します。
今回はインスタンス名を`asp-net-app-db`、ユーザ名はデフォルトの`admin`に設定しました。
パスワードは適宜設定してください。

**また、ユーザ名とパスワードは後ほど接続文字列を設定する際に利用するので、どこかに書き留めておいてください。**
![スクリーンショット 2020-10-26 19.27.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/d956bc43-c398-3a3c-cd59-e61a7e2670ae.png)

###DB インスタンスサイズ
無料枠なのでdb.t2.microのみ有効です。
そのまま進みましょう。
![スクリーンショット 2020-10-21 3.31.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/d82e6f7b-9482-bef0-03b1-5af7a5ba91ac.png)

###ストレージ
ストレージタイプ、ストレージ割り当てはそれぞれデフォルト値でOKです。
ストレージの自動スケーリングについては、万が一なにか起こった場合にスケールされるのを防ぐため、一応チェックを外しておきました。
![スクリーンショット 2020-10-26 19.35.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/8bbb045e-b4ae-7bd8-0cc1-a38d56d22ec2.png)

###可用性と耐久性
このセクションは無料枠の場合特に設定できる項目がないので次に進みます。

###接続
RDSのインスタンスを配置するVPCを選択してください。
要件として、VPC内に別々のアベイラビリティゾーンに属するサブネットが最低2つ必要です。
![スクリーンショット 2020-10-21 3.33.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/84ffb2b2-e3f4-c425-dc5f-56979798c096.png)

次に、追加の接続設定を編集していきます。

| 設定名 |  設定値 |
|:--|:--|
| サブネットグループ | デフォルト値 |
| パブリックアクセス可能 | なし|
| VPCセキュリティグループ | 事前に作成したセキュリティグループ|
| アベイラビリティゾーン | 指定なし |
| データベースポート | 3306 |

※VPCセキュリティグループについてはポート3306が開いている必要があります。

![スクリーンショット 2020-10-26 19.50.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/a98f4a60-a889-a69b-7e39-82e60a7c5a0c.png)

###データベース認証
パスワード認証を設定します。
![スクリーンショット 2020-10-21 3.35.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/0646749f-ebea-fc45-fe7d-388c1964beed.png)

###追加設定
最初のデータベース名に`asp_net_sample`を入力し、それ以外は全て無効に設定します。

![スクリーンショット 2020-10-21 3.36.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/7b2655b6-1652-542f-3d3e-81e0270e7bb6.png)
![スクリーンショット 2020-10-21 3.36.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/b29ed5eb-7188-388c-d92b-fd9e042d5d86.png)

---

設定後、データベースの作成を押下するとインスタンスの作成が開始されます。

#接続文字列をServiceの環境変数に記述
最後に[前回](https://qiita.com/ashicom/items/c91d65dd5b3a2d23c7ae)作成したアプリケーションからRDSインスタンスを参照できるように、Serviceの環境変数を編集します。

EC2インスタンスにSSH後、以下コマンドを実行します。

```
$ sudo vim /etc/systemd/system/kestrel-asp-net-app.service

#Environment=ASPNETCORE_ENVIRONMENT=Production以下に追加
Environment=DB_CONNECTION_STRING=server=サーバのエンドポイント;uid=admin;pwd=パスワード;database=asp_net_sample
Environment=ELASTIC_SEARCH_SERVER=http://localhost:9200
```

`Environment=ELASTIC_SEARCH_SERVER=http://localhost:9200`
これについては何かしら入れておかないとエラーになるため、ダミーでもいいので追加しておきます。
Elasticsearchのドメインがある場合はそのURLを記入しましょう。
Elasticsearch Serviceについては[こちら](https://qiita.com/ashicom/items/cc45c1cdcb545e242035)。

設定後、反映のためEC2インスタンスを再起動します。

#確認
ローカルマシンにて`http://サーバIP/`をブラウザで開いてください。
RDSインスタンスが作成されたばかりでテーブルが存在していないので、`環境の初期化`を押下します。
以下のような画面が表示されれば正常に動作しています。
![スクリーンショット 2020-10-27 0.05.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562139/54076423-1212-50d2-6c54-2f23fafebbb0.png)