【AWS】RDSを利用してデータベースサーバを構築する

AWS

1.「RDS」とは

データベースサーバ(※以下、DBサーバ)を構築する場合、通常はEC2インスタンス上にRDBの製品をインストールして構築しますが、その場合、
・RDB製品そのもののインストールが必要
・EC2内でのメンテナンスが必要
・セキュリティに関する対応が必要

といった対応が必要となります。専門的な知識も必要となり、初心者にはハードルが高いですよね。

今回利用するRDS(Amazon RDS:Amazon Relational DataBase Servise)は、そういった課題を解決する、AWSで用意されているマネージドサービスとなります。
マネージドサービスですから、動作するサーバやOSのメンテナンス、監視やスケーリングは意識する必要がありません。
純粋にデータ管理のみを意識すればよいことになります。
利用者は、RDB製品(MySQL、Oracleなど)と必要となるスペックを指定するだけで、DBサーバの構築が可能となります。

2.RDSの仕組み

RDSは、下記の4つの要素で構成されています。

・データベースエンジン
実際にデータが格納される本体部分です。
RDSでは、MySQLやOracle、PostgreSQLといったRDB製品が
DBエンジンとして選択可能です。

・パラメータグループ
DB
エンジン関する設定を行う

・オプショングループ
RDS固有の設定を行う

・サブネットグループ
DBサーバを複数のアベイラビリティゾーンに分散配置するための設定を行う

これらの要素をRDS上で設定し、EC2からエンドポイントにログインする事で、MySQLが利用できます。
よって、今回の目標は、EC2にMySQLクライアントを導入し、構築したRDSのエンドポイントにログインするところまでとします。

(その先は、普通にDB、テーブル構築という話になってくるので、本記事では割愛します)

3.事前の環境準備

一応、前提としてVPC上の複数のアベイラビリティゾーンにサブネットを配置し、そこでEC2を起動させているものとします。

【AWS】仮想ネットワークを作成してみる(VPC編)
【AWS】仮想ネットワークを作成してみる(サブネット編)
【AWS】仮想ネットワークを作成してみる(インターネットゲートウェイ編)
【AWS】仮想ネットワークを作成してみる(NATゲートウェイ編)
【AWS】仮想ネットワークを作成してみる(ルートテーブル編)
・【AWS】仮想ネットワークを作成してみる(セキュリティグループ編)
【AWS】EC2を利用して仮想サーバーを構築(踏み台サーバー編)
【AWS】EC2を利用して仮想サーバーを構築(WEBサーバー編)

【AWS】ロードバランサーを配置して複数のEC2インスタンスに負荷分散してみる
↑当サイトの過去記事です。これに沿って構築した状態からスタートしますので、過去記事を参考に環境を構築しておきましょう。

上記記事を参考に構築が終わると、VPC内が上記図のようになっているはずです。
今回は、Private subnetにRDSを利用してDBサーバを構築します。

3.RDSに設定する各グループの作成

① RDSダッシュボード画面への遷移

まずは、マネジメントコンソール上から”RDS”で検索し、「Amazon RDS」のダッシュボードにアクセスしてみましょう。
検索してみると、上の画面の通り、サービス欄に「RDS」と表示されますので、クリックしてください。

ダッシュボード画面に遷移することができます。

② パラメータグループの設定

この画面がダッシュボード画面となります。ここからRDSの各グループを設定していきましょう。
まずは「パラメータグループ」の設定からです。

画面左の「パラメータグループ」のリンクをクリックしてください。

パラメータグループの設定画面に遷移します。
この時点では、まだグループが一つも存在しません。よって、「パラメータグループの作成」をクリックして新規作成します。

パラメータグループの詳細を設定する画面となります。今回はMySQLを利用するので、以下の通りに設定してみました。

・グループ名:test-db-pg(※任意の名称)
・説明
:任意の説明文
・エンジンタイプ
:MySQL Community(※利用するRDBの製品)
・パラメータグループファミリー
:mysql8.0(※選択したエンジンタイプのバージョン)
・タイプ
:DB Parameter Group

ちなみに、「タイプ」については、選択するエンジンタイプ/パラメータグループファミリーの組み合わせによっては選択不要となる場合もあります。
今回はMySQLを利用するため、タイプも選択する必要がありました。
通常の「DB Parameter Group」か、クラスタリングされる「DB Cluster Parameter Group」のどちらかを選択する必要があり、今回は通常のタイプとしています。

