【AWS】RDSの概要と設定確認(MySQL 8.0)

Amazon RDS(Relational Database Service)を使うと、データベースサーバを OS から用意しなくても、AWS のコンソールからデータベースを作れます。この記事では RDS の概要を整理したうえで、MySQL エンジンの RDS をプライベートサブネットに作り、EC2 から MySQL 8.0 に接続するところまでを確かめます。

この記事でわかること
  1. RDS がマネージドで受け持つ範囲と、利用者が設定する3つのグループ
  2. RDS をプライベートサブネットに置くための準備(サブネット、セキュリティグループ)
  3. サブネットグループ、パラメータグループ、オプショングループと DB インスタンスの作成手順
  4. EC2 から RDS のエンドポイントに mysql コマンドで接続する方法

RDS の概要

RDS はフルマネージドのデータベースサービスです。バックアップ、ソフトウェアのパッチ適用、障害の検知と復旧は AWS が受け持ちます。一方で、SQL の作り方やデータの設計、性能のチューニングは利用者の担当です。

マネージドサービスなので、RDS の DB インスタンスには SSH などで OS にログインできません。データベースへは、mysql コマンドなどの SQL クライアントで接続します。OS の設定ファイル(MySQL なら my.cnf)を直接書き換える代わりに、次のグループで設定を渡します。

グループ何を設定するか
パラメータグループデータベースエンジンの設定値(パラメータ)をまとめたものです。デフォルトのパラメータグループは値を変えられないので、値を変えたい場合は自分で作って DB インスタンスに関連付けます。
オプショングループデータベースエンジンが持つ追加機能(オプション)を有効にし、その設定をするものです。デフォルトのオプショングループは空で、変更も削除もできません。
サブネットグループVPC の中で、DB インスタンスを置いてよいサブネットの集まりです。2つ以上のアベイラビリティゾーン(AZ)のサブネットを入れる必要があります。

この3つと、通信を許可するセキュリティグループを先に作っておき、DB インスタンスの作成時に選んで関連付けます。

セキュリティグループ通信の許可DB-Private-sgサブネットグループ置き場所(サブネット)db-subnet-gパラメータグループエンジンの設定値mysql8-pgオプショングループエンジンの追加機能mysql8-ogDB インスタンスtestdb-1(MySQL 8.0.25)作成時に4つを選んで関連付ける
図1 DB インスタンスの作成前に用意するもの

検証時(2021年8月)に選べたエンジンは、Amazon Aurora、MySQL、MariaDB、PostgreSQL、Oracle、Microsoft SQL Server の6つです。この記事では MySQL 8.0 を使います。

現在の状況

現在の RDS では、IBM Db2 も選べるエンジンに加わっています。また、RDS for MySQL 8.0 の標準サポートは 2026年7月31日に終わり、今は有償の RDS 延長サポート(2029年7月31日まで)でだけ使えます。この記事で使った 8.0.25 も、今は選べるマイナーバージョンに入っていません。これから作る場合は MySQL 8.4 を検討してください。

RDS 構築(検証環境)

この記事の構成です。VPC(MyVPC)のパブリックサブネットに EC2 を置き、作業 PC から SSH で入ります。RDS はインターネットから届かないプライベートサブネットに置き、EC2 からの MySQL の通信(TCP 3306)だけを許可します。

VPC 10.0.0.0/16(MyVPC)ap-northeast-1aap-northeast-1cpublic-subnet-1a 10.0.1.0/24public-subnet-1c 10.0.11.0/24(この検証では使わない)DB サブネットグループ(db-subnet-g)private-subnet-1a 10.0.2.0/24private-subnet-1c 10.0.22.0/24マルチ AZ にするとここにスタンバイを置けるMySQL(TCP 3306)SSH作業 PCEC210.0.1.100SG:EC2-publicRDS(testdb-1)MySQL 8.0SG:DB-Private-sg
図2 検証の構成

プライベートサブネットを用意する

データベースは、セキュリティのためにインターネットから接続できないプライベートサブネットに置くのが基本です。また、サブネットグループには2つ以上の AZ のサブネットが必要なので、ap-northeast-1a に 10.0.2.0/24、ap-northeast-1c に 10.0.22.0/24 のプライベートサブネットを作っておきます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。AWS のコンソールは画面の構成や表記がよく変わるので、今の画面とは違う場合があります。サブネットやセキュリティグループなどの ID は省いています。

