というわけで、これちょいちょいやってしまうんですが、Terraformでskip_final_snapshot = true
を設定しないでRDSリソースを作成して、その後削除しようとすると以下のエラーが出るようになってしまったんですよ
Error: RDS Cluster FinalSnapshotIdentifier is required when a final snapshot is required
というわけで対応手順をメモして行こうと思います
再現方法
以下のような感じでRDSのリソースを作成する
resource "aws_rds_cluster" "db" { cluster_identifier = "${var.name}-${var.env}-db" engine = local.engine engine_version = local.engine_version engine_mode = local.engine_mode availability_zones = values(var.azs) master_username = aws_ssm_parameter.db_username.value master_password = aws_ssm_parameter.db_password.value backup_retention_period = var.backup_retention_period preferred_backup_window = local.preferred_backup_window tags = merge(var.common_tags, { Name = "${var.name}-${var.env}-db" Role = "RDS" }) }
で、apply
はうまくいくのでその後、destroy
を実行すると・・・
Error: RDS Cluster FinalSnapshotIdentifier is required when a final snapshot is required
というエラーが出てしまい、Terraformでのこのリソースの削除ができなくなってしまいました
修正方法
stackoverflowの回答を参考に以下を実施したところ解決した
backup_retention_period
の値を0
にするpreferred_backup_window
のパラメータを削除するskip_final_snapshot = true
とapply_immediately = true
を追加する
以下が修正後のコード
resource "aws_rds_cluster" "db" { cluster_identifier = "${var.name}-${var.env}-db" engine = local.engine engine_version = local.engine_version engine_mode = local.engine_mode availability_zones = values(var.azs) master_username = aws_ssm_parameter.db_username.value master_password = aws_ssm_parameter.db_password.value backup_retention_period = 0 skip_final_snapshot = true apply_immediately = true tags = merge(var.common_tags, { Name = "${var.name}-${var.env}-db" Role = "RDS" }) }
そしてapply
を実施後、destroy
で正常にリソースが削除されるようになりました〜!