この辺りは、目的に応じて変更が必要になると思います。

各設定値を入力したら、「作成」をクリックしてください。

作成後、一覧上に作成したパラメータグループが表示されています。

③ サブネットグループの設定

続いて、「サブネットグループ」の設定を行っていきます。
ダッシュボード左の「サブネットグループ」をクリックすると、サブネットグループ設定画面に遷移します。

サブネットグループの詳細を設定する画面となります。まずは名前とVPCの設定です。

・グループ名:test-db-subnet(※任意の名称)
・説明
:任意の説明文

・VPC:test-vpc
(※【AWS】仮想ネットワークを作成してみる(VPC編)を参照)

次は、サブネットの設定を行っていきます。
因みに、RDSではマルチAZという機能があり、自動的に複数のアベイラビリティゾーンにデータベースを作成し、耐障害性を高めることが可能です。
よって、ここでは2つのアベイラビリティゾーン「ap-northeast-1a」「ap-northeast-1c」を指定し、そこに配置した2つのプライベートサブネットを選択します。

【AWS】仮想ネットワークを作成してみる(サブネット編)を参照)
設定後は「作成」をクリックしましょう。

パブリックサブネットをサブネットグループに指定すると、外部公開されているサブネットにデータベースが配置されるため、セキュリティ上非常に問題があります。
基本的には、プライベートサブネットを選択するようにしましょう。

特に問題なければ、上記画面のように「サブネットグループ」が正常に作成されます。

④ オプショングループの設定

3つ目に、「オプショングループ」の設定を行っていきます。
ダッシュボード左の「サブネットグループ」のリンクをクリックすると、サブネットグループ設定画面に遷移します。
因みに、初期状態ではデフォルトのオプショングループが存在しますが、今回は使用しませんので、「グループを作成」をクリックし、新規作成します。

今回はMySQLをエンジンとして利用するので、設定は以下の通りでOKです。
入力後は「作成」をクリックしてください。

・グループ名:test-db-og(※任意の名称)
・説明
:任意の説明文

・エンジン:mysql
・バージョン:8.0

特に問題なければ、上記画面のように「オプショングループ」が正常に作成されます。

4.DBサーバの作成

ここまでで、パラメータグループ、サブネットグループ、オプショングループの3つのグループが作成できました。
次は、これらを基にDBサーバの作成を行っていきます。

まずは、RDSダッシュボード画面の左にある「データベース」のリンクをクリックし、データベースの一覧画面に遷移しましょう。
初期状態ではデータベースはひとつも存在しないので、「データベースの作成」をクリックします。

① 作成方法の選択

まずは、作成方法の選択となります。
「簡単に作成」を選ぶと色々と自動設定をしてくれるんですが、今回は全て手動で行いますので、「標準作成」を選択します。

② データベースエンジンの選択

ここでは、エンジンとして利用するデータベース製品を選択します。
今回はMySQLによるデータベース作成を行っていきますので、「MySQL」を選択してください。
なお、エディションは「MySQL Community」、エンジンバージョンは最新のものを選択しましょう。
(※記事作成時点では、「MySQL 8.0.35」が最新)

テンプレートについては、利用目的によって適切なものを選択してください。
今回はお試しなので、「無料利用枠」で問題ありません。
(※これを選ぶと、自動的に「単一DBインスタンス」として構築されます。マルチAZは選択できません。)

③ 各種設定

次は、データベースに関する各種設定を行います。

・DBインスタンス識別子:test-db-og(※データベースを一意に識別するための任意の名称)
・マスターユーザー名
:EC2からMySQLにログインするためのユーザーID(※今回は初期値のadminのまま)

・認証情報管理:セルフマネージド
・マスターパスワード
EC2からMySQLにログインするためのパスワード(※自身で設定)

DBインスタンス設定は、選択したテンプレートによって変わってきます。
今回は「無料利用枠」を選択したので、基本的にはデフォルト設定のままでOKです。

④ ストレージについて

ストレージについても、利用状況や予想されるデータ量によって、適切な値を設定してください。
今回はお試しのため、全てデフォルト設定のままとします。

⑤ 接続に関する設定

ここでは、DB接続に関する設定を行います。

コンピューティングリソース」に関しては、今回は「接続しない」を選択します。

「接続」を選択した場合、ネットワーク設定が楽になりますが、EC2インスタンス毎に設定が必要となります。
よって、EC2インスタンスの増減が想定される環境では、「接続しない」の方が良いと思います。

その他の設定は、以下のようにします。

