AWS: AWS入門(RDS編1) - MySQLデータベースを作成する


###### 実施環境
Windows 11 Home Version 21H2
Microsoft Edge 131.0.2903.51 (64bit)
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
Tera Term Version 4.106

### 0. 概要

過去記事で、「 DynamoDB 」という AWS のデータベースサービスを紹介しました。

https://qiita.com/frozencatpisces/items/80753dd69e5c867bfd72

この DynamoDB は以前から広く用いられている RDB とは異なる、 NoSQL という種類のデータベースです。
では RDB は AWS で利用できるのかというと、 DynamoDB とは別の「 Amazon Relational Database Service ( RDS ) 」というサービスで利用することが可能です。
今回はこの RDS で、 MySQL のデータベースを作成してみます。

無料枠の範囲で利用する場合は、 AWS アカウント作成からなら 12 か月は、毎月 750 時間までインスタンスを起動できます。
その他にも細かい条件がありますが、詳細は以下の Web サイトを参照してください。

https://aws.amazon.com/jp/rds/pricing/

なお、最新の操作方法は以下の AWS 公式ドキュメントを参照してください。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html

### 1. データベース接続用インスタンス起動 ( 事前準備 )

データベースの作成前に、データベース接続用の環境を用意します。
手持ちの端末にクライアントをインストールしてもよいのですが、今回は EC2 インスタンスをデータベース接続用に構築することとします。

まずは以下の過去記事を参考に EC2 でインスタンスを起動しましょう。

https://qiita.com/frozencatpisces/items/5e1acb955e3ebb6f4e31

今回は AMI として「 Amazon Linux 2023 AMI 」を選択しました。

![WS000110.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/528eabcb-5029-f644-2ee7-b320a212fbf2.jpeg "1_1")

また、キーペアのタイプには ED25519 を使用しました。

![WS000111.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/28016b8a-6a8c-1863-884e-2c264739b828.jpeg "1_2")

インスタンスを立ち上げたら、以下の過去記事を参考に立ち上げたインスタンスへ接続します。

https://qiita.com/frozencatpisces/items/2a066a36dccee4f886c8

:::note warn
 Amazon Linux 2023 において注意するべき点の 1 つとして、 Amazon Linux 2 では利用できていた従来の ssh-rsa 鍵が Amazon Linux 2023 のデフォルトでは利用できないという点が挙げられます ( ssh-ed25519 鍵は利用可能 )。
 RSA 鍵を利用する場合は、 SSH クライアントが rsa-sha2-256 か rsa-sha2-512 をサポートしている必要があります。

https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/ssh-host-keys-disabled.html

例えば Teraterm の場合、 rsa-sha2-256 , rsa-sha2-512 のサポートは Ver 5.0 から、 ED25519 のサポートは Ver 4.83 からです。

https://teratermproject.github.io/manual/5/ja/about/history.html

そのため、古い Teraterm で Amazon Linux 2023 の EC2 サーバに接続しようとすると、以下のようにエラーとなります。

![WS000145.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/31d3dd8a-3ed8-f5fc-7af1-18b55b0914a4.jpeg "0_1")
:::

### 2. データベース接続用インスタンス構築 ( 事前準備 )

次に、データベース接続のためのクライアントをインストールしていきます。
まずは、インストール済みのパッケージを最新化しましょう。

```Linux:Amazon Linux 2023
[ec2-user@*** ~]$ sudo dnf update -y
Last metadata expiration check: 5:24:12 ago on Sat Nov 23 01:44:21 2024.
Dependencies resolved.
Nothing to do.
Complete!
[ec2-user@*** ~]$
```

最新化が完了したら、以下のコマンドで MySQL のクライアントをインストールします。

```Linux:Amazon Linux 2023
[ec2-user@*** ~]$ sudo dnf install mariadb105
Last metadata expiration check: 5:25:05 ago on Sat Nov 23 01:44:21 2024.
Dependencies resolved.
(省略)

Complete!
[ec2-user@*** ~]$
```

これで、データベースへの接続環境が準備できました。

:::note info
上記でインストールしている「 mariadb105 」は、正確に言えば MySQL ではなく「 MariaDB 」という別の RDB のバージョン 10.5 のソフトウェアです。
 MariaDB は MySQL の派生で互換性があるため、上記でリンクを貼っている AWS 公式ドキュメントでは MariaDB のクライアントが MySQL へのクライアントとして採用されています。
 MySQL のクライアントもやろうと思えばインストールはできますが、公式リポジトリには含まれておらず AWS のサポートも受けられないため、特に理由が無ければ MariaDB のクライアントを使ったほうが無難です。

