Amazon RDSクロスリージョン自動バックアップの保持期間を変更する
背景
Amazon RDS for PostgreSQL では、別リージョンに自動バックアップをレプリケートできる機能があります。
作成時に指定した保持期間を変更する場合、レプリケーションを一度停止し、再作成する必要があります。
注意が必要なのは、既存の自動バックアップの扱いです。
コンソールからは「削除」アクションしか存在せず、この操作をすると、レプリケーション設定だけでなく、既存の自動バックアップも削除されてしまいます。設定再作成後も、自動レプリケーションのバックフィルは行われず、設定再開以降の自動バックアップのみがレプリケートされます
既存のバックアップを保持したい場合、AWS CLI等を使用して、ピンポイントにレプリケーション設定だけを停止する必要があります。
新たにレプリケーションを再開すると、既存のスナップショットは引き継がれ、設定変更により保持期間を短くするなどして保持期間が過ぎたものは、順次削除されます。
この挙動について共有します。
前提
東京リージョンで構築したRDS for PostgreSQLの自動バックアップを大阪リージョンへクロスリージョンにレプリケートしているとします。

自動バックアップは、Automated backupsのメニューにおいて、以下のタブで表示されます。
- ソース の東京では Current Region タブ
- ターゲット の大阪では Replicated タブ
バックアップは以下のような状態です

ここで、ターゲットの保持期間を変更したいとします。
コンソール操作とCLI操作の比較
| 比較項目 | コンソール操作 | AWS CLI操作 |
|---|---|---|
| 実行アクション | レプリケーション先のActionsメニューから「削除」を実行 | 大阪リージョンに対し stop-db-instance-automated-backups-replication を実行 |
| レプリケーション設定 | 削除される | 削除される |
| 既存の自動バックアップ | 削除される | 保持される (「Replicated」タブから「Retained」タブへ移動) |
| 実行するAPI | 1. rds:stop-db-instance-automated-backups-replication 2. rds:delete-db-instance-automated-backup |
rds:stop-db-instance-automated-backups-replication のみ |
| リスク・安全性 | DR先のバックアップが一時的に消滅するため、リストアできない期間が発生するリスクがある。 | バックアップを残したまま設定解除できるため、安全に保持期間の変更などが可能。 |
| 再設定後の挙動 | 新規にレプリケート設定され、保持期間分のバックアップが過去に遡ってレプリケートされる。 | 「Retained」にあったバックアップが「Replicated」タブに戻る。 保持期間を短縮した場合、超過分は削除される。 |
コンソールの削除操作ではレプリケート設定とバックアップの両方が削除される
バックアップのレプリケート先の大阪リージョンのActionsメニューには、保持期間を変更する「編集」が存在しません。
代わりに「削除」操作が存在します。

この「削除」を実行するとどうなるでしょうか?
東京リージョンから大阪リージョンへのレプリケート設定が削除され、さらに、レプリケート先に存在する自動バックアップも削除されてしまいます。

CloudTrail を確認すると、次の2つのAPIが呼ばれていることがわかります。
- レプリケートの削除:
rds:stop-db-instance-automated-backups-replication - レプリケートされたバックアップの削除:
rds:delete-db-instance-automated-backup
新しい保持期間でレプリケーション設定を行うと、その時点での最新のフルバックアップがコピーされ、以降のメンテナンスウィンドウのタイミングで順次自動バックアップが転送されます。ただし、過去を遡って保持期間分が同期される バックフィル機能 はないため、転送先リージョンでの RPO(目標復旧時点) に大きなインパクトがあります。

クロスリージョンでバックアップを取っているようなシステムで、一時的とはいえRPOが毀損されるリスクを回避するのが、次に紹介するAWS CLI方式です。
AWS CLIでレプリケート設定のみを停止してバックアップを残す
先の考察を踏まえ、レプリケーション設定を削除するAPIだけを呼び出します。
aws rds stop-db-instance-automated-backups-replication \
--source-db-instance-arn arn:aws:rds:ap-northeast-1:012345678901:db:x-region-rds \
--region ap-northeast-3
このAPIには2つのリージョンが混在しています。
ソースには、レプリケーション元 のRDSインスタンスのARNを指定します。
また、APIそのものは レプリケート先 のリージョンを指定します。
自動スナップショットのタブ移動
レプリケーション設定の停止に伴い、既存の自動バックアップは 「Replicated」 タブから 「Retained」 タブに移動します。


Retained になると、名前の通り保持期間の世代管理をしなくなります。そのため、コンソールの 「Replicated automated backup retention period」 は「-」と表示されます。
次のAPIからも Status が "retained" となり、レスポンスに BackupRetentionPeriod が含まれなくなります。
aws rds describe-db-instance-automated-backups \
--region ap-northeast-3 \
--db-instance-identifier x-region
{
"DBInstanceAutomatedBackups": [
{
"DBInstanceArn": "arn:aws:rds:ap-northeast-1:012345678901:db:x-region",
...
"Status": "retained",
...
"DBInstanceAutomatedBackupsArn": "arn:aws:rds:ap-northeast-3:012345678901:auto-backup:ab-zzz",
"BackupTarget": "region",
"TagList": []
}
]
}
新たにレプリケーション設定を作成する
次に、RDSインスタンスにレプリケーション設定を新しい保持期間で再開します。
コンソールからは、ソースとなるリージョンで操作しますが、先の stop-db-instance-automated-backups-replication API 実行時と同様に、レプリケート先のリージョンに対してAPI実行します。
aws rds start-db-instance-automated-backups-replication \
--source-db-instance-arn "arn:aws:rds:ap-northeast-1:012345678901:db:x-region-rds" \
--kms-key-id "arn:aws:kms:ap-northeast-3:012345678901:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
--backup-retention-period 3 \
--region ap-northeast-3
レプリケーションの再開に伴い、「Retained」タブにあった自動バックアップは、「Replicated」タブに戻ります。つまり、 バックフィル のような挙動をします。

また、保持期間が以前よりも短くなった場合、保持期間を過ぎたバックアップは、次回のメンテナンス等のタイミングで順次削除されます。
別リージョンのバックアップを喪失することなく、安全にバックアップの保持期間を変更できました。
自動バックアップの3つのタブの違い
Automated backups ページには3つのタブがあります。
| タブ | 内容 |
|---|---|
| Current Region | インスタンスと同じリージョンで取得されている自動バックアップ |
| Replicated | 別リージョンからレプリケーション中のバックアップ |
| Retained | レプリケーション停止後、削除されずに保持されているバックアップ |
まとめ
- 自動バックアップのレプリケーションの保持期間は作成時しか指定できず、変更できない
- 設定時に保持期間分のバックフィルは行われず、作成のタイミングと以降のメンテナンスのタイミングでレプリケーションされる
- コンソールから停止操作すると、レプリケーション設定だけでなく、既存のバックアップも削除される
- 安全を期すならば、AWS CLIでレプリケーション設定のみを停止し、既存バックアップを保持した上で、レプリケーションを再設定する
- 自動バックアップのレプリケーションの開始・終了はレプリケート先リージョンに対してAPI実行する







