RDS

【VPC内リージョンサービス】

RDS(Relational Database Service)は、AWSが提供するフルマネージド型のリレーショナルデータベースサービスです。

MySQL、PostgreSQL、MariaDB、Oracle、SQL Serverなどの主要なデータベースエンジンをサポートしており、加えて高性能で可用性に優れたAuroraも利用できます。

RDSでは、自動バックアップPITR(ポイントインタイムリカバリ)、マルチAZ(Availability Zone)構成、読み取り負荷分散を実現するRead Replica(リードレプリカ)機能などをマネージド化しており、運用負荷を大幅に削減できます。

RDS Proxy によりデータベース接続のプーリングや効率的な接続管理を行うことで、アプリケーションのスケーラビリティと可用性を向上させることができます。

データは EBS(Elastic Block Store)上で暗号化され、Snapshot(スナップショット)によるバックアップ管理も自動で行われます。RDSは VPC(Virtual Private Cloud)内に配置 され、SG(Security Group)を用いてネットワークアクセスを制御することで、安全な閉域環境を実現します。

データベースエンジンの設定は パラメータグループによって一元管理でき、パフォーマンスや動作設定を柔軟に調整することが可能です。

重要用語

関連サービス

ユースケース

業務システム用のリレーショナルDB受発注管理や会員管理などの業務アプリケーション向けに、MySQLやPostgreSQL等のリレーショナルデータベースをフルマネージドで利用する。
既存オンプレDBのクラウド移行オンプレミスのOracleやSQL Serverなどで動いているDBをRDSに移行し、バックアップ・パッチ適用・フェイルオーバーを自動化する。
読み取り専用のレポート・分析用DBリードレプリカを作成し、本番書き込み用DBとは分けてBIツールやレポート処理の読み取り負荷をさばく構成をとる。

ベストプラクティス

マルチAZ構成の有効化本番環境ではスタンバイインスタンス付きのマルチAZで可用性を高める。
パラメータグループの管理DBエンジンごとの最適な設定をパラメータグループで一元管理する。
自動バックアップとスナップショットリテンション期間を設定し、ポイントインタイムリカバリを可能にする。

高可用性・バックアップ・リトライ

高可用性・バックアップ・リトライ設計のポイント
【デフォルト】AWS内部で冗長化
 ・EBSボリュームの冗長化(EBSの標準機能として、同一AZ内で複数のコピーが保持されます)
【リードレプリカ】の作成(MySQL、PostgreSQL 最大5台 / MariaDB 最大15台)
【DBインスタンスのマルチAZ構成】(プライマリDBとスタンバイDBを異なるAZに自動配置)
【データベースプロキシ】の利用(アプリケーションの接続要求を RDS Proxy がまとめてプール)
【クロスリージョンレプリカ】(ディザスタリカバリ要件がある場合)
【自動バックアップ】バックアップ保持期間 0~35 日(0 で自動バックアップ無効)
 デフォルト 7 日
 DBインスタンスのストレージを継続的に S3 にバックアップ
 PITR:日次スナップショット+トランザクションログにより、保持期間内の任意時点に復元可能
【スナップショット】任意のタイミングで手動スナップショットを取得可能
 保持期限は無制限(ユーザーが削除するまで保持)
 DB インスタンスのストレージ全体を S3 にスナップショットとして保存
 スナップショットからいつでも DB インスタンスを復元可能(スナップショット時点)

セキュリティ

関連サービス設定内容
Subnet(公開リソースと内部リソースの分離)【DBサーバ】
 Privateの専用SubnetでマルチAZ構成
SG(リソース単位のアクセス制御)【DBサーバ】
 インバウンド:3306(MySQL)
        5432(PostgreSQL)
        1433(MSSQL)
        1521(Oracle)
 アウトバウンド:すべて許可
KMS(データの暗号化と鍵の安全管理)【 AWS管理キーによる暗号化を実施】
 独自KMSキーを使うことを推奨(鍵操作、監査)
Secrets Manager(機密情報の安全管理)シークレット(秘密情報)の作成が推奨
 DB認証情報
SSM Parameter Store(設定情報の一元管理)-
CloudTrail(操作履歴の記録・監査・追跡)【自動記録】
作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI)
データ操作は追跡できない(データプレーンAPI)
Config(リソースの構成状態・設定変更を記録)【Configが有効な場合】
DB設定変更履歴・暗号化/自動バックアップ/公開可否の準拠評価
GuardDuty(脅威を自動検出)【GuardDutyが有効な場合】
DB操作のAPI異常検知+VPC内通信の異常検知

【追加オプション】
RDS Login Activity Monitoring導入を推奨
RDS データベースへのログイン試行を監視(Brute Force, 不正ログイン等) RDS インスタンス単位 RDSLoginEvents={Enable=true} で有効化
RDS が使用する SLR の連携パターン
SLR名 : AWSServiceRoleForRDS
SLR が操作するサービス用途
EC2DBインスタンス用のネットワークインターフェース管理
CloudWatch Logsデータベースログの出力(エラーログ、スロークエリログなど)
CloudWatch拡張モニタリングメトリクスの送信
S3自動バックアップとスナップショットの保存
KMSデータベース暗号化の管理
Secrets Managerマスターパスワードのローテーション
権限設計の原則

ログ・監視

