前回までの記事では、S3によるオブジェクトストレージについて解説しました。本記事では、AWSのフルマネージドリレーショナルデータベースサービスであるRDS(Relational Database Service)について解説します。RDSの基本概念から、対応データベースエンジンの違い、インスタンスの作成手順、パラメータグループとオプショングループの設定まで、マネージドデータベースを運用するための基礎知識を身につけましょう。
RDS(Relational Database Service)とは
Amazon RDSは、クラウド上でリレーショナルデータベースを簡単にセットアップ、運用、スケーリングできるフルマネージドサービスです。ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップといった時間のかかる管理タスクをAWSが代行するため、アプリケーション開発に集中できます。
RDSの主な特徴
RDSには以下の特徴があります。
| 特徴 | 説明 |
|---|---|
| フルマネージド | パッチ適用、バックアップ、リカバリ、障害検出などをAWSが自動管理 |
| 高可用性 | マルチAZ配置による自動フェイルオーバーで99.95%以上の可用性を実現 |
| スケーラビリティ | インスタンスタイプの変更やリードレプリカによる柔軟なスケーリング |
| セキュリティ | VPC内での分離、暗号化、IAM連携による多層防御 |
| コスト効率 | 従量課金制で初期費用なし、リザーブドインスタンスで最大72%割引 |
RDSとEC2上のデータベースの比較
データベースをAWS上で運用する方法として、RDSを使う方法とEC2インスタンス上に自分でデータベースをインストールする方法があります。それぞれの特徴を比較します。
| 項目 | RDS | EC2上のデータベース |
|---|---|---|
| 管理の手間 | AWS が自動管理 | 自分で管理が必要 |
| パッチ適用 | 自動(メンテナンスウィンドウ設定可能) | 手動で適用 |
| バックアップ | 自動バックアップ機能あり | 自分で設定・管理 |
| 高可用性 | マルチAZをワンクリックで有効化 | 自分で構築 |
| OSへのアクセス | 不可(RDS Customを除く) | フルアクセス可能 |
| カスタマイズ性 | パラメータグループで設定 | 完全に自由 |
| コスト | 管理コスト込みの料金 | EC2料金のみ |
一般的なWebアプリケーションでは、運用負荷を軽減できるRDSが推奨されます。特殊なデータベース設定や、RDSでサポートされていないデータベースエンジンが必要な場合は、EC2上でのセルフマネージドを検討します。
RDSの基本アーキテクチャ
RDSインスタンスは、VPC内のサブネットに配置されます。セキュリティグループによるアクセス制御、サブネットグループによる配置先の指定、パラメータグループによる設定管理など、複数のコンポーネントが連携して動作します。
graph TB
subgraph "AWS Cloud"
subgraph "VPC"
subgraph "プライベートサブネット (AZ-a)"
RDS1[(RDSインスタンス<br/>プライマリ)]
end
subgraph "プライベートサブネット (AZ-c)"
RDS2[(RDSインスタンス<br/>スタンバイ)]
end
SG[セキュリティグループ]
SubnetGroup[DBサブネットグループ]
end
ParamGroup[パラメータグループ]
OptionGroup[オプショングループ]
end
EC2[EC2インスタンス] -->|3306/5432| SG
SG --> RDS1
RDS1 -.->|同期レプリケーション| RDS2
SubnetGroup --> RDS1
SubnetGroup --> RDS2
ParamGroup --> RDS1
OptionGroup --> RDS1RDSの構成要素
RDSを構成する主要な要素を説明します。
| 構成要素 | 説明 |
|---|---|
| DBインスタンス | データベースが動作する仮想サーバー |
| DBサブネットグループ | DBインスタンスを配置するサブネットの集合 |
| セキュリティグループ | ネットワークレベルでのアクセス制御 |
| パラメータグループ | データベースエンジンの設定パラメータ |
| オプショングループ | 追加機能の設定(エンジンによって異なる) |
対応データベースエンジン
RDSは、8種類のデータベースエンジンをサポートしています。既存のアプリケーションで使用しているデータベースと同じエンジンを選択することで、コードの変更なしにRDSへ移行できます。
エンジン一覧と特徴
各データベースエンジンの特徴を以下にまとめます。
| エンジン | 特徴 | 主なユースケース |
|---|---|---|
| Amazon Aurora (MySQL互換) | MySQLの5倍の性能、自動スケーリングストレージ | 高性能が必要なWebアプリケーション |
| Amazon Aurora (PostgreSQL互換) | PostgreSQLの3倍の性能、Global Database対応 | エンタープライズアプリケーション |
| MySQL | 最も普及したOSSデータベース、幅広いエコシステム | 汎用的なWebアプリケーション |
| PostgreSQL | 高度な機能、拡張性、JSON対応 | 複雑なクエリが必要なシステム |
| MariaDB | MySQLからフォーク、オープンソースコミュニティ主導 | MySQL互換が必要なシステム |
| Oracle | エンタープライズ機能、既存Oracle資産の移行 | 基幹システム、レガシー移行 |
| SQL Server | Microsoft製品との親和性、.NETアプリケーション | Windowsベースのシステム |
| Db2 | IBM製品との連携、メインフレーム移行 | IBM環境からの移行 |
Amazon Auroraとその他のエンジンの違い
Amazon Auroraは、AWSがクラウド向けに設計したデータベースエンジンです。MySQLまたはPostgreSQLと互換性がありながら、独自のストレージアーキテクチャにより高いパフォーマンスと可用性を実現しています。
graph TB
subgraph "Aurora アーキテクチャ"
subgraph "コンピュートレイヤー"
Primary[プライマリインスタンス]
Replica1[Auroraレプリカ 1]
Replica2[Auroraレプリカ 2]
end
subgraph "ストレージレイヤー (3AZに分散)"
Storage[(共有クラスターストレージ<br/>自動的に10GBずつ拡張<br/>最大128TB)]
end
end
Primary --> Storage
Replica1 --> Storage
Replica2 --> StorageAuroraの主な特徴は以下のとおりです。
- 高性能: 標準MySQLの5倍、標準PostgreSQLの3倍のスループット
- 自動拡張ストレージ: 10GBから128TBまで自動的に拡張
- 高可用性: 3つのAZに6つのデータコピーを保持、自動修復機能
- 高速フェイルオーバー: 通常30秒以内でフェイルオーバー完了
- リードレプリカ: 最大15個のAuroraレプリカを作成可能
エンジンの選択基準
データベースエンジンを選択する際の判断基準を示します。
flowchart TD
Start[データベースエンジンの選択] --> Q1{既存DBの<br/>移行か?}
Q1 -->|はい| Q2{同じエンジンを<br/>使いたいか?}
Q2 -->|はい| Same[同じエンジンを選択]
Q2 -->|いいえ| Q3{パフォーマンス<br/>向上が必要?}
Q1 -->|いいえ| Q4{特定の<br/>要件があるか?}
Q3 -->|はい| Aurora[Aurora を検討]
Q3 -->|いいえ| Same
Q4 -->|MS製品連携| SQLServer[SQL Server]
Q4 -->|高度なSQL/JSON| PostgreSQL[PostgreSQL]
Q4 -->|シンプル/実績重視| MySQL[MySQL]
Q4 -->|最高性能| Aurora新規プロジェクトでは、特別な要件がない限り、以下の順で検討することを推奨します。
- Aurora MySQL/PostgreSQL: 最高のパフォーマンスと可用性が必要な場合
- MySQL: 汎用的なWebアプリケーション、コスト重視の場合
- PostgreSQL: 複雑なクエリ、JSON データ、地理情報を扱う場合
RDSインスタンスの作成
RDSインスタンスを作成する手順を解説します。マネジメントコンソール、AWS CLI、CloudFormationなど複数の方法がありますが、ここではマネジメントコンソールを使用した基本的な手順を説明します。
事前準備
RDSインスタンスを作成する前に、以下の準備が必要です。
- VPCの作成: RDSインスタンスを配置するVPC
- サブネットの作成: 少なくとも2つのAZにプライベートサブネットを作成
- セキュリティグループの作成: データベースポート(MySQL: 3306、PostgreSQL: 5432)を許可
DBサブネットグループの作成
DBサブネットグループは、RDSインスタンスを配置できるサブネットを定義します。マルチAZ配置を有効にする場合、少なくとも2つの異なるAZのサブネットを含める必要があります。
graph TB
subgraph "DBサブネットグループ"
subgraph "AZ-a"
Subnet1[プライベートサブネット<br/>10.0.11.0/24]
end
subgraph "AZ-c"
Subnet2[プライベートサブネット<br/>10.0.12.0/24]
end
endAWS CLIでDBサブネットグループを作成する例を示します。
|
|
インスタンスの作成手順
マネジメントコンソールからRDSインスタンスを作成する主要な設定項目を説明します。
1. エンジンの選択
データベースエンジンとバージョンを選択します。本番環境では、長期サポート(LTS)バージョンを選択することを推奨します。
2. テンプレートの選択
| テンプレート | 用途 | 特徴 |
|---|---|---|
| 本番稼働用 | 本番環境 | マルチAZ、プロビジョンドIOPS、削除保護がデフォルトで有効 |
| 開発/テスト | 開発環境 | シングルAZ、汎用SSD、コスト重視の設定 |
| 無料利用枠 | 学習・検証 | db.t3.microインスタンス、20GB ストレージ |
3. インスタンスの設定
|
|
主要なパラメータの説明は以下のとおりです。
| パラメータ | 説明 |
|---|---|
| db-instance-identifier | DBインスタンスの識別子(リージョン内で一意) |
| db-instance-class | インスタンスのスペック(CPU、メモリ) |
| engine | データベースエンジン |
| allocated-storage | ストレージサイズ(GB) |
| storage-type | ストレージタイプ(gp2、gp3、io1、io2) |
| multi-az | マルチAZ配置の有効化 |
| storage-encrypted | ストレージ暗号化の有効化 |
| publicly-accessible | パブリックアクセスの許可(通常はfalse) |
インスタンスクラスの選び方
RDSのインスタンスクラスは、EC2のインスタンスタイプに相当します。ワークロードに応じて適切なクラスを選択します。
| クラスファミリー | 特徴 | ユースケース |
|---|---|---|
| db.t3/t4g | バースト可能、低コスト | 開発・テスト、小規模ワークロード |
| db.m5/m6g/m7g | 汎用、バランスの取れた性能 | 一般的な本番ワークロード |
| db.r5/r6g/r7g | メモリ最適化 | 大規模データセット、キャッシュ |
| db.x2g | 超大容量メモリ | インメモリデータベース |
命名規則は db.<ファミリー>.<サイズ> です。例えば db.m6g.large は、m6gファミリー(汎用、Graviton2プロセッサ)のlargeサイズを意味します。
ストレージタイプの選択
RDSでは、用途に応じて複数のストレージタイプを選択できます。
| ストレージタイプ | 特徴 | IOPS | ユースケース |
|---|---|---|---|
| gp2 | 汎用SSD、バースト機能あり | 最大16,000 | 一般的なワークロード |
| gp3 | 汎用SSD、IOPSとスループットを独立指定 | 最大64,000 | コスト効率重視 |
| io1 | プロビジョンドIOPS、高性能 | 最大64,000 | I/O集約型ワークロード |
| io2 | プロビジョンドIOPS、高耐久性 | 最大256,000 | ミッションクリティカル |
gp3は2020年に登場した新しいストレージタイプで、gp2と比較してコストパフォーマンスに優れています。新規作成時はgp3を選択することを推奨します。
パラメータグループ
パラメータグループは、データベースエンジンの設定値をまとめて管理するコンテナです。デフォルトのパラメータグループは変更できないため、設定をカスタマイズする場合はカスタムパラメータグループを作成します。
パラメータグループの種類
| 種類 | 説明 |
|---|---|
| DBパラメータグループ | 個々のDBインスタンスに適用される設定 |
| DBクラスターパラメータグループ | Auroraクラスター全体に適用される設定 |
主要なパラメータ例
MySQLの代表的なパラメータを以下に示します。
|
|
よく変更されるパラメータの例を以下に示します。
| パラメータ | 説明 | 適用方法 |
|---|---|---|
| max_connections | 最大同時接続数 | 再起動が必要 |
| slow_query_log | スロークエリログの有効化 | 即時適用 |
| long_query_time | スロークエリの閾値(秒) | 即時適用 |
| character_set_server | サーバーの文字セット | 再起動が必要 |
| time_zone | タイムゾーン設定 | 再起動が必要 |
適用方法(Apply Method)
パラメータには、適用方法が2種類あります。
- immediate(即時適用): パラメータ変更後すぐに反映される(動的パラメータ)
- pending-reboot(再起動後適用): DBインスタンスの再起動後に反映される(静的パラメータ)
パラメータグループを変更した後、静的パラメータが含まれる場合は、DBインスタンスを再起動して変更を適用する必要があります。
オプショングループ
オプショングループは、データベースエンジンの追加機能を管理します。エンジンによって利用可能なオプションが異なります。
オプションの例
| エンジン | オプション | 説明 |
|---|---|---|
| MySQL | MEMCACHED | Memcached互換のインメモリキャッシュ |
| Oracle | OEM | Oracle Enterprise Manager |
| Oracle | APEX | Oracle Application Express |
| SQL Server | TDE | 透過的データ暗号化 |
| SQL Server | SSRS | SQL Server Reporting Services |
MySQLやPostgreSQLでは、多くの機能がパラメータグループで設定できるため、オプショングループを使用する機会は比較的少ないです。OracleやSQL Serverでは、エンタープライズ機能を有効にするためにオプショングループを使用します。
アプリケーションからの接続
RDSインスタンスが作成されたら、アプリケーションから接続できます。接続にはエンドポイント(ホスト名)、ポート番号、データベース名、認証情報が必要です。
接続情報の確認
RDSインスタンスのエンドポイントは、マネジメントコンソールまたはAWS CLIで確認できます。
|
|
接続文字列の例
各言語・フレームワークでの接続文字列の例を示します。
MySQL接続文字列
|
|
Node.js(mysql2)の例
|
|
Python(psycopg2)の例
|
|
IAM データベース認証
パスワード認証に加えて、IAMデータベース認証を使用することで、IAMユーザーまたはロールの認証情報でデータベースに接続できます。
sequenceDiagram
participant App as アプリケーション
participant IAM as IAM
participant RDS as RDS
App->>IAM: 認証トークンをリクエスト
IAM->>App: 認証トークンを返却(15分間有効)
App->>RDS: トークンを使用して接続
RDS->>App: 接続成功IAMデータベース認証のメリットは以下のとおりです。
- パスワードをアプリケーションに埋め込む必要がない
- IAMポリシーで細かいアクセス制御が可能
- AWS CloudTrailで接続を監査できる
- 認証トークンは15分で自動的に期限切れ
セキュリティのベストプラクティス
RDSインスタンスを安全に運用するためのベストプラクティスを紹介します。
ネットワークセキュリティ
graph TB
subgraph "セキュアな構成"
Internet((インターネット))
subgraph "VPC"
subgraph "パブリックサブネット"
ALB[ALB]
end
subgraph "プライベートサブネット1"
EC2[EC2]
end
subgraph "プライベートサブネット2"
RDS[(RDS)]
end
end
end
Internet --> ALB
ALB --> EC2
EC2 -->|3306| RDS- プライベートサブネットに配置: RDSはパブリックアクセスを無効にし、プライベートサブネットに配置
- セキュリティグループの最小権限: データベースポートへのアクセスを必要なソース(EC2のセキュリティグループ)のみに制限
- VPCエンドポイントの活用: Secrets ManagerやS3へのアクセスにVPCエンドポイントを使用
データ保護
- 保管時の暗号化: ストレージ暗号化を有効化(作成時のみ設定可能)
- 転送時の暗号化: SSL/TLS接続を強制(パラメータで設定可能)
- 認証情報の管理: AWS Secrets Managerでパスワードを管理、自動ローテーションを有効化
監査とモニタリング
- 拡張モニタリング: OSレベルのメトリクスを1秒単位で収集
- Performance Insights: データベースのパフォーマンスを可視化
- 監査ログ: データベースの操作を記録(エンジンによって設定方法が異なる)
まとめ
本記事では、Amazon RDSの基本概念から、データベースエンジンの選び方、インスタンスの作成手順、パラメータグループとオプショングループの設定方法を解説しました。
主なポイントをまとめます。
- RDSはフルマネージドサービスで、パッチ適用やバックアップなどの管理タスクをAWSが代行
- 8種類のデータベースエンジンをサポートし、既存アプリケーションのコードをそのまま使用可能
- Amazon Auroraは最高のパフォーマンスと可用性を提供するAWS独自のエンジン
- パラメータグループでデータベースエンジンの設定をカスタマイズ
- セキュリティはネットワーク分離、暗号化、IAM連携で多層的に確保
次回の記事では、RDSの高可用性構成(マルチAZ配置)とバックアップ戦略について解説します。本番環境で信頼性の高いデータベース運用を実現するための知識を身につけましょう。