VPC コンソール(サブネット)画面イメージ
NameIPv4 CIDRアベイラビリティーゾーン
1private-subnet-1a10.0.2.0/24ap-northeast-1a
private-subnet-1c10.0.22.0/24ap-northeast-1c
public-subnet-1a10.0.1.0/24ap-northeast-1a
public-subnet-1c10.0.11.0/24ap-northeast-1c
図3 RDS 用のプライベートサブネット(実際の画面ではなく、表示のポイントを示したイメージです)

サブネットの作り方は、次の記事を参考にしてください。

セキュリティグループを作る

RDS には、パブリックサブネットの EC2 からだけ接続できるようにします。EC2 は次の記事で作ったものを使います。この EC2 に適用しているセキュリティグループは EC2-public です。

EC2 コンソール(インスタンス)画面イメージ
Nameパブリック IPv4 アドレスセキュリティグループ名
EC2-public(伏せています)1EC2-public
図4 EC2 に適用しているセキュリティグループ(実際の画面ではなく、表示のポイントを示したイメージです)

次に、RDS に適用するセキュリティグループを作ります。VPC ›› セキュリティグループ ›› セキュリティグループを作成 を開きます。セキュリティグループの考え方は、次の記事で説明しています。

VPC コンソール(セキュリティグループを作成)画面イメージ
基本的な詳細
1セキュリティグループ名DB-Private-sg
説明DB-Private-sg
2VPCMyVPC(10.0.0.0/16)
インバウンドルール
3タイプMYSQL/Aurora
プロトコル/ポート範囲TCP / 3306
4ソースカスタム EC2-public
図5 RDS 用のセキュリティグループの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1セキュリティグループ名任意の名前です。この記事では DB-Private-sg にします。作成後に名前は変えられません。
2VPCRDS を置く VPC(MyVPC)を選びます。
3タイプMYSQL/Aurora を選ぶと、プロトコル TCP、ポート 3306 が入ります。
4ソースカスタムで、EC2 のセキュリティグループ EC2-public を選びます。

ソースにセキュリティグループを指定すると、そのセキュリティグループが適用されたインスタンスのプライベート IP アドレスからの通信を許可します。EC2 の IP アドレスが変わっても、ルールを書き換える必要がありません。アウトバウンドルールは、作成時に入るすべて許可のルールのままにします。

作成すると、一覧に DB-Private-sg が追加されます。

VPC コンソール(セキュリティグループ)画面イメージ
セキュリティグループ名VPC説明
1DB-Private-sgMyVPCDB-Private-sg
図6 作成したセキュリティグループ(実際の画面ではなく、表示のポイントを示したイメージです)

サブネットグループを作る

ここから RDS のコンソールで作業します。コンソール上部の検索欄に RDS と入れると、RDS の画面へのリンクが出ます。RDS ›› サブネットグループ ›› DB サブネットグループを作成 を開きます。

RDS コンソール(DB サブネットグループを作成)画面イメージ
サブネットグループの詳細
1名前db-subnet-g
説明db-subnet-g
2VPCMyVPC
サブネットを追加
3アベイラビリティーゾーンap-northeast-1a × ap-northeast-1c ×
4サブネット10.0.2.0/24 × 10.0.22.0/24 ×
アベイラビリティーゾーンCIDR ブロック
ap-northeast-1a10.0.2.0/24
ap-northeast-1c10.0.22.0/24
キャンセル5作成
図7 DB サブネットグループの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意の名前です。この記事では db-subnet-g にします。作成後に名前は変えられません。
2VPCMyVPC を選びます。作成後に別の VPC には変えられません。
3アベイラビリティーゾーンap-northeast-1a と ap-northeast-1c にチェックを入れます。
4サブネットプライベートサブネットの 10.0.2.0/24 と 10.0.22.0/24 を選びます。下の「選択したサブネット」に2つが表示されます。
5作成クリックすると、サブネットグループが登録されます。

