[初心者向け]VPC作成からRDS接続までをそこそこ丁寧にまとめてみる。③RDS作成から接続まで

# 前回までの記事
本記事の趣旨及びVPCの作成を解説しています。
[[初心者向け]VPC作成からRDS接続までをそこそこ丁寧にまとめてみる。①VPC作成まで](https://qiita.com/kmmz/items/53b4fbd64ccbfcaf9ee0)

EC2の作成からSSH接続までを解説しています。
[[初心者向け]VPC作成からRDS接続までをそこそこ丁寧にまとめてみる。②EC2作成～SSH接続まで](https://qiita.com/kmmz/items/2920659fbe7ad2b0ef5f)

今回の記事で最後です。パパパッと作成してみましょう！

# 4.RDS作成

 RDS（Amazon Relational Database Service）は、名前の通りリレーショナルデータベースです。もう少し厳密に言うと、6種類のDBMS(データベースマネジメントシステム)を、クラウド上で動かすことができるサービスです。

|費用|名称|  
|:---|:--|
|有償|「Amazon Aurora」「OracleDatabase」「SQL Server」|
|無償|「MySQL」「MariaDB」「PostgreSQL」|
の、計6つのソフトウェアが対応しています。




::: note info
有償のソフトウェアは、ライセンス込みのインスタンスを利用することでライセンス料がAWSの利用料金に含まれるようになります。別途ライセンスを用意する必要はありません。
もちろん、ライセンスを持ち込んでRDSを利用することも可能です。
:::

詳しくはブラックベルトなど、公式ドキュメントを参照するのが一番だと思います。

この記事では、MySQLを選択してRDSを作成します。

RDSの作成には、**サブネットグループ**と**RDS用のセキュリティグループ**が必要です。
順に作成してみます。

早速作りましょう！

## 4-1 プライベートサブネットの作成

RDSをプライベートサブネット上に設置するので、まず最初にプライベートサブネットを2つ作成します。
パブリックサブネット作成の際に一緒に作成してもよかったのですが、分かり易さを考慮してここで作成することにしました。

実を言うと、今回のRDSを**1つ**しか配置しない（シングルAZ）シンプルな構成図ではプライベートサブネットは**2つ**必要です。

？？！！！？？？？？！！？？？？ 

プライベートサブネットが2つ必要な理由は、なんでしょうかね……。公式ドキュメントを見ても「サブネットが2つ必要です！（断定）」なだけで、理由が見つからないんですよ。
順当な予想では、マルチAZでの構成が前提として考えられているからなのではないかと思います。
どなたか分かる方は、教えてくださると有難いです。

>ちなみに、こちらを参考にさせて頂きました。サブネットグループについて知りたい方は、こちらで確認してみて下さい。
>[RDSってなんでAZ(Availability Zone)を指定する項目がふたつあるの？](https://dev.classmethod.jp/articles/rds-has-two-configs-concerning-availability-zone/)

気を取り直して、サブネットグループのためのプライベートサブネットを作成します。
要領は、「2-1 パブリックサブネットの作成」の項でパブリックサブネットを作成したのと同じです。

「サブネットの設定」の画面まで進んでください。

![prisub1](https://user-images.githubusercontent.com/91016271/145338361-7ed184f1-9bda-472f-b5e7-d01314b00f56.png)

・VPC
作成したVPCを選択して下さい。

・サブネット名：
形式はパブリックサブネットの名前と同様にすると整理し易いと思います。
例：`pri（プライベートサブネットの頭文字）-AZ-プロジェクト名-作成年月`

・アベイラビリティーゾーン：
EC2と連携してRDSを動かすため、EC2のパブリックサブネットと同じAZの組み合わせを選択するのが無難です。

・IPv4 CIDRブロック:
CIDRはパブリックサブネットと同じものにします。
VPC内の計3つ目のサブネットなので、`10.0.2.0`とします。
念のため、1つ目のサブネットが「0」なので、3つ目は「2」です。

・キー：
これまで通り、
`Name`と`名前`の組み合わせです。

続けて2つ目も作成します。「新しいサブネットを追加」をクリックして下さい。

![prisub2](https://user-images.githubusercontent.com/91016271/145341396-80520fb9-ceff-4348-825d-a65d7d5b26ac.png)

・サブネット名：
1つ目と同じ要領です。

・アベイラビリティーゾーン：
1つ目と違うAZを選択します。パブリックサブネットのAZと同じ組み合わせになるようにして下さい。


・IPv4 CIDRブロック:
VPC内の計4つ目のサブネットなので、`10.0.3.0`とします。

・キー：
これまで通り、
`Name`と`名前`の組み合わせです。

間違いがないか確認をしたら、「サブネットを作成」をクリックします。

プライベートサブネットなので、IPとの関連付けなどの操作は必要ありません。
このままサブネットグループを作成します。


## 4-2 サブネットグループの作成

![dbsub](https://user-images.githubusercontent.com/91016271/145345697-6a9d075d-0124-4e59-9f26-0578c47df721.png)

RDSの画面から、「サブネットグループ」を選択します。「DBサブネットグループを作成」をクリックします。

![dbsubname](https://user-images.githubusercontent.com/91016271/145346051-16cc0b6d-b692-4994-8633-1b55c44398e9.png)

・名前：
これまでのパターン通りです。
例：`sbg(サブネットグループ)-プロジェクト名-作成年月`

・説明：
名前のコピペで大丈夫です。

・VPC：
作成したVPCを選択します。

![dbsubcre](https://user-images.githubusercontent.com/91016271/145346425-22ab97b2-88cb-4f1b-a382-89b2dadc62cd.png)

・アベイラビリティーゾーン：
プライベートサブネットのAZを**2つ**選択します。

・サブネット
作成したプライベートサブネットを2つとも選択します。
選択候補にキー名が出てこないので、サブネットが目的のものかVPCのダッシュボードなどで確認をしておいた方が安心です。不親切！

間違いがないか確認をしたら、「作成」をクリックします。

サブネットグループはこれで完成です！
次はセキュリティグループを作成します。

## 4-3 セキュリティグループの作成

VPCの画面から「セキュリティグループを作成」をクリックします。

![sec](https://user-images.githubusercontent.com/91016271/145348190-340a8076-4582-418a-a483-438638cebe3c.png)

・セキュリティグループ：
`securitygroup-rds-Qiita-202112`
のようにrdsという単語を入れておくと識別の際に便利です。

・説明：
セキュリティグループ名と同じで。

・VPC：
作成したVPCを選択します。

・インバウンドルール：
肝の部分です。
RDSへはEC2を経由してアクセスします（RDSをプライベートサブネット上に配置するため）。
そのため、EC2からのアクセスを許可しましょう。
対象のEC2以外からのアクセスを許可しない設定とも言えます。

・タイプ：
RDSに使用するDBMSを選択します。くっついてくるAuroraは気にしなくていいです。

・ソース：
EC2のセキュリティグループを選択します。

・説明：
このDBMSを使ってるよ～、というのがぱっと見て分かるようにします。

インバウンドルールの設定は以上です。
アウトバウンドルールは特に設定しません。
タグはこれまで通り、`Name`キーで値は名前と同じものを入れて下さい。
「セキュリティグループを作成」をクリックします。

RDS用のセキュリティグループが作成されました！
準備が済んだので、次はいよいよRDSを作成します。

## 4-3 RDSの作成

RDSの画面から「データベースを作成」をクリックします。

![dbmysql](https://user-images.githubusercontent.com/91016271/145381666-7e3c5189-0397-4af8-9f85-f17b92e55a8d.png)

今回は`標準作成`で作成します。

・エンジンのタイプ：
この記事ではMySQLで進めます。
当然ですが、セキュリティグループで許可したDBMSと同じものでないと、アクセスができません。

![rdsver](https://user-images.githubusercontent.com/91016271/145382294-30d67c62-4a3a-48f6-b6a8-c97d1be9ce87.png)

・バージョン：
古いものを選択する理由もないので、最新のものを選択します。

・テンプレート：
`無料利用枠`にチェックを入れておくと、うっかり有料サービスを選択してしまうのを防ぐことができます。

・DBインスタンス識別子：
RDBインスタンスの名前です。
あくまでコンソール上でのインスタンスの識別に使う名前であり、データベースそのものの名前ではありません。
ご自身で識別可能なものを付けて下さい。
例：`rds-エンジンのタイプ-プロジェクト名-作成年月`

![rdsuser](https://user-images.githubusercontent.com/91016271/145382949-5a39d4d1-6f84-42f2-a77d-af1fee6afbbf.png)

・マスターユーザー名：
RDSへのアクセスに使用します。今回は練習なので`admin`でも大丈夫です。

・パスワード：
RDSへのアクセスに使用します。
自動生成にチェックを入れておくと、RDS作成時にAWSがパスワードを生成してくれます。
自動生成のものを利用しておけば、安心と言えば安心です。

DBインスタンスクラスとストレージは、無料利用枠では選択肢がないのでそのままにしておきます。
それと画像では項目が見切れてしまいましたが、無料利用枠ではマルチAZを利用できません。とてもかなしい。

![rdssec](https://user-images.githubusercontent.com/91016271/145384006-9acc941d-579f-499f-8872-51ec91b9ea9f.png)

・VPC：
作成したものを選択します。

・サブネットグループ：
作成したものを選択します。

・パブリックアクセス：
接続はEC2経由のみを許可する構成のため、`なし`を選択します。

・セキュリティグループ：
RDS用に作成したものを選択します。うっかりEC2用と間違えないようにしましょう。

![rdsaz](https://user-images.githubusercontent.com/91016271/145383686-89dfcf4c-c9e7-4be5-ab92-5f37deff4cbb.png)

・アベイラビリティーゾーン：
シングルAZ構成なので、どこのAZに配置するのかを選択する必要があります。サブネットグループで指定したAZのみを選択できるかと思いますが、2つ内どちらでも構わないです。

・追加設定：
放置。データベースのポート番号の変更ができますが、変える理由もないです。

・データベース認証：
IAMロールなどは作成していないので、`パスワード認証`を選択します。

![rdsdb1](https://user-images.githubusercontent.com/91016271/145386769-1eeb7a67-94ea-402a-b5bd-e22cc463d1b9.png)

・追加設定：
「最初のデータベース名」を入力しておくと、RDS作成時にAWS側データベースを作成してくれます。言い換えると、ここを入力しないと作成してくれません。

残りの項目はこの記事ではスルーします。

ここまで入力して間違いがないか確認を終えたら、「データベースの作成」をクリックします。

![dbkey](https://user-images.githubusercontent.com/91016271/145387669-ac3dee2e-53b3-441c-b4a4-661295efc924.png)

RDSの作成が完了しました（作成中）！
パスワードの自動生成を選択した場合、ここでパスワードを確認することができます。ここでしか確認をすることができないので、忘れずに「認証情報の詳細を表示」をクリックしましょう。~~油断したところを仕留めにかかってくるAWSくん。~~

最後にRDSへの接続を行います！


# 5. RDS接続

上述の通り、RDSへの接続はEC2を経由して行います。
その辺の理由が理解しにくい場合は、冒頭のAWS構成図を確認すればなんとなく掴めるかもしれません。

まあEC2への接続方法さえ分かってしまえば、あとは簡単です。
RDSへの接続の流れとしてはこんな形となります。

|順番|内容|  
|:---|:--|
|1.|EC2へmysqlをインストール。|
|2.|RDSへの接続。|
|3.|以上|


それでは1からやってみましょう！

## 5-1 EC2へmysqlのインストール

RDSへアクセスするには、EC2へデータベースをインストールしておく必要があります。
ここはちょっと首を傾げてしまうポイントかもしれません。
まぁ、RDSへのセキュリティグループで、EC2のmysqlからのみ許可を行ったということは、mysqlが必要だということです（トートロジー）。

mysqlはEC2へ直接インストールします。
テラタームでもなんでもいいので、EC2へアクセスしてください。
mysqlをインストールするコマンドは色々あるとは思うのですが、私は以下の手順で行いました。
>こちらを参考にさせて頂きました。
>[AWS（EC2環境）でMySQLの構築のやり方](https://www.acrovision.jp/service/aws/?p=2387)

```
$ sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
```

だら～となんかインストールされて最後に`Complete!`と言われたら、次のコマンドです。

```
$ sudo yum install -y mysql-community-server
```
だら～となんかインストールされて最後に`Complete!`と言われたら、mysqlが本当にインストールされたのか確認をします。

```
$ mysql --version　
```
バージョンが表示されるということは、正常にインストールが完了したということでもあります。

RDSへ接続するためのmysqlの環境構築はこれだけで大丈夫です。
参考の記事にあるような起動確認を行う必要もありません（しても問題はありません）。

それではいよいよRDSへのアクセスをします！

## 5-2 RDSへ接続

RDSへアクセスするには、アクセスしたいRDSの**エンドポイント**というものが必要です。
ここで言う'エンドポイント'とは'DNS名'のことを指します。

「DNSとはなんぞ？」という向きは、安定の佐々木真氏のサイトが分かり易いと思います。

>参考
>[DNSとは](https://wa3.i-3-i.info)

エンドポイントは、RDSの自動生成パスワードを生成したときにクリックした「認証情報の詳細を表示」から確認することができます。

「早く言えよ！」となった方は、RDSのコンソールからも確認することができるので安心して下さい。できなきゃAWSは本気で仕留めにかかってきています。

![エンドポイント](https://user-images.githubusercontent.com/91016271/145513322-8547f9b5-6883-4e6a-8bde-6f03fc54ebb0.png)

エンドポイントをコピペできる状態にしたら、ログインをする準備は整いました！
EC2の方に戻ります。
以下の呪文を打ち込みます。

```
$ mysql -u ユーザー名 -p -h RDSのエンドポイント
```

・ユーザー名：
RDSの作成画面で入力したユーザー名のことです。デフォルトのままだと、`admin`です。

・RDSのエンドポイント：
長い。積極的にコピペします。「なんかテラタームでペーストが上手くできないんだけど！」という場合は、`Alt+v`で行うと上手くいくかもしれません。

入力を終えたら、'マスターパスワード'を求められると思います。自動生成した方は、それを入力しましょう。
入力をしても画面にはパスワードが反映されませんが、そういう仕様です。きちんと入力自体は行われているので、Enterを押してしまって大丈夫です。

成功画面
![接続できました.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2338398/8cdee386-2d79-b28d-a1b5-ee23fefcaa39.png)

これでRDSへのアクセスは完了です！
ここまでお疲れさまでした！

ちなみに、RDSからEC2に戻りたい場合は、`exit`と入力すればokです。
`Bye`とだけ言われます。センスが光る。

# おわりに

一度流れさえ掴んでしまえば、この記事の内容ならパパッとできるようになると思います！

「ここ間違ってるよ～」という部分は、私の勉強にもなるので指摘してくだされば有難いです。

この記事が少しでも役に立てば幸いです。