https://aws.amazon.com/jp/compare/the-difference-between-mariadb-vs-mysql/
:::

:::note info
勘違いしがちですが、 EC2 から DynamoDB に接続するときと異なり、 EC2 から RDS に接続する際には IAM ロールは必要ありません。
これは、 DynamoDB へのアクセスには AWS の API が用いられるのに対し、 RDS は MySQL や Oracle などの個別のリレーショナルデータベースマネジメントシステム ( RDBMS ) のコマンドやツールで接続するためです。
 IAM は AWS の API に対して権限を設定するものであるため、 RDS への接続で使う RDBMS のコマンドやツールについては IAM の制御の対象外となります。
 EC2 への SSH 接続に IAM ロールが不要であるのも同じ理由です。
:::

### 3. データベース一覧

:::note info
これ以降の操作は、 RDS の操作に対して権限があるユーザで実行してください。
例えば「 AmazonRDSFullAccess 」というポリシーを付与したユーザを使用すると、 RDS の機能全体を利用することができます。

![WS000104.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/c23123dd-59ee-ce1a-76f6-97c656abb405.jpeg "0_2")

さらに、今回のデータベース作成では「 EC2 への接続設定」「監視用 IAM ロールの作成」を伴うため、「 AmazonRDSFullAccess 」だけでは EC2 と IAM の権限が不足します。
そのため今回は以下のように、「 AmazonEC2FullAccess 」「 IAMFullAccess 」も付与したユーザを使用して操作を行いました。

![WS000141.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e548b239-3281-055c-b7dd-66a7be912262.jpeg "0_3")
:::

さて、準備もできたところでデータベースの作成に移ります。

まずは、 RDS の画面へ移動します。

![WS000105.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/67f92a25-fa97-d693-f22f-7ea0562c2a30.jpeg "3_1")

次に、左側のメニューから「データベース」を選択します。

![WS000106.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/23377e22-744f-67ac-732c-029a21cbd8bb.jpeg "3_2")

データベース一覧が表示されました。

![WS000112.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/eba82df7-8e3d-2860-5b82-789c319613bd.jpeg "3_3")

### 4. データベース作成

データベースを作成するには、「データベースの作成」をクリックします。

![WS000112.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/70141e18-c326-7a10-37c0-99b6b8374d3c.jpeg "4_1")

作成方法ですが、今回は細かい設定をするつもりはないので「簡単に作成」にします。

![WS000114.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3a5c3880-cce3-7866-8dd1-b7ca81c66b1d.jpeg "4_2")

エンジンのタイプですが、今回は「 MySQL 」を選択します。

![WS000115.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d6aa7899-5a01-5fee-d425-735db7306ea6.jpeg "4_3")

 DB インスタンスサイズでは今回「無料利用枠」を選択します。

![WS000117.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bad0aa5d-91b3-31b9-bfca-bd42caf794b9.jpeg "4_4")

:::note warn
無料利用枠が利用できるのは「 MySQL 」と「 PostgreSQL 」「 MariaDB 」だけです。「 Oracle 」「 Microsoft SQL Server 」及び「 Aurora 」では無料利用枠は利用できません。
:::

インスタンス名とマスタユーザ名を適当に入力します。

![WS000118.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/6e3dfde7-a3e5-f2cc-57eb-48f3ec25b26b.jpeg "4_5")

パスワードは「セルフマネージド」にして、適当なパスワードを設定します。

![WS000119.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4ffc21a5-042b-9378-f12f-ef97d16d8ee4.jpeg "4_6")

:::note warn
もう 1 つの選択肢である「 AWS Secrets Manager 」はパスワードなどの認証情報を管理する AWS のサービスで、 RDS とは別料金になります。

https://aws.amazon.com/jp/secrets-manager/
:::

ここまでの設定だけでもデータベースは作成できますが、今回は EC2 から接続するため、接続用の設定が必要となります。
「 EC2 接続をセットアップする」をクリックしてください。

![WS000120.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/afb4463e-c73a-9d64-11d9-18dabefe6627.jpeg "4_7")

:::note info
 EC2 接続のセットアップはデータベース作成後からでも実行できます。
:::

「 EC2 コンピューティングリソースに接続」をクリックします。

![WS000121.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bdd428ca-853a-e31a-ea5f-1a89c061381a.jpeg "4_8")

「 EC2 インスタンス」に、先ほど作成したデータベース接続用のインスタンスを選択します。