今回の DB インスタンスはスタンバイのないシングル AZ ですが、サブネットグループには2つの AZ のサブネットを入れます。あとでマルチ AZ に変えたときや、障害でスタンバイを作り直すときに、RDS はもう一方の AZ のサブネットを使います。

RDS コンソール(サブネットグループ)画面イメージ
名前説明ステータスVPC
db-subnet-gdb-subnet-g1 完了MyVPC
図8 作成したサブネットグループ(実際の画面ではなく、表示のポイントを示したイメージです)

ステータスが緑の「完了」になっていれば、サブネットグループは使える状態です。

パラメータグループを作る

RDS ›› パラメータグループ ›› パラメータグループを作成 を開きます。

RDS コンソール(パラメータグループを作成)画面イメージ
パラメータグループの詳細
1パラメータグループファミリーmysql8.0
2グループ名mysql8-pg
説明mysql8-pg
作成後の一覧
名前ファミリータイプ説明
mysql8-pgmysql8.0DB インスタンスパラメータグループmysql8-pg
図9 パラメータグループの作成と一覧(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1パラメータグループファミリー使うエンジンとメジャーバージョンに合わせて mysql8.0 を選びます。ファミリーが違うパラメータグループは、その DB インスタンスに関連付けられません。
2グループ名任意の名前です。この記事では mysql8-pg にします。

作ったばかりのパラメータグループの値は、デフォルトと同じです。文字コードやタイムゾーンなど、MySQL の設定を変えたいときは、このパラメータグループの値を編集します。

オプショングループを作る

RDS ›› オプショングループ ›› グループを作成 を開きます。

RDS コンソール(オプショングループを作成)画面イメージ
オプショングループの詳細
1名前mysql8-og
説明mysql8-og
2エンジンmysql
メジャーエンジンバージョン8.0
作成後の一覧
名前説明エンジンエンジンバージョン
mysql8-ogmysql8-ogMySQL Community8.0
default:mysql-8-0Default option group for mysql 8.0MySQL Community8.0
図10 オプショングループの作成と一覧(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1名前任意の名前です。この記事では mysql8-og にします。
2エンジン/メジャーエンジンバージョンDB インスタンスと同じ mysql と 8.0 を選びます。

一覧の default:mysql-8-0 は、RDS が用意しているデフォルトのオプショングループです。デフォルトは変更できないので、あとからオプションを足せるように、自分のオプショングループを作って関連付けておきます。この記事ではオプションは追加しません。

DB インスタンスを作る

RDS ›› データベース ›› データベースの作成 を開きます。作成画面は長いので、前半(エンジンから可用性まで)と後半(接続から追加設定まで)に分けて示します。

RDS コンソール(データベースの作成:前半)画面イメージ
データベース作成方法を選択
1作成方法◉ 標準作成○ 簡単に作成
エンジンのオプション
2エンジンのタイプ○ Amazon Aurora◉ MySQL○ MariaDB
○ PostgreSQL○ Oracle○ Microsoft SQL Server
バージョンMySQL 8.0.25
テンプレート
3テンプレート○ 本番稼働用○ 開発/テスト◉ 無料利用枠
設定
4DB インスタンス識別子testdb-1
5マスターユーザー名admin
マスターパスワード/確認●●●●●●●●●
DB インスタンスクラス
6DB インスタンスクラス○ 標準クラス (m クラスを含む)
○ メモリ最適化クラス (r クラスと x クラスを含む)
◉ バースト可能クラス (t クラスを含む)
db.t2.micro 1 vCPUs 1 GiB RAM
ストレージ
ストレージタイプ汎用 (SSD)
ストレージ割り当て20 GiB
ストレージの自動スケーリング☑ ストレージの自動スケーリングを有効にする
最大ストレージしきい値1000 GiB
可用性と耐久性
7マルチ AZ 配置○ スタンバイインスタンスを作成する (本稼働環境向けに推奨)
◉ スタンバイインスタンスを作成しないでください
図11 データベースの作成(前半)(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1作成方法標準作成 を選びます。すべての設定を自分で決める方法で、作っておいたグループをここで選べます。「簡単に作成」は推奨の設定で作り、一部の設定は作成後に変える方法です。
2エンジンのタイプ/バージョンMySQL を選び、バージョンは検証時に 8.0 系でいちばん新しかった 8.0.25 にします。
3テンプレート検証用なので 無料利用枠 を選びます。選べるインスタンスクラスやマルチ AZ が、無料利用枠の範囲に絞られます。
4DB インスタンス識別子任意の名前です。この記事では testdb-1 にします。エンドポイントのホスト名の先頭にもなります。
5マスターユーザー名/パスワード接続に使う管理用のユーザーです。この記事では admin にし、パスワードを決めて入れます。
6DB インスタンスクラス無料利用枠では、バースト可能クラスの db.t2.micro を選びます。
7マルチ AZ 配置無料利用枠では選べず、スタンバイを作らない設定になります。

ストレージはデフォルトのまま(汎用 SSD、20 GiB、自動スケーリングの上限 1000 GiB)にします。本番では、ワークロードに合わせて汎用(m)やメモリ最適化(r)のクラスを選び、マルチ AZ 配置で「スタンバイインスタンスを作成する」を選ぶのが一般的です。マルチ AZ では、別の AZ に同期するスタンバイが作られ、障害時には自動で切り替わります。スタンバイは待機用なので、読み取りの処理には使えません。

無料利用枠の現在の状況

AWS の無料利用枠の仕組みは検証時から変わっています。今の無料プランはクレジット制で、RDS で対象になるインスタンスクラスは db.t3.micro と db.t4g.micro です。作成時の画面で、選べるテンプレートとインスタンスクラスを確かめてください。

RDS コンソール(データベースの作成:後半)画面イメージ
接続
1Virtual Private Cloud (VPC)MyVPC
2サブネットグループdb-subnet-g
3パブリックアクセス○ あり◉ なし
4VPC セキュリティグループ◉ 既存の選択○ 新規作成
DB-Private-sg ×
5アベイラビリティーゾーンap-northeast-1a
データベース認証
データベース認証オプション◉ パスワード認証
○ パスワードと IAM データベース認証
○ パスワードと Kerberos 認証
追加設定
最初のデータベース名 
6DB パラメータグループmysql8-pg
オプショングループmysql8-og
キャンセル7データベースの作成
図12 データベースの作成(後半)(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1VPCMyVPC を選びます。作成後に VPC は変えられません。
2サブネットグループSTEP 3 で作った db-subnet-g を選びます。
3パブリックアクセスなし を選びます。RDS にパブリック IP アドレスが割り当てられず、VPC の中からだけ接続できます。
4VPC セキュリティグループ既存の選択で、STEP 2 で作った DB-Private-sg を選びます。
5アベイラビリティーゾーンDB インスタンスを置く AZ です。この記事では ap-northeast-1a にします。指定しなければ RDS が選びます。
6DB パラメータグループ/オプショングループSTEP 4、5 で作った mysql8-pg と mysql8-og を選びます。
7データベースの作成クリックすると作成が始まります。

データベース認証はデフォルトのパスワード認証のままにします。最初のデータベース名を空にすると、RDS は DB インスタンスの中にデータベースを作りません。必要なデータベースは、接続したあとに CREATE DATABASE で作ります。自動バックアップなど、追加設定のほかの項目もデフォルトのままです。

作成を始めると「データベース testdb-1 を作成しています」と表示され、起動まで数分かかります。しばらくして、データベースの一覧から testdb-1 を開き、ステータスを確かめます。

RDS コンソール(testdb-1 の概要)画面イメージ
DB 識別子CPUステータスクラス
testdb-13.61%1 利用可能db.t2.micro
ロール現在のアクティビティエンジンリージョンと AZ
インスタンス0 接続MySQL Communityap-northeast-1a
図13 DB インスタンスの概要(実際の画面ではなく、表示のポイントを示したイメージです)

ステータスが緑の「利用可能」になれば、接続できる状態です。

EC2 から RDS へアクセス

EC2 に MySQL クライアントを入れる

EC2(Amazon Linux 2)に SSH でログインし、yum で MySQL のクライアントを入れます。

作業 PC → EC2(Amazon Linux 2)

mac:Desktop hirotano $ ssh -i "hirotano-key.pem" ec2-user@xx.xxx.xxx.xxx
Last login: Wed Aug 18 10:03:33 2021 from (伏せています)


       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|


4 package(s) needed for security, out of 16 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-100 ~]$
[ec2-user@ip-10-0-1-100 ~]$ sudo yum -y install mysql
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                    | 3.7 kB  00:00:00
・
・ 出力省略
.
完了しました!
[ec2-user@ip-10-0-1-100 ~]$
現在の状況

Amazon Linux 2 は 2026年6月30日でサポートが終わっています。これから EC2 を作る場合は Amazon Linux 2023 を使ってください。Amazon Linux 2023 では、MySQL や MariaDB のクライアントのパッケージ名が Amazon Linux 2 と同じとは限らないので、使うバージョンのドキュメントで確かめてください。

エンドポイントを確かめて接続する

RDS の接続先は、IP アドレスではなくエンドポイント(DNS 名)で指定します。RDS ›› データベース ›› testdb-1 を開き、「接続とセキュリティ」タブでエンドポイントを確かめます。

RDS コンソール(testdb-1)画面イメージ
接続とセキュリティ モニタリング ログとイベント 設定 …
1エンドポイントtestdb-1.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com
アベイラビリティーゾーンap-northeast-1a
図14 エンドポイントの確認(実際の画面ではなく、表示のポイントを示したイメージです)

エンドポイントは「DB インスタンス識別子.固有の文字列.リージョン.rds.amazonaws.com」の形です。マルチ AZ の場合、フェイルオーバーするとこの DNS 名の向き先がスタンバイに切り替わるので、アプリケーションは同じエンドポイントのまま接続し直せます。

EC2 で、-h にエンドポイント、-u にマスターユーザー名を指定して mysql コマンドを実行します。-p を付けると、パスワードを聞かれます。

EC2 → RDS

[ec2-user@ip-10-0-1-100 ~]$ mysql -h testdb-1.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password: ★パスワードを入力
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.25 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)]>
表示意味
Welcome to the MariaDB monitor.接続に使ったクライアントの表示です。Amazon Linux 2 で yum install mysql として入ったのは MariaDB のクライアントなので、この表示になります。
Server version: 8.0.25接続先のサーバ(RDS)のバージョンです。作成時に選んだ MySQL 8.0.25 につながっています。
MySQL [(none)]>プロンプトです。(none) は、まだ使うデータベースを選んでいないことを表します。接続時にデータベース名を指定するか、USE で選ぶと、ここにその名前が出ます。

これで、プライベートサブネットの RDS に EC2 から接続できました。

うまくいかないとき

状態よくある原因確認すること
mysql コマンドが応答せずタイムアウトするセキュリティグループで 3306 番が許可されていない、ソースが EC2 のセキュリティグループになっていないDB-Private-sg のインバウンドルール、EC2 に適用しているセキュリティグループ
ホスト名が解決できないエンドポイントのコピーの誤り「接続とセキュリティ」タブのエンドポイント
Access denied と表示されるユーザー名かパスワードの誤りマスターユーザー名と、作成時に決めたパスワード
サブネットグループを作れない1つの AZ のサブネットしか選んでいない2つ以上の AZ のサブネットを選んでいるか

まとめ

作ったものこの記事の名前設定のポイント
プライベートサブネットprivate-subnet-1a/1c2つの AZ に1つずつ(10.0.2.0/24、10.0.22.0/24)
セキュリティグループDB-Private-sgMYSQL/Aurora(TCP 3306)を、ソース EC2-public から許可
サブネットグループdb-subnet-g2つのプライベートサブネットをまとめる
パラメータグループmysql8-pgファミリー mysql8.0
オプショングループmysql8-ogエンジン mysql、メジャーバージョン 8.0
DB インスタンスtestdb-1MySQL 8.0.25、パブリックアクセスなし、上の4つを関連付ける

RDS では OS にログインできない代わりに、置き場所はサブネットグループ、通信はセキュリティグループ、エンジンの設定はパラメータグループとオプショングループで決めます。先にこれらを作っておけば、DB インスタンスの作成画面では選ぶだけで済みます。接続はエンドポイントの DNS 名で行うので、アプリケーションの接続先にもこの名前を使います。

コメント