AWS 上でRDS を作成して、 EC2 から接続する方法

AWS 上でRDS を作成して、 EC2 から接続する方法

Amazon RDS は、ユーザーがクラウドでリレーショナル データベースを簡単にセットアップ、デプロイ、拡張できるようにするマネージド サービスです。また、EC2 インスタンスから接続してデータを迅速に管理できます。

こんにちは、クラスメソッドタイランドのPOPです。


Amazon RDS は EC2 インスタンスなど、他のサービスと組み合わせて使用できます。
今回は AWS 上で RDS を作成し、EC2 から RDS に接続する方法を紹介します。

使用するリソースは、EC2 インスタンス (Amazon Linux 2023) と RDS (MySQL) です。

AWS Service Function
EC2 Instance (Amazon Linux 2023)
RDS Database (MySQL 8.0)

概要

RDS と EC2 インスタンスを作成後、セキュリティグループ経由で接続し、Amazon Linux 2023 で SQL クエリの実行をテストします。
Amazon Linux 2023 to RDS (MySQL) – Tokyo region

前提条件

※EC2 インスタンスが作成済であること。

EC2 インスタンスの作成方法については、以下のリンクを参照してください。
https://dev.classmethod.jp/articles/how-to-install-amazon-linux-2023-on-ec2-jp/

EC2インスタンスの作成例

※この設定はほんの一例です。任意に応じて設定してください。

リージョン:「シンガポール」

名前とタグ
名前:「pop-ec2」

アプリケーションおよび OS イメージ (Amazon マシンイメージ)
Amazon マシンイメージ (AMI):「Amazon Linux 2023 AMI」

インスタンスタイプ
インスタンスタイプ:「t3a.micro」

キーペア (ログイン)
キーペア名 - 必須:「pop-ec2」

ネットワーク設定
ファイアウォール (セキュリティグループ):「セキュリティグループを作成」
セキュリティグループ名 - 必須:「pop-ec2」
説明 - 必須:「pop-ec2」
インバウンドセキュリティグループのルール
セキュリティグループルール 1 (TCP, 22, xx.xx.xx.xx/32)
タイプ:「ssh」|ソースタイプ:「自分の IP」|ソース:「xx.xx.xx.xx/32」

ストレージを設定
1x「8」GiB:「gp3」(デフォルト)

Amazon RDS とは

Amazon RDS(Relational Database Service)は、AWSが提供するマネージド型のリレーショナルデータベースサービスです。これにより、データベースの設定、運用、スケーリングが簡素化され、ユーザーはインフラ管理よりもアプリケーションの開発に集中できます。RDSは、MySQL、PostgreSQL、MariaDB、Oracle、SQL Serverなど、さまざまなデータベースエンジンをサポートしています。

Amazon RDS については以下のリンクで確認できます。
https://dev.classmethod.jp/articles/relay_looking_back_amazon_rds_2019/

RDS のセキュリティグループを作成する

この手順では、RDS で使用するセキュリティグループを作成します。今回は「pop-rds-mysql」という名前を使います。

サービス「EC2」に開き、左側のメニューから「▼ネットワーク > セキュリティ」セクションにある「セキュリティグループ」を選択します。
ec2_service-security_group_menu

「セキュリティグループを作成」をクリックします。
ec2_service-security_group_button

「セキュリティグループを作成」画面に移動後、以下のように設定します。

トピック「基本的な詳細」
・セキュリティグループ名:「pop-rds-mysql」
・説明:「pop-rds-mysql」

トピック「インバウンドルール」
・タイプ:「MYSQL/Aurora」(必須)
・ソース: 接続する EC2 インスタンスのセキュリティグループを選択します。今回は「pop-ec2」です。
create_sg_for_rds

設定が完了したら、1番下までスクロールして、「セキュリティグループを作成」をクリックします。

RDS MySQL データベースの作成

今回は EC2 インスタンスに接続するための RDS (MySQL) を作成します。

まず RDS に使用する以下のものを用意します。 (この情報はほんの一例です。)
・DB クラスター識別子: RDS のDB クラスターの名前です (例: "pop-rds-mysql")。
・マスターパスワード: RDS に自分で管理するパスワードです (例: "RdsEc2-202411")。
RDS の名前とパスワードを準備したら、RDS の作成を開始できます。

