[無料] AWS EC2 + RDS + Flask でWebアプリを作り HTTPS 化する [データベース編 その1]

Webアプリで使うためのリレーショナルデータベースを AWS RDS で作成します。私はスキーマレスなNoSQLにしか興味ない、という人は読み飛ばして下さい。そのうち無料で使えるキーバリューストア型データベースの DynamoDB との比較記事も書くかもしれません。


## インスタンス作成
**Amazon RDS** のページに入り、真ん中らへんの **Create database** します。
![Screen Shot 2563-12-15 at 14.26.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/98a46740-6551-64f6-4653-8c0f4ceac35e.png)
**Standard create** で良いです。
![Screen Shot 2563-12-15 at 14.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/3204fdd9-14b7-5e57-e565-51195a401709.png)
エンジンを選びます。主要なものは全て揃っています、**MySQL、MariaDB、PostgreSQL、Microsoft SQL Server の4つが無料で、Oracle と Amazon Aurora は無料枠対象外です**。Aurora は MySQL/Postgre 完全互換で、本家よりも数倍速いとの謳い文句ですので、興味がある方は試してみると良いかもしれません。ただし、**バージョンが限られる**ことに気をつけて下さい。私はリレーショナルデータベースをあえて正規化せずに NoSQL のように運用することがあるのですが、その際に MySQL8.0 の `JSON_TABLE` という関数を多用します（そのうち余裕があれば**転置インデックス**の話もします）。ですが Amazon Aurora でサポートしているのは MySQL5.7 までですので、オリジナルの MySQL をエンジンとして選ばざるを得ません。window 関数なんかも確か 5.7 では使えないはずです。まあ一般的な CRUD のみであればバージョンはそこまで気にする必要はありません。今回は MySQL8.0 を選択します。
![Screen Shot 2563-12-15 at 15.00.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/cbf093f6-48b6-d320-99ed-c93f9166233a.png)
**Free tier** を選びます。
![Screen Shot 2563-12-15 at 15.02.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/0991197f-ab1e-3595-66cc-8fbbd3f9269e.png)
データベース名、ユーザー名、パスワードなどを決めます。DBインスタンスは無料利用枠では選択不可です。
![Screen Shot 2563-12-15 at 15.03.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/016b9bf2-0219-e9bb-b44a-96bc7e442cb3.png)
**Strage** は 20GB もあれば十分ではないかと思います。
![Screen Shot 2563-12-15 at 15.05.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/ab31099c-1bd2-f523-535f-aa4a2c427874.png)
**Public access** は **Yes** にしておかないと、EC2以外の外部からアクセスできなくなります。全て作り終わった後に設定をアクセス不可に戻せば良いです。
![Screen Shot 2563-12-15 at 15.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/a337d126-251e-95c7-a930-c0b0af6b1442.png)
セキュリティーグループは その2 で設定済の default を選べば良いです。一番右下の **Create database** します。
![Screen Shot 2563-12-15 at 15.08.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/62a1213f-af13-b167-d08c-f77afd3a4fd1.png)
データベースの作成には少し時間がかかります。ステータスが **Available** になれば使えます。
![Screen Shot 2563-12-15 at 15.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/c6294f5e-c006-87c1-62d9-5968a418d0f3.png)
データベース名を押すと詳細が出ます。このエンドポイントと、先ほど入力したユーザー名・パスワードでデータベースにアクセスできます。
![Screen Shot 2563-12-15 at 15.22.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/9ae6036a-98a7-f1d4-73d7-00895f0255bf.png)

## 接続例

> MySQL Workbench

Hostname に先ほどのエンドポイントを入力し、Username と Password を入れて Test Connection し、Success と出れば接続できています。
![Screen Shot 2563-12-15 at 15.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/e5ba7724-ac04-219a-8c37-ae61e9f51aff.png)
外部からでも問題なく使えます。
![Screen Shot 2563-12-15 at 16.02.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/4cd4f72c-6d8c-4b0f-f3b5-11eb57765cdf.png)

> VScode

MySQL Workbench のような統合GUIは、設定をいじったりER図を書くときなどには非常に重宝しますが、コーディングしながら、VScode内からそのままクエリを投げたいときもあります。この MySQL 用の Extension を導入します。
![Screen Shot 2563-12-15 at 16.10.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/da4cafac-2d87-38b9-c79d-0cb14d2617bb.png)
左側にデータベースのアイコンが追加されます。上の➕から接続を追加できます。
![Screen Shot 2563-12-15 at 16.11.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/4851acd8-701a-b9e4-f331-21702ccb5c4a.png)
同様にエンドポイント、ユーザー名、パスワードを入れて接続します。
![Screen Shot 2563-12-15 at 16.13.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/376082c1-0b7e-4b2e-a0a1-330415e86692.png)
`.sql` ファイルならシンタックスハイライトもされます。F9キーでクエリを実行できます。し、右側のフィールドで実行することも可能です。便利すぎます。
![Screen Shot 2563-12-15 at 16.24.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/727634/bc14bcf1-9f3c-cf52-b99c-15d815921d12.png)