ログ出力先ログの種類
CloudWatch Logsデータベースログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
NetworkReceiveThroughput受信ネットワークスループット
NetworkTransmitThroughput送信ネットワークスループット
ReadIOPS読み取りIOPS
ReadLatency読み取りレイテンシ
ReadThroughput読み取りスループット
ReplicaLagレプリカ遅延
WriteIOPS書き込みIOPS
WriteLatency書き込みレイテンシ
WriteThroughput書き込みスループット
BinLogDiskUsageバイナリログディスク使用量
CPUUtilizationCPU使用率
DatabaseConnectionsデータベース接続数
FreeStorageSpace空きストレージ容量
FreeableMemory空きメモリ容量
SwapUsageスワップ使用量

制限値(固定値/ハードリミット/ソフトリミット)

固定値制限値
データベース接続数インスタンスタイプとエンジンに依存

ハードリミット制限値
ストレージサイズ最大64 TiB
タグ数/リソース50

ソフトリミット制限値
DBインスタンス数/リージョン40
(合計:RDS+Aurora+Neptune+DocumentDB)
リードレプリカ数/ソースDB5(MySQL/PostgreSQL)
15(Oracle)
手動スナップショット数100/リージョン
パラメータグループ数/リージョン50
DBサブネットグループ数/リージョン50
イベントサブスクリプション数/リージョン20
予約インスタンス数/リージョン40

AWS CLIのサンプルコード

SG を作成する(VPC ID 指定)
aws ec2 create-security-group \
  --group-name rds-sg \
  --vpc-id vpc-xxxxxxxxx \
  --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=rds-sg}]'
SG ID を表示する
aws ec2 describe-security-groups
インバウンドルールを追加する(SG ID 指定)
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxxx \
  --protocol tcp \
  --port 3306 \
  --cidr 0.0.0.0/0
SG を削除する(SG ID 指定)
aws ec2 delete-security-group \
  --group-id sg-xxxxxxxxx

サブネットグループを作成する
aws rds create-db-subnet-group \
  --db-subnet-group-name my-db-subnet-group \
  --db-subnet-group-description "RDS Subnet Group" \
  --subnet-ids subnet-xxxxx subnet-yyyyy
サブネットグループを表示する
aws rds describe-db-subnet-groups
サブネットグループを削除する(サブネットグループ名 指定)
aws rds delete-db-subnet-group \
  --db-subnet-group-name my-db-subnet-group

DBインスタンスを作成する(SG ID、サブネットグループ名 指定)
 multi-az 指定なし ・・・ プライマリを作成する
 multi-az 指定あり ・・・ プライマリ、スタンバイを作成する
aws rds create-db-instance \
  --db-instance-identifier my-database \
  --db-instance-class db.t3.micro \
  --engine mysql \
  --master-username admin \
  --master-user-password MyPassword123! \
  --allocated-storage 20 \
  --db-subnet-group-name my-db-subnet-group \
  --vpc-security-group-ids sg-xxxxx \
  --multi-az
DBインスタンスのマルチAZを有効にする(インスタンス ID 指定)
aws rds modify-db-instance \
  --db-instance-identifier my-database \
  --multi-az \
  --apply-immediately
DBインスタンスのマルチAZを無効にする(インスタンス ID 指定)
aws rds modify-db-instance \
  --db-instance-identifier my-database \
  --no-multi-az \
  --apply-immediately
リードレプリカの作成(インスタンス ID 指定)
aws rds create-db-instance-read-replica \
  --db-instance-identifier my-database-replica \
  --source-db-instance-identifier my-database-primary \
  --db-instance-class db.t3.micro
DBインスタンスを表示する
aws rds describe-db-instances
DBインスタンスを削除する(インスタンス ID 指定)
 DBインスタンスの削除 ・・・ マルチAZの場合、スタンバイも削除されます
 リードレプリカの削除  ・・・ リードレプリカが単独で削除されます
aws rds delete-db-instance \
  --db-instance-identifier my-database \
  --skip-final-snapshot

【フェールオーバーなし】DBインスタンスを再起動する(インスタンス ID 指定)
aws rds reboot-db-instance \
  --db-instance-identifier my-database
【フェールオーバーあり】DBインスタンスを再起動する(インスタンス ID 指定)
aws rds reboot-db-instance \
  --db-instance-identifier my-database \
  --force-failover

スナップショットを作成する(インスタンス ID 指定)
aws rds create-db-snapshot \
  --db-instance-identifier my-database \
  --db-snapshot-identifier my-snapshot-20241205
スナップショットを表示する(インスタンス ID 指定)
aws rds describe-db-snapshots \
  --db-instance-identifier my-database
スナップショットを削除する(スナップショット ID 指定)
aws rds delete-db-snapshot \
  --db-snapshot-identifier my-snapshot-20241205
スナップショットから復元する(DBインスタンスID 指定、スナップショット ID指定)
aws rds restore-db-instance-from-db-snapshot \
  --db-instance-identifier my-restored-database \
  --db-snapshot-identifier my-snapshot-20241205

CloudFormationのサンプルコード

Terraformのサンプルコード

料金計算

課金項目説明
インスタンス時間データベースインスタンスの稼働時間
ストレージ容量プロビジョニングドストレージ(gp3、io1など)
IOPSプロビジョニングドIOPS
バックアップストレージ自動バックアップとスナップショットの容量
データ転送インターネットへのデータ転送量
Multi-AZMulti-AZ配置の追加料金
料金計算ツール

公式ページ

AWSドキュメント RDS