説明
RDS DB インスタンスの backup_retention_period = 0 は自動バックアップを無効にします。AWS プロバイダー v6.14.0 の aws_db_instance も、既定値は 0 です。自動バックアップは、障害、操作ミス、データ破損後に特定時点へ復旧するための重要な保護手段です。
手動スナップショットは別途管理できますが、自動バックアップと同じ復旧時点を提供するものではありません。本番データベースでは必要な自動バックアップ期間を明示してください。
想定される影響
- 復旧できないリスク: 障害や削除の後、必要な時点に復元できない可能性があります。
- データ損失の拡大: 他の復旧手段がない場合、最近の変更を含む運用データが失われる可能性があります。
- 運用基準の不統一: インスタンスごとにバックアップ方針が異なると、管理が難しくなります。
対処方法
- 復旧要件に合わせて
backup_retention_periodを 1~35 日に設定してください。 - 0 と 0 以外の値の間で変更すると停止が発生するため、変更の適用時期を計画してください。
- 自動バックアップに加え、必要なスナップショット保持と復元テストを運用手順に含めてください。
例
バックアップ設定の比較用抜粋です。MySQL 5.7 と db.t2.micro は以前の例の値を残しているため、実際のリージョンと環境で対応しているか確認してください。ネットワークを別途設定し、var.db_password から有効なパスワードを安全に渡してください。パスワードを保存する可能性のある Terraform の状態も保護する必要があります。
変更前
hcl
resource "aws_db_instance" "example" {
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t2.micro"
db_name = "mydb"
username = "foo"
password = var.db_password
backup_retention_period = 0
}
変更後
hcl
resource "aws_db_instance" "example" {
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t2.micro"
db_name = "mydb"
username = "foo"
password = var.db_password
backup_retention_period = 12
}
変更前は自動バックアップが無効です。変更後は保持期間を 12 日に設定します。この期間は例示であり、実際のバックアップ完了と復元可否を確認する必要があります。