「RDS」を検索して選択します。
rds_service-search

左側のメニューから「データベース」を選択します。
rds_service-databases_menu

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

「データベースの作成」画面に移動後、以下のように設定します。

データベース作成方法を選択
・「標準作成」
create_rds_mysql-1

エンジンのオプション
・エンジンのタイプ:「MySQL」
・エディション:「MySQL Community」(デフォルト)
・エンジンバージョン:「MySQL 8.0.39」(最新バージョンを選択することをお勧めします)
create_rds_mysql-2

テンプレート
・「本番稼働用」

可用性と耐久性
・デプロイオプション:「単一の DB インスタンス」
create_rds_mysql-3

設定
・DB インスタンス識別子:「pop-rds-mysql」

▼ 認証情報の設定
・マスターユーザー名:「admin」
・認証情報管理:「セルフマネージド」
・マスターパスワード:「RdsEc2-202411」(パスワードを "Very strong" に設定してください)
・マスターパスワードを確認:「RdsEc2-202411」
create_rds_mysql-4

インスタンスの設定
・DB インスタンスクラス:「バースト可能クラス (t クラスを含む)」
・「db.t3.micro」
create_rds_mysql-5

DB インスタンスのコストは、Amazon RDS for MySQL の料金で確認できます。
今回は、トピック「オンデマンド DB インスタンスのコスト」>「RDS for MySQL +」>「シングル AZ デプロイ」>「リージョン: アジアパシフィック (東京)」>「使いたい DB インスタンスを確認します (例: "db.t3.micro")」を選択します。
create_rds_mysql-6

ストレージ
・ストレージタイプ:「汎用 SSD (gp2)」
・ストレージ割り当て:「20」GiB (最小 20 GiB の割り当て済みストレージが必要です)

▼ ストレージの自動スケーリング」をクリックします。
ストレージの自動スケーリング (この設定はすべてデフォルトです)
・「✅️ ストレージの自動スケーリングを有効にする」
・最大ストレージしきい値:「1000」GiB

create_rds_mysql-7

接続
・VPC セキュリティグループ (ファイアウォール):「既存の選択」
・既存の VPC セキュリティグループ:「pop-rds-mysql
・一番下までスクロールし、「データベースの作成」をクリックします。
create_rds_mysql-8

作成したデータベースを確認する

データベースの画面に移動後、作成した「DB識別子」をクリックします (例: "pop-rds-mysql")
create_rds_mysql-9

DB 識別子に移動後、このような画面が表示され、DB インスタンスが「利用可能」になるまで少々お待ちください。
create_rds_mysql-10

DB インスタンスのステータスが「利用可能」になっていると、エンドポイントが作成されていることがわかります (今回所要時間は約8分)。

create_rds_mysql-11

MariaDB Client をインストールする

※今回は、PuTTY プログラムでコマンドを実行します。

MariaDB Client をインストールすると、Amazon Linux 2023 から RDS に接続できますが、MariaDB Server は使用できません。

root 権限を持つユーザーとしてログインするためのコマンドを実行します。

sudo su -

サーバーを最新の状態に更新するためのコマンドを実行します。

yum update -y

MariaDB Client をインストールするコマンドを実行します。
※このインストールでは MariaDB サーバーを実行できません。

yum install mariadb105 -y

データベース管理テスト

EC2 インスタンスから RDS に接続

EC2 インスタンスから RDS データベースに接続するコマンドを実行します。
※コマンドを実行する前に、【 】内の情報を自分のものに変更してください。
・RDS エンドポイント: 「-h 【RDS エンドポイント】」
・マスターユーザー名:「-u admin」(デフォルト)
・マスターパスワード:「-p【RdsEc2-202411】」

mysql -h 【your_endpoint_rds】 -u admin -p【your_password_rds】

Output (example)

[root@ip-xx-xx-xx-xx ~]# mysql -h pop-rds-mysql.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u admin -pRdsEc2-202411
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 50
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)]>

データベースを作成

次のコマンドを実行して、データベースの作成をテストします。

データベースを確認するコマンドを実行します。

show databases;

Output (example)

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.008 sec)

MySQL [(none)]>

データベースを作成するコマンドを実行します。
※コマンドを実行する前に、任意のデータベース名に「database_name」に変更してください。今回は「pop」です。