VPC:test-vpc(※【AWS】仮想ネットワークを作成してみる(VPC編)を参照)
・DBサブネットグループ
:test-db-subnet(※本記事で事前に作成したサブネットグループ)

・パブリックアクセス:なし

VPCセキュリティグループについては、ここで新規に作成することもできますし、既存のものを選択することも可能です。
システムの仕様によって、ここは適切なセキュリティグループの設定、選択を行ってください。
今回は「デフォルト」を選択します。

併せて、認証機関も、今回はひとまずデフォルト設定のままとします。

⑥ データベース認証

データベース認証の方法は、以下の3つがあります。
・パスワード認証:設定したマスターユーザーとパスワードで接続
・パスワードとIAMデータベース認証:マスターユーザーとパスワード、または権限付与されたIAMユーザーで接続
・パスワードとKerberos接続:マスターユーザーとパスワード、またはAWS Directory Serviceの管理ユーザーで接続

今回はお試しのため、「パスワード認証」を選択します。

⑦ 追加設定

最後に、データベースの追加設定を行います。
ここでは、上で作成したパラメータグループ(test-db-pg)オプショングループ(test-db-og)を設定します。

他は、今回はデフォルト設定のままとします。
最初のデータベース名は、ここではまだ設定しなくて大丈夫です。
ターミナル上から作成可能なためここでは空欄OK

下記の画面を参考にしてみて下さい。

ここまでが、追加設定の内容となります。

⑧ 概算月間コスト確認~データベース作成

画面の一番下に、「概算月間コスト」が表示されています。
ここまでの設定で、月換算でどのくらい料金が掛かるかの見積もりが示されていますので、キチンと確認しておきましょう。


特に問題なければ、ここで「データベースの作成」をクリックします。

因みに、「データベース作成」をクリック直後、このようなポップアップが表示されます。
ここでは
一旦無視してOKです。

少し時間を要しますが(2~3分程度)、特に問題なければ、上記のようなメッセージが表示され、DBサーバが作成されます。
ここまで行けば、あとはこのDBサーバにログインし、データベース作成→テーブル作成→データ挿入という処理が可能となります。

4.DBサーバへのログイン

ここまででDBサーバが作成できましたので、早速、そのサーバ内にアクセスしてみましょう。
まずは、先程作成したDBサーバ(test-db)の管理画面にアクセスし、エンドポイントを確認しておいてください。

