サイトアイコンmaita tomoya dev io

AWS RDS

devops

AWS RDS(Relational Database Service)

RDSとは

Amazon RDSは、クラウド上でリレーショナルデータベースを簡単にセットアップ、運用、スケーリングできるマネージドサービス。ハードウェアのプロビジョニング、データベースのセットアップ、パッチ適用、バックアップなどの煩雑な管理作業をAWSが代行してくれる。

RDSを使うメリット

項目自前運用(EC2上にDB構築)RDS
OSパッチ適用自分で対応AWSが自動対応
DBエンジンのアップデート自分で対応マネジメントコンソールから実行
バックアップ自分でcronなどで設定自動バックアップ機能あり
高可用性自分でレプリケーション構築Multi-AZワンクリック
スケーリング手動でサーバー追加リードレプリカ・インスタンスクラス変更
監視自分でモニタリング構築CloudWatch統合済み
障害対応自分でフェイルオーバー構築自動フェイルオーバー

対応データベースエンジン

RDSは6つのデータベースエンジンに対応している。

エンジン一覧

エンジンバージョン例特徴ユースケース
MySQL5.7, 8.0世界で最も普及したOSSデータベースWebアプリケーション全般
PostgreSQL13, 14, 15, 16高機能なOSSデータベース、JSON対応複雑なクエリ、地理情報、分析
MariaDB10.6, 10.11MySQLから派生したOSSMySQLの代替、OSSライセンス重視
Oracle19c, 21cエンタープライズ向け商用DBレガシーシステム、Oracle依存アプリ
SQL Server2019, 2022Microsoft製の商用DB.NETアプリケーション、Windows環境
Amazon AuroraMySQL互換 / PostgreSQL互換AWS独自の高性能DB高いパフォーマンスと可用性が必要な場合

エンジン選定の指針

graph TD A[DBエンジン選定] --> B{既存システムからの移行?} B -->|はい| C{現在のエンジンは?} C -->|MySQL| D[RDS MySQL or Aurora MySQL] C -->|PostgreSQL| E[RDS PostgreSQL or Aurora PostgreSQL] C -->|Oracle| F[RDS Oracle] C -->|SQL Server| G[RDS SQL Server] B -->|いいえ| H{要件は?} H -->|高パフォーマンス・高可用性| I[Aurora] H -->|コスト重視・シンプル| J[RDS MySQL or PostgreSQL] H -->|JSON・地理情報・高度なSQL| K[RDS PostgreSQL or Aurora PostgreSQL] H -->|.NET環境| G

RDSの基本アーキテクチャ

コンポーネント

graph TB subgraph VPC subgraph "DBサブネットグループ" subgraph "AZ-a" PRIMARY[("プライマリDBインスタンス")] end subgraph "AZ-c" STANDBY[("スタンバイDBインスタンス<br/>Multi-AZ")] end end SG["セキュリティグループ<br/>ポート3306許可"] end APP[アプリケーション] --> EP["RDSエンドポイント"] EP --> PRIMARY PRIMARY -->|同期レプリケーション| STANDBY PRIMARY -->|自動バックアップ| S3[("S3<br/>バックアップ保存")] SG -.->|適用| PRIMARY SG -.->|適用| STANDBY

DBインスタンスクラス

RDSのインスタンスクラスはEC2のインスタンスタイプに類似しており、CPU・メモリの組み合わせで選択する。

カテゴリプレフィックス特徴用途
汎用db.m5, db.m6g, db.m7gバランスの取れた性能一般的なワークロード
メモリ最適化db.r5, db.r6g, db.r7gメモリ重視大量データのキャッシュ
バースト可能db.t3, db.t4gベースライン+バースト開発・テスト、小規模ワークロード

DBサブネットグループ

RDSインスタンスを配置するサブネットの集合。少なくとも2つ以上のAZにまたがるサブネットが必要。

DBサブネットグループ
├── サブネット: subnet-aaa (AZ: ap-northeast-1a) - 10.0.10.0/24
├── サブネット: subnet-bbb (AZ: ap-northeast-1c) - 10.0.11.0/24
└── サブネット: subnet-ccc (AZ: ap-northeast-1d) - 10.0.12.0/24

Multi-AZ(高可用性)

Multi-AZデプロイメント

Multi-AZを有効にすると、プライマリインスタンスとは異なるAZにスタンバイインスタンスが自動的に作成される。プライマリに障害が発生した場合、自動的にスタンバイへフェイルオーバーする。

項目説明
レプリケーション同期レプリケーション
フェイルオーバー時間通常60〜120秒
スタンバイへの読み取り不可(フェイルオーバー専用)
DNSエンドポイント変更不要(自動切り替え)
追加料金インスタンス料金が約2倍

