前回までの記事では、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 --> RDS1

RDSの構成要素

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 --> Storage

Auroraの主な特徴は以下のとおりです。

  • 高性能: 標準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

新規プロジェクトでは、特別な要件がない限り、以下の順で検討することを推奨します。

  1. Aurora MySQL/PostgreSQL: 最高のパフォーマンスと可用性が必要な場合
  2. MySQL: 汎用的なWebアプリケーション、コスト重視の場合
  3. PostgreSQL: 複雑なクエリ、JSON データ、地理情報を扱う場合

RDSインスタンスの作成

RDSインスタンスを作成する手順を解説します。マネジメントコンソール、AWS CLI、CloudFormationなど複数の方法がありますが、ここではマネジメントコンソールを使用した基本的な手順を説明します。

事前準備

RDSインスタンスを作成する前に、以下の準備が必要です。

  1. VPCの作成: RDSインスタンスを配置するVPC
  2. サブネットの作成: 少なくとも2つのAZにプライベートサブネットを作成
  3. セキュリティグループの作成: データベースポート(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
    end

AWS CLIでDBサブネットグループを作成する例を示します。

1
2
3
4
aws rds create-db-subnet-group \
    --db-subnet-group-name my-db-subnet-group \
    --db-subnet-group-description "Subnet group for RDS" \
    --subnet-ids subnet-xxxxxxxx subnet-yyyyyyyy

インスタンスの作成手順

マネジメントコンソールからRDSインスタンスを作成する主要な設定項目を説明します。

1. エンジンの選択

データベースエンジンとバージョンを選択します。本番環境では、長期サポート(LTS)バージョンを選択することを推奨します。

2. テンプレートの選択

テンプレート 用途 特徴
本番稼働用 本番環境 マルチAZ、プロビジョンドIOPS、削除保護がデフォルトで有効
開発/テスト 開発環境 シングルAZ、汎用SSD、コスト重視の設定
無料利用枠 学習・検証 db.t3.microインスタンス、20GB ストレージ

3. インスタンスの設定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# AWS CLIでRDSインスタンスを作成する例
aws rds create-db-instance \
    --db-instance-identifier my-database \
    --db-instance-class db.t3.medium \
    --engine mysql \
    --engine-version 8.0.35 \
    --master-username admin \
    --master-user-password MySecurePassword123! \
    --allocated-storage 100 \
    --storage-type gp3 \
    --vpc-security-group-ids sg-xxxxxxxx \
    --db-subnet-group-name my-db-subnet-group \
    --backup-retention-period 7 \
    --multi-az \
    --storage-encrypted \
    --no-publicly-accessible

主要なパラメータの説明は以下のとおりです。

パラメータ 説明
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の代表的なパラメータを以下に示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# カスタムパラメータグループの作成
aws rds create-db-parameter-group \
    --db-parameter-group-name my-mysql-params \
    --db-parameter-group-family mysql8.0 \
    --description "Custom parameters for MySQL 8.0"

# パラメータの変更
aws rds modify-db-parameter-group \
    --db-parameter-group-name my-mysql-params \
    --parameters "ParameterName=max_connections,ParameterValue=500,ApplyMethod=pending-reboot" \
                 "ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate"

よく変更されるパラメータの例を以下に示します。

パラメータ 説明 適用方法
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で確認できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# エンドポイントの確認
aws rds describe-db-instances \
    --db-instance-identifier my-database \
    --query 'DBInstances[0].Endpoint'

# 出力例
{
    "Address": "my-database.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com",
    "Port": 3306,
    "HostedZoneId": "Z24O6O9L7SGTNB"
}

接続文字列の例

各言語・フレームワークでの接続文字列の例を示します。

MySQL接続文字列

1
mysql://admin:password@my-database.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306/mydb

Node.js(mysql2)の例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const mysql = require('mysql2/promise');

const connection = await mysql.createConnection({
  host: 'my-database.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com',
  port: 3306,
  user: 'admin',
  password: 'password',
  database: 'mydb',
  ssl: {
    rejectUnauthorized: true
  }
});

Python(psycopg2)の例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import psycopg2

connection = psycopg2.connect(
    host='my-database.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com',
    port=5432,
    user='admin',
    password='password',
    database='mydb',
    sslmode='require'
)

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配置)とバックアップ戦略について解説します。本番環境で信頼性の高いデータベース運用を実現するための知識を身につけましょう。

参考リンク