CREATE DATABASE database_name;

Output (example)

MySQL [(none)]> CREATE DATABASE pop;
Query OK, 1 row affected (0.019 sec)

MySQL [(none)]>

再度データベースを確認するコマンドを実行します。

show databases;

前の手順で作成したデータベース名が追加されていることがわかります。今回は「pop」です。
Output (example)

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| pop                |
| sys                |
+--------------------+
5 rows in set (0.005 sec)

MySQL [(none)]>

テーブルを作成

前の手順で作成した「pop」という名前のデータベースにテーブルを作成します。

まず、管理したい特定のデータベースを選択するコマンドを実行します。
※「database_name」を前の手順で作成したデータベース名に変更します。

use database_name;

Output (example)

MySQL [(none)]> use pop;
Database changed
MySQL [pop]>

テーブルを作成するコマンドを実行します。
※「table_name」を任意のテーブル名に変更します。今回は「test」です。

create table table_name (id int, name varchar(30));

Output (example)

MySQL [pop]> create table test (id int, name varchar(30));
Query OK, 0 rows affected (0.059 sec)

MySQL [pop]>

データをテーブルに挿入

テーブルにデータを追加するコマンドを実行します。
※「table_name」を前の手順で作成したテーブル名に変更します。今回は「test」です。

insert into table_name value (1, 'test');

Output (example)

MySQL [pop]> insert into test value (1, 'test');
Query OK, 1 row affected (0.008 sec)

MySQL [pop]>

テーブルからデータを取得

指定されたテーブルからすべての列とレコードを取得するSQLクエリのコマンドを実行します。

select * from table_name;

Output (example)

MySQL [pop]> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | test |
+------+------+
1 row in set (0.002 sec)

MySQL [pop]>

プロンプトの終了

データベースシステムから安全に終了するコマンドを実行します。

quit

Output (example)

MySQL [pop]> quit
Bye
[root@ip-xx-xx-xx-xx ~]#

AWS リソースを削除

削除するすべての AWS リソースは次のとおりです。

  • RDS
    • Database
  • EC2
    • Instance
    • Security Groups 2 ตัว (ที่ใช้สำหรับ EC2 และ RDS)
    • Key Pair

上記のように順序で様々なAWS リソースを削除する方法を紹介します。

RDS でデータベースを削除

削除にはかなり時間がかかるため、最初にデータベースの削除を開始します。
データベースを削除する前に、「削除保護」をに無効化 (削除保護の有効化) に変更する必要があります。

「RDS > データベース」画面に移動し、「変更」をクリックします。
delete_rds_mysql-1

「削除保護」セクションまで一番下にスクロールし、「☐ 削除保護の有効化」のチェックを外し、「続行」をクリックします。
delete_rds_mysql-2

「すぐに適用」を選択し、「DB インスタンスを変更」をクリックします。
delete_rds_mysql-3

再度削除したいデータベース画面に移動し、「アクション ▼」をクリックして、「削除」を選択します。
delete_rds_mysql-4

「最終スナップショットを作成」と「自動バックアップを保持」のチェックを外すと、さらに多くのオプションが表示されます。

次に追加されたオプション「✅ 私は、インスタンスの削除後、システムスナップショットとポイントインタイムの復元を含む自動バックアップが利用不可となることを了承します。」でチェックマークを入れます。
そして、「delete me」と入力し、「削除」をクリックします。
delete_rds_mysql-5

ステータスが「✕ 削除中」と表示されますので、RDS が消えるまで少々お待ちください。 (今回所要時間は約5分)
delete_rds_mysql-6

EC2 でインスタンスの終了、キー ペアの削除、セキュリティグループの削除

EC2 でインスタンスの終了、キー ペアの削除、セキュリティグループの削除については、以下のリンクを参照してください。
https://dev.classmethod.jp/articles/ec2terminate-instances-delete-key-pairs-and-delete-security-groups-in-ec2-jp/

まとめ

MariaDB Client を使用して、EC2 インスタンス (Amazon Linux 2023) から RDS データベースに接続し、データベースを簡単に管理できます。

この記事がどなたかのお役に立てば幸いです。
以上、クラスメソッドタイランドのPOP(Tinnakorn Maneewong)でしたっ!

関連記事

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.