確認できたら、ターミナル画面を立ち上げ、まずはEC2(Privateサブネット内のサーバ)にアクセスしてください。
(※参考:AWS】EC2を利用して仮想サーバーを構築(WEBサーバー編)

EC2にアクセス後は、下記の通り入力してください。

[ec2-user@ip-XXX-XXX-XXX-XXX ~]$ sudo su -

[root@ip-XXX-XXX-XXX-XXX ~]# dnf -y localinstall  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

まずは[sudo su -]を実行し、ここからはスーパーユーザー(=root)権限で各命令を実行していきます。
root権限となったことが確認出来たら、次に[dnf -y localinstall https://dev.mysql.com/~略~]を実行し、MySQLのリポジトリをインストールします。
因みに、リポジトリの最新は[MySQL Community Downloads]←ここから確認可能です。
念のため、実行前に確認してください。

[root@ip-XXX-XXX-XXX-XXX ~]# dnf -y localinstall  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
Last metadata expiration check: 0:04:28 ago on Sat Sep 21 11:59:03 2024.
mysql80-community-release-el9-1.noarch.rpm                                               18 kB/s |  10 kB     00:00
Dependencies resolved.
========================================================================================================================
 Package                                  Architecture          Version               Repository                   Size
========================================================================================================================
Upgrading:
 mysql80-community-release                noarch                el9-1                 @commandline                 10 k

Transaction Summary
========================================================================================================================
Upgrade  1 Package

Total size: 10 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                1/1
  Upgrading        : mysql80-community-release-el9-1.noarch                                                         1/2
  Cleanup          : mysql80-community-release-el7-3.noarch                                                         2/2
  Verifying        : mysql80-community-release-el9-1.noarch                                                         1/2
  Verifying        : mysql80-community-release-el7-3.noarch                                                         2/2

Upgraded:
  mysql80-community-release-el9-1.noarch

Complete!
[root@ip-XXX-XXX-XXX-XXX ~]#

このように、「Complete!」と表示されれば、リポジトリのインストール成功です。

[root@ip-XXX-XXX-XXX-XXX ~]# sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

次は、GDGキーのインポートを実行します。
※これについては、コマンド実行しても特にメッセージは表示されません。

それが終わったら、次はMySQLクライアントを、
[dnf -y install mysql mysql-community-client]のコマンドで実行します。

[root@ip-XXX-XXX-XXX-XXX ~]# dnf -y install mysql mysql-community-client
Last metadata expiration check: 0:06:05 ago on Sat Sep 21 12:03:44 2024.
Dependencies resolved.
========================================================================================================================
 Package                                   Architecture      Version                 Repository                    Size
========================================================================================================================
Installing:
 mysql-community-client                    x86_64            8.0.39-1.el9            mysql80-community            3.4 M
Installing dependencies:
 mysql-community-client-plugins            x86_64            8.0.39-1.el9            mysql80-community            1.4 M
 mysql-community-common                    x86_64            8.0.39-1.el9            mysql80-community            556 k
 mysql-community-libs                      x86_64            8.0.39-1.el9            mysql80-community            1.5 M

Transaction Summary
========================================================================================================================
Install  4 Packages

Total size: 6.8 M
Installed size: 95 M
Downloading Packages:
[SKIPPED] mysql-community-client-8.0.39-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-client-plugins-8.0.39-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-common-8.0.39-1.el9.x86_64.rpm: Already downloaded
[SKIPPED] mysql-community-libs-8.0.39-1.el9.x86_64.rpm: Already downloaded
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                1/1
  Installing       : mysql-community-client-plugins-8.0.39-1.el9.x86_64                                             1/4
  Installing       : mysql-community-common-8.0.39-1.el9.x86_64                                                     2/4
  Installing       : mysql-community-libs-8.0.39-1.el9.x86_64                                                       3/4
  Running scriptlet: mysql-community-libs-8.0.39-1.el9.x86_64                                                       3/4
  Installing       : mysql-community-client-8.0.39-1.el9.x86_64                                                     4/4
  Running scriptlet: mysql-community-client-8.0.39-1.el9.x86_64                                                     4/4
  Verifying        : mysql-community-client-8.0.39-1.el9.x86_64                                                     1/4
  Verifying        : mysql-community-client-plugins-8.0.39-1.el9.x86_64                                             2/4
  Verifying        : mysql-community-common-8.0.39-1.el9.x86_64                                                     3/4
  Verifying        : mysql-community-libs-8.0.39-1.el9.x86_64                                                       4/4

Installed:
  mysql-community-client-8.0.39-1.el9.x86_64             mysql-community-client-plugins-8.0.39-1.el9.x86_64
  mysql-community-common-8.0.39-1.el9.x86_64             mysql-community-libs-8.0.39-1.el9.x86_64

Complete!
[root@ip-XXX-XXX-XXX-XXX ~]#

このように「Complete!」メッセージが表示されたら、MySQLクライアントのインストール成功です。

これで準備は整いました。
あとは、MySQLのサーバ(RDS)に実際にログインしてみましょう。
下記コマンドで実行します。
[mysql -u admin -p -h {※RDSのエンドポイント}]

ちなみに、RDSのエンドポイントについては、上で作成したDBサーバ(test-db)の詳細画面にアクセスし、
表示されている「エンドポイント」のURLをそのまま貼り付けてください。

[root@ip-XXX-XXX-XXX-XXX ~]# mysql -u admin -p -h test-db.XXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.35 Source distribution

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>

このように[mysql>]というメッセージが表示されたら、MySQLのDBサーバにアクセス成功という形になります。

ここまで来れば、あとは普通にCREATE文でのDBやテーブル作成、INSERT文でのデータ追加、SELECTでの抽出といった、一連のDB処理が対応可能です。
目的に応して動かしてみて下さい。

(※本記事では、その辺りは割愛します)

まとめ

今回、RDSを利用してDBサーバを作成しました。
同サーバは、Privateサブネット内のEC2インスタンス(WEBサーバ)に作成することで、外部からのアクセスを制限できます。
基本的にはPublicサブネットではなく、Privateサブネット内で作成してください。

因みに、本記事でのDBサーバの作成方法は、最もシンプルな形で行いましたので、実際にDBサーバを構築する際は、もう少し設定を深堀する必要もあると思います。
本記事を応用して、システムの仕様に応じた適切なDBサーバを構築していただければと思います。
(今回はここまで)

お読みいただき、有難うございました!

コメント

タイトルとURLをコピーしました