Multi-AZの動作

通常時:
  アプリ → RDSエンドポイント → プライマリ(AZ-a) ←同期→ スタンバイ(AZ-c)

障害発生時:
  1. プライマリ(AZ-a)に障害検知
  2. スタンバイ(AZ-c)をプライマリに昇格
  3. DNSレコードを新プライマリに自動変更
  4. アプリは同じエンドポイントで接続継続

Multi-AZクラスター(新機能)

MySQL/PostgreSQLで利用可能な新しいMulti-AZデプロイメントオプション。1つのプライマリと2つのリーダーインスタンスで構成され、リーダーインスタンスへの読み取りが可能。

項目Multi-AZインスタンスMulti-AZクラスター
リーダー数0(スタンバイのみ)2
読み取り負荷分散不可可能
フェイルオーバー時間60〜120秒約35秒以下
レプリケーション同期準同期(セミシンクロナス)

リードレプリカ

リードレプリカとは

プライマリインスタンスの読み取り専用コピー。非同期レプリケーションで、読み取りトラフィックをスケールアウトできる。

項目説明
最大数MySQL/MariaDB/PostgreSQL: 15個、Oracle: 5個、SQL Server: 5個
レプリケーション非同期
読み取り可能
書き込み不可
クロスリージョン対応(MySQL, MariaDB, PostgreSQL)
プライマリへの昇格可能(手動操作)

リードレプリカの使い方

書き込み(INSERT/UPDATE/DELETE):
  アプリ → プライマリエンドポイント → プライマリDB

読み取り(SELECT):
  アプリ → リーダーエンドポイント → リードレプリカ1
                                  → リードレプリカ2
                                  → リードレプリカ3

リードレプリカのユースケース

  • 読み取り負荷の分散: レポーティングやBI用のクエリをレプリカに振り分け
  • DRサイト: クロスリージョンレプリカをDR用に活用
  • マイグレーション: レプリカを昇格させてエンジンアップグレード

Amazon Aurora

Auroraとは

AWSが独自に開発したクラウドネイティブなリレーショナルデータベース。MySQL及びPostgreSQLと互換性があり、標準的なRDSと比較して最大5倍(MySQL)/ 3倍(PostgreSQL)のスループットを実現する。

Auroraのアーキテクチャ

Auroraは従来のRDSとは根本的に異なるストレージアーキテクチャを持つ。

項目通常のRDSAurora
ストレージEBSボリューム分散ストレージ(6コピー/3AZ)
レプリケーションストリーミングストレージレベル
フェイルオーバー60〜120秒通常30秒以下
最大ストレージ64TB(gp3)128TB(自動拡張)
リードレプリカ最大5〜15個最大15個(低レイテンシ)

Auroraの特徴的な機能

Aurora Serverless v2:

  • 需要に応じてコンピュートキャパシティが自動スケーリング
  • ACU(Aurora Capacity Unit)単位でのスケーリング(0.5 ACU〜128 ACU)
  • 開発/テスト環境や変動するワークロードに最適
  • プロビジョンドインスタンスとServerlessの混在が可能

Aurora Global Database:

  • 最大5つのリージョンにまたがるレプリケーション
  • リージョン間レプリケーション遅延は通常1秒未満
  • DRシナリオで別リージョンへ1分以内にフェイルオーバー可能

Aurora Cloning:

  • プロダクションデータベースのクローンを数分で作成
  • Copy-on-Write方式で追加のストレージコストを抑制
  • テスト環境やデバッグ用に活用

RDS Proxy

RDS Proxyとは

RDSのためのフルマネージドデータベースプロキシ。データベース接続のプーリングと共有を行い、アプリケーションのスケーラビリティと可用性を向上させる。

RDS Proxyが解決する問題

問題RDS Proxyによる解決
Lambda同時実行時のDB接続数爆発コネクションプーリングで接続を共有
フェイルオーバー時のダウンタイムフェイルオーバーを自動的に処理し接続を維持
認証情報の管理Secrets Managerと統合
DB接続のオーバーヘッド接続の再利用でオーバーヘッド削減

RDS Proxyのアーキテクチャ

graph LR L1[Lambda関数1] --> PROXY["RDS Proxy<br/>(コネクションプーリング)"] L2[Lambda関数2] --> PROXY L3[Lambda関数3] --> PROXY L4[Lambda関数N] --> PROXY PROXY -->|少数の接続で共有| DB[("RDS / Aurora")] SM["Secrets Manager<br/>(認証情報)"] -.->|参照| PROXY