![WS000130.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/66c890ec-71b6-7bc0-576b-4a09561bc083.jpeg "4_9")

:::note warn
ここで EC2 インスタンスの選択肢が表示されない場合は、 EC2 の権限が不足しているか、そもそも EC2 インスタンスが立ち上がっていない可能性があります。

![WS000139.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/7cf47b26-3269-da3c-4212-659948db3f72.jpeg "0_4")
:::

「データベースの作成」をクリックします。

![WS000131.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/cb901eda-c692-dd7e-6a74-ba4bb7cd24de.jpeg "4_10")

:::note info
作成をクリックした後以下のような画面が出ることもありますが、そのまま何もせず「閉じる」をクリックして閉じて大丈夫です。

![WS000132.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/5f341de7-ec2b-8c74-b2ba-945f0cac0bbb.jpeg "4_11")
:::

データベースの作成には少々時間がかかります。
サイズが大きい場合は最長 20 分かかることもあるので、気長に待ちましょう。

![WS000133.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/03448652-8400-cb1d-3371-36ae42cc355c.jpeg "4_12")

以下のようなメッセージが出たら完了です。

![WS000134.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4b4dbd42-7c0c-d17d-2d09-f4e7f35149b5.jpeg "4_13")

:::note warn
 IAM の権限が不足していた場合、以下のように監視用ロールの作成に失敗した旨のエラーメッセージが出力されることもあります。
 
![WS000143.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/532d5303-7939-94d4-c2db-91a2c7c3aa44.jpeg "0_5")

ただ、上記のエラーメッセージが出力されても、インスタンスの監視ができなくなるだけで、インスタンスの作成自体は行われるようです。
そのため、エラーが出たからといって、インスタンスが作られなかったものと思い込み、インスタンスを削除し忘れることのないように注意しましょう。
:::

### 5. データベース接続

これでデータベース本体とデータベースに接続する環境の両方がそろったので、早速データベースに接続しましょう。

まずは作成したデータベースを一覧から選択して、「接続とセキュリティ」タブにある「エンドポイント」と「ポート」を確認します。

![WS000135.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/4ba68132-61b9-b5d7-ad33-ac2756d7497a.jpeg "5_1")

![WS000137.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3a33feb5-3699-65fb-136a-3b0c120da0ba.jpeg "5_2")

上記で確認したエンドポイントとポート、そしてデータベース作成時に設定したマスタユーザ名とパスワードを使用して、以下のコマンドを事前に作成した EC2 インスタンス上で実行します。

```Linux:Amazon Linux 2023
[ec2-user@*** ~]$ mysql -h エンドポイント -P ポート -u マスタユーザ名 -p
Enter password: パスワード
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is ***
Server version: 8.0.39 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>
```

これで先ほど作成したデータベースにアクセスできました。
適当な SQL 文を実行してみます。

```Linux:Amazon Linux 2023
MySQL [(none)]> SELECT CURRENT_TIMESTAMP;
+---------------------+
| CURRENT_TIMESTAMP   |
+---------------------+
| 2024-11-23 07:16:33 |
+---------------------+
1 row in set (0.001 sec)

MySQL [(none)]>
```

データベースへの接続を終了するときは、 exit コマンドを実行します。

```Linux:Amazon Linux 2023
MySQL [(none)]> exit
Bye
[ec2-user@*** ~]$
```

### 6. データベース削除

データベースを削除する場合は、一覧で削除したいデータベースを選択して「アクション」⇒「削除」をクリックします。

![WS000125.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/115f8d5f-b9e2-c124-310e-ffdaaa29e8a5.jpeg "6_1")

デフォルトの設定だと削除前にバックアップが作成されます。
バックアップの保存にも料金がかかるため、バックアップが不要な場合はチェックを外します。

![WS000126.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d30d7bdf-995b-c99c-5c5f-2ced508980c1.jpeg "6_2")

バックアップを作らない場合はバックアップの不要確認にチェックを入れます。
「 delete me 」と入力し、「削除」をクリックすることでデータベースが削除されます。

![WS000128.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/f66476b5-2222-e6c3-3fa5-0df01e5629a9.jpeg "6_3")

データベースは削除にも少々時間がかかります。

![WS000138.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/f3a6fab5-e846-3e50-c496-20bfaf908310.jpeg "6_4")

以下のようなメッセージが表示されたら完了です。

![WS000129.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/98d05576-e04f-4a3c-42c6-4e1c38bc7635.jpeg)

[戻る](https://qiita.com/frozencatpisces/items/75bf3e19f6328786e336)