実施環境
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 のデータベースサービスを紹介しました。
この DynamoDB は以前から広く用いられている RDB とは異なる、 NoSQL という種類のデータベースです。
では RDB は AWS で利用できるのかというと、 DynamoDB とは別の「 Amazon Relational Database Service ( RDS ) 」というサービスで利用することが可能です。
今回はこの RDS で、 MySQL のデータベースを作成してみます。
無料枠の範囲で利用する場合は、 AWS アカウント作成からなら 12 か月は、毎月 750 時間までインスタンスを起動できます。
その他にも細かい条件がありますが、詳細は以下の Web サイトを参照してください。
なお、最新の操作方法は以下の AWS 公式ドキュメントを参照してください。
1. データベース接続用インスタンス起動 ( 事前準備 )
データベースの作成前に、データベース接続用の環境を用意します。
手持ちの端末にクライアントをインストールしてもよいのですが、今回は EC2 インスタンスをデータベース接続用に構築することとします。
まずは以下の過去記事を参考に EC2 でインスタンスを起動しましょう。
今回は AMI として「 Amazon Linux 2023 AMI 」を選択しました。
また、キーペアのタイプには ED25519 を使用しました。
インスタンスを立ち上げたら、以下の過去記事を参考に立ち上げたインスタンスへ接続します。
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 サーバに接続しようとすると、以下のようにエラーとなります。
2. データベース接続用インスタンス構築 ( 事前準備 )
次に、データベース接続のためのクライアントをインストールしていきます。
まずは、インストール済みのパッケージを最新化しましょう。
[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 のクライアントをインストールします。
[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@*** ~]$
これで、データベースへの接続環境が準備できました。
上記でインストールしている「 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/
勘違いしがちですが、 EC2 から DynamoDB に接続するときと異なり、 EC2 から RDS に接続する際には IAM ロールは必要ありません。
これは、 DynamoDB へのアクセスには AWS の API が用いられるのに対し、 RDS は MySQL や Oracle などの個別のリレーショナルデータベースマネジメントシステム ( RDBMS ) のコマンドやツールで接続するためです。
IAM は AWS の API に対して権限を設定するものであるため、 RDS への接続で使う RDBMS のコマンドやツールについては IAM の制御の対象外となります。
EC2 への SSH 接続に IAM ロールが不要であるのも同じ理由です。
3. データベース一覧
さて、準備もできたところでデータベースの作成に移ります。
まずは、 RDS の画面へ移動します。
次に、左側のメニューから「データベース」を選択します。
データベース一覧が表示されました。
4. データベース作成
データベースを作成するには、「データベースの作成」をクリックします。
作成方法ですが、今回は細かい設定をするつもりはないので「簡単に作成」にします。
エンジンのタイプですが、今回は「 MySQL 」を選択します。
DB インスタンスサイズでは今回「無料利用枠」を選択します。
無料利用枠が利用できるのは「 MySQL 」と「 PostgreSQL 」「 MariaDB 」だけです。「 Oracle 」「 Microsoft SQL Server 」及び「 Aurora 」では無料利用枠は利用できません。
インスタンス名とマスタユーザ名を適当に入力します。
パスワードは「セルフマネージド」にして、適当なパスワードを設定します。
もう 1 つの選択肢である「 AWS Secrets Manager 」はパスワードなどの認証情報を管理する AWS のサービスで、 RDS とは別料金になります。
ここまでの設定だけでもデータベースは作成できますが、今回は EC2 から接続するため、接続用の設定が必要となります。
「 EC2 接続をセットアップする」をクリックしてください。
EC2 接続のセットアップはデータベース作成後からでも実行できます。
「 EC2 コンピューティングリソースに接続」をクリックします。
「 EC2 インスタンス」に、先ほど作成したデータベース接続用のインスタンスを選択します。
「データベースの作成」をクリックします。
データベースの作成には少々時間がかかります。
サイズが大きい場合は最長 20 分かかることもあるので、気長に待ちましょう。
以下のようなメッセージが出たら完了です。
5. データベース接続
これでデータベース本体とデータベースに接続する環境の両方がそろったので、早速データベースに接続しましょう。
まずは作成したデータベースを一覧から選択して、「接続とセキュリティ」タブにある「エンドポイント」と「ポート」を確認します。
上記で確認したエンドポイントとポート、そしてデータベース作成時に設定したマスタユーザ名とパスワードを使用して、以下のコマンドを事前に作成した EC2 インスタンス上で実行します。
[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 文を実行してみます。
MySQL [(none)]> SELECT CURRENT_TIMESTAMP;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2024-11-23 07:16:33 |
+---------------------+
1 row in set (0.001 sec)
MySQL [(none)]>
データベースへの接続を終了するときは、 exit コマンドを実行します。
MySQL [(none)]> exit
Bye
[ec2-user@*** ~]$
6. データベース削除
データベースを削除する場合は、一覧で削除したいデータベースを選択して「アクション」⇒「削除」をクリックします。
デフォルトの設定だと削除前にバックアップが作成されます。
バックアップの保存にも料金がかかるため、バックアップが不要な場合はチェックを外します。
バックアップを作らない場合はバックアップの不要確認にチェックを入れます。
「 delete me 」と入力し、「削除」をクリックすることでデータベースが削除されます。
データベースは削除にも少々時間がかかります。
以下のようなメッセージが表示されたら完了です。