RDS Proxyの設定ポイント

  • 対応エンジン: MySQL、PostgreSQL、MariaDB、SQL Server(Aurora含む)
  • 接続プーリング: MaxConnectionsPercentでプール可能な接続数の割合を設定(デフォルト100%)
  • IAM認証: RDS ProxyへのアクセスにIAM認証が利用可能
  • Secrets Manager統合: DB認証情報をSecrets Managerで安全に管理
  • ピン留め(Pinning): セッション固有の状態を使う接続はプーリングから除外される

バックアップとリストア

自動バックアップ

RDSはデフォルトで自動バックアップが有効。

項目説明
バックアップウィンドウ毎日指定した時間帯にスナップショット取得
保持期間1〜35日(デフォルト7日、0で無効化)
バックアップ方式スナップショット + トランザクションログ
リストア任意の時点に復元可能(ポイントインタイムリカバリ)
保存先S3(ユーザーからは不可視)
パフォーマンス影響Multi-AZの場合はスタンバイから取得するため最小限

手動スナップショット

ユーザーが任意のタイミングで作成するスナップショット。自動バックアップと異なり、明示的に削除するまで保持される。

ユースケース:

  • メジャーバージョンアップグレード前
  • 大規模なデータマイグレーション前
  • 本番環境のスナップショットを別アカウントに共有

ポイントインタイムリカバリ(PITR)

自動バックアップの保持期間内の任意の時点にデータベースを復元できる機能。5分前までの復元が可能。

バックアップの仕組み:
  日次スナップショット + 5分ごとのトランザクションログ → 任意時点に復元可能

リストア時の注意:
  - 復元先は新しいDBインスタンスとして作成される
  - 既存のインスタンスに上書き復元はできない
  - 復元後にエンドポイントが変わるため、アプリケーション側の設定変更が必要

パラメータグループとオプショングループ

パラメータグループ

データベースエンジンの設定パラメータを管理するコンテナ。

種類説明
デフォルトパラメータグループAWSが提供する初期設定。変更不可
カスタムパラメータグループユーザーが作成し自由に変更可能
DBクラスターパラメータグループAurora用、クラスター全体に適用

よく変更するパラメータ例(MySQL):

パラメータ説明デフォルト
max_connections最大接続数インスタンスクラスに依存
character_set_server文字コードlatin1 → utf8mb4に変更推奨
slow_query_logスロークエリログ0(無効)→ 1に変更推奨
long_query_timeスロークエリ閾値(秒)10 → 1〜2に変更推奨
innodb_buffer_pool_sizeバッファプールサイズインスタンスメモリの75%
time_zoneタイムゾーンUTC → Asia/Tokyoに変更可能

適用タイミング

タイプ説明再起動
dynamic即座に適用可能不要
static再起動後に適用必要

セキュリティ

ネットワークセキュリティ

インターネット
    ↓ ×(プライベートサブネットなのでアクセス不可)
VPC
├── パブリックサブネット
│   └── EC2(アプリケーション)
│       ↓ ポート3306許可(セキュリティグループ)
├── プライベートサブネット
│   └── RDSインスタンス(パブリックアクセス: 無効)
└── セキュリティグループ: アプリのSGからのみ3306許可

ベストプラクティス:

  • RDSはプライベートサブネットに配置する
  • パブリックアクセスは原則無効にする
  • セキュリティグループでアプリケーションのSGからのみポート許可
  • NACLで追加のネットワーク制御

暗号化

暗号化の種類説明
保管時の暗号化(At Rest)AES-256。KMSのキーを使用。インスタンス作成時に有効化
転送中の暗号化(In Transit)SSL/TLSによる接続の暗号化
スナップショットの暗号化暗号化されたインスタンスのスナップショットは自動で暗号化

注意点:

  • 暗号化は作成時にのみ設定可能。既存の非暗号化インスタンスを暗号化するには、スナップショットを取得→暗号化コピー→復元が必要
  • リードレプリカはプライマリと同じ暗号化設定を継承する

IAM認証

RDSはIAM認証もサポートしている。パスワードの代わりにIAMの認証トークンを使用してデータベースに接続できる。

  • MySQL、PostgreSQL、MariaDBで対応
  • トークンの有効期限は15分
  • パスワード管理が不要になりセキュリティが向上
  • Secrets Managerとの併用も推奨

監視とメンテナンス

CloudWatch メトリクス

メトリクス説明注意すべき閾値
CPUUtilizationCPU使用率80%超えが続く場合はスケールアップ検討
FreeableMemory利用可能メモリ低下傾向の場合はメモリ不足の兆候
DatabaseConnections現在の接続数max_connectionsに近づいたら対処
ReadIOPS / WriteIOPS読み書きIOPSストレージ性能のボトルネック確認
FreeStorageSpace残りストレージ容量枯渇前にスケーリング
ReplicaLagレプリケーション遅延リードレプリカの遅延確認

