
【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 が操作するサービス | 用途 |
|---|---|
| EC2 | DBインスタンス用のネットワークインターフェース管理 |
| CloudWatch Logs | データベースログの出力(エラーログ、スロークエリログなど) |
| CloudWatch | 拡張モニタリングメトリクスの送信 |
| S3 | 自動バックアップとスナップショットの保存 |
| KMS | データベース暗号化の管理 |
| Secrets Manager | マスターパスワードのローテーション |
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| CloudWatch Logs | データベースログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| NetworkReceiveThroughput | 受信ネットワークスループット |
| NetworkTransmitThroughput | 送信ネットワークスループット |
| ReadIOPS | 読み取りIOPS |
| ReadLatency | 読み取りレイテンシ |
| ReadThroughput | 読み取りスループット |
| ReplicaLag | レプリカ遅延 |
| WriteIOPS | 書き込みIOPS |
| WriteLatency | 書き込みレイテンシ |
| WriteThroughput | 書き込みスループット |
| BinLogDiskUsage | バイナリログディスク使用量 |
| CPUUtilization | CPU使用率 |
| DatabaseConnections | データベース接続数 |
| FreeStorageSpace | 空きストレージ容量 |
| FreeableMemory | 空きメモリ容量 |
| SwapUsage | スワップ使用量 |
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| データベース接続数 | インスタンスタイプとエンジンに依存 |
| ハードリミット | 制限値 |
|---|---|
| ストレージサイズ | 最大64 TiB |
| タグ数/リソース | 50 |
| ソフトリミット | 制限値 |
|---|---|
| DBインスタンス数/リージョン | 40 (合計:RDS+Aurora+Neptune+DocumentDB) |
| リードレプリカ数/ソースDB | 5(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-AZ | Multi-AZ配置の追加料金 |