RDSでリードレプリカを作ろうとすると、ソースDBの自動バックアップが前提条件になります。ここで確認したいのは、バックアップが過去に存在するかではなく、ソースDBで自動バックアップが有効になっているかです。
この記事では、RDS for PostgreSQLのDBインスタンスを中心に、保持期間、事前スナップショット、AWS Backupとの関係を整理します。AuroraレプリカやMulti-AZ DBクラスターの構成条件は、別途確認してください。
作成前に確認する4つのポイント
| 疑問 | 確認する条件 |
|---|---|
| 保持期間は何日必要? | ソースDBの自動バックアップを1~35日で有効にする |
| 事前のスナップショットは必須? | 自動バックアップ有効化が前提。レプリカ作成処理でスナップショットが取得される |
| 作成後に自動バックアップを無効化できる? | リードレプリカを持つソースDBでは無効化できない |
| AWS Backupで1回取ればよい? | 単発のスナップショットと継続的バックアップを区別する |
1. 自動バックアップの保持期間を0以外にする
通常のDBインスタンスでは、バックアップ保持期間を0にすると自動バックアップが無効になります。リードレプリカ作成のソースとして使用する場合は、保持期間を1~35日の範囲で設定します。複数日にしたからレプリカを作成でき、1日では作成できない、という条件ではありません。
ただし、最低条件を満たすことと、業務に必要な復旧期間を確保することは別です。保持期間は「レプリカを作るために1日」とだけ決めず、復旧要件やバックアップ運用に合わせて設定します。仕様はバックアップ保持期間の公式資料で確認できます。
保持期間を0から0以外へ変更する際には停止が発生します。稼働中DBの設定を変更する場合は、作業時間を計画し、実際に変更が適用されたことを確認してから次へ進みます。
2. 「日次バックアップを1回待つ」とは限らない
リードレプリカの作成時には、RDSがソースDBのスナップショットを取得し、そのデータを基にレプリケーションを開始します。そのため、RDS側で自動バックアップが有効になっていれば、作成前に手動スナップショットを取得したり、日次スナップショットが1回実行されるのを待ったりすること自体が必須条件にはなりません。
一方、自動バックアップを有効化する変更が未適用の状態を、有効化済みと扱わないようにします。「変更を依頼した」「画面で値を入力した」と「ソースDBに反映された」を区別してください。
また、レプリカ作成処理がソースへ一切影響しないわけではありません。スナップショット開始時のI/Oの一時停止など、構成に応じた影響があります。長時間トランザクションが作成時間を延ばす場合もあるため、リードレプリカ作成の公式手順にある注意点も確認します。
3. レプリカを作った後も、ソースの自動バックアップを維持する
自動バックアップは、作成前に一時的に有効にすれば終わり、という設定ではありません。リードレプリカを持つソースDBでは、自動バックアップを無効化できません。
読み取り負荷を分散するレプリカと、過去の時点へ戻すバックアップでは役割も異なります。レプリカがあることだけを理由に、復旧ポイントの保持を不要と判断しないようにします。
4. AWS Backupは、スナップショットと継続的バックアップで考え方が違う
AWS Backupを使っている場合は、「AWS Backupで保護済み」という説明だけでは、リードレプリカ作成の条件を判断できません。
| 方式 | レプリカ作成条件との関係 |
|---|---|
| 単発・定期的なスナップショットバックアップ | 取得済みスナップショットがあるだけでは、ソースDBの自動バックアップ有効化の代わりにならない |
| RDSの継続的バックアップ(PITR) | RDSの自動バックアップを利用する。実際に有効化された状態を確認する |
スナップショット方式の扱いはRDSとAWS Backupの公式資料、継続的バックアップの仕組みは継続的バックアップとPITRに記載されています。
継続的バックアップのプランを作った直後は要確認
AWS Backupで継続的バックアップのプランを作成し、対象DBを割り当てただけでは、RDS側の自動バックアップ有効化まで完了しているとは限りません。初回バックアップジョブの実行によって設定が反映されるため、初回ジョブの実行状況とRDS側の実際の設定を確認します。
初回ジョブの開始だけを見て、無条件に作成可能と判断することも避けます。エラーや適用待ちがないかを確認し、最終的にはソースDBで自動バックアップが有効になったことを基準にします。継続的バックアップが成立せずスナップショットへフォールバックする場合もあるため、ジョブがあることだけでは方式を判定できません。
実際の設定はRDS側でも確認する
ソースDBの BackupRetentionPeriod を確認する読み取り専用コマンドの例です。プロファイル、リージョン、DB識別子は利用環境に置き換えます。
aws rds describe-db-instances --profile example --region ap-northeast-1 --db-instance-identifier source-db --query "DBInstances[0].{Status:DBInstanceStatus,RetentionDays:BackupRetentionPeriod,Pending:PendingModifiedValues}" --output json
保持期間だけでなく、DBの状態と適用待ちの変更も確認します。この条件を満たしても、エンジンの対応バージョン、暗号化、ネットワーク、各種制限などの作成条件は別途あります。バックアップ条件だけで作成成功を保証するものではありません。