Enhanced Monitoring

  • OS レベルのメトリクス(プロセス、メモリ、ファイルシステム等)を1秒間隔で取得
  • CloudWatch Logsに送信
  • 標準のCloudWatchメトリクスでは見えないOS内部の情報を確認可能

Performance Insights

  • SQLクエリレベルのパフォーマンス分析ツール
  • 「データベースの負荷(DB Load)」を時系列で可視化
  • Top SQLでボトルネックとなっているクエリを特定
  • 待機イベント分析で何がパフォーマンスを制限しているか把握

メンテナンスウィンドウ

  • AWSによるパッチ適用やマイナーバージョンアップグレードの時間帯
  • 週次で30分のウィンドウを指定
  • Multi-AZの場合、スタンバイ→プライマリの順で適用しダウンタイムを最小化

料金

課金の構成要素

項目説明
インスタンス時間DBインスタンスの起動時間(秒単位)
ストレージ確保したストレージ容量(GB/月)
IOPSio1/io2の場合はプロビジョンドIOPSに対して課金
バックアップストレージ保持期間分の自動バックアップ + 手動スナップショット
データ転送リージョン外へのデータ転送

コスト最適化のポイント

方法節約率適用条件
リザーブドインスタンス(1年)約30〜40%長期利用が確定している場合
リザーブドインスタンス(3年)約50〜60%長期利用が確定している場合
Aurora Serverless v2変動ワークロードが変動する場合
ストレージタイプの見直し変動gp3はgp2より安価な場合がある
リードレプリカの適正化変動不要なレプリカの削除
インスタンスクラスの適正化変動Performance Insightsで分析

無料利用枠(12か月)

  • db.t2.micro / db.t3.micro / db.t4g.micro: 月750時間
  • ストレージ: 20GB(gp2)
  • バックアップストレージ: 20GB

実務でのRDS設計パターン

パターン1: Webアプリケーション標準構成

ALB → EC2(Auto Scaling) → RDS(Multi-AZ) + リードレプリカ
                                ↓
                         Secrets Manager(認証情報管理)
  • Multi-AZで高可用性を確保
  • リードレプリカで読み取り負荷を分散
  • Secrets Managerでパスワードのローテーション自動化

パターン2: サーバーレス構成

API Gateway → Lambda → RDS Proxy → Aurora Serverless v2
                           ↓
                     Secrets Manager
  • Lambda同時実行による接続数爆発をRDS Proxyで解決
  • Aurora Serverless v2でコスト最適化
  • Secrets Manager統合でセキュアな認証

パターン3: マルチリージョンDR構成

東京リージョン:
  Aurora MySQL(プライマリクラスター)
    ├── ライターインスタンス
    └── リーダーインスタンス x 2
        ↓ グローバルデータベース(<1秒遅延)
大阪リージョン:
  Aurora MySQL(セカンダリクラスター)
    └── リーダーインスタンス x 1
  • Aurora Global Databaseでクロスリージョンレプリケーション
  • 大阪リージョンで読み取りリクエストを処理(レイテンシ低減)
  • 東京リージョン障害時に大阪へフェイルオーバー

マイグレーション

AWS Database Migration Service(DMS)

既存のデータベースをRDSに移行するためのサービス。

移行パターン説明
同種移行MySQL → RDS MySQL、PostgreSQL → Aurora PostgreSQL
異種移行Oracle → Aurora PostgreSQL、SQL Server → RDS MySQL
継続的レプリケーションCDC(Change Data Capture)で差分を継続的に同期

移行のステップ

  1. AWS Schema Conversion Tool(SCT) でスキーマを変換(異種移行の場合)
  2. DMS レプリケーションインスタンス を作成
  3. ソースエンドポイント(移行元DB)とターゲットエンドポイント(RDS)を設定
  4. タスク を作成して移行を実行
  5. 全データ移行完了後、CDC(差分同期)で同期を継続
  6. アプリケーションの接続先をRDSに切り替え

トラブルシューティング

よくある問題と対処法

問題原因対処法
接続できないセキュリティグループ設定インバウンドルールでDBポートを許可
接続数超過max_connectionsに到達インスタンスクラス変更 or RDS Proxy導入
ストレージ不足データ増加ストレージのオートスケーリング有効化
パフォーマンス低下スロークエリPerformance Insightsで特定・チューニング
レプリカラグ増大書き込み負荷過多インスタンスクラスの見直し
フェイルオーバーが遅いMulti-AZインスタンスMulti-AZクラスターへの移行検討

参考文献