如何使用Terraform关闭AWS RDS删除保护以删除对应数据库实例
问题原因
你之前两次报错的核心原因是:修改deletion_protection = false的操作和销毁实例的操作被Terraform放在同一个执行计划中,Terraform会优先执行销毁动作,此时实例的删除保护还未被修改,因此触发了权限拦截。
解决步骤
- 第一步:恢复RDS资源配置:如果你之前修改
deletion_protection参数的同时,已经把RDS实例的Terraform资源块从配置中删除了,先把资源块加回来,保持和创建时的配置完全一致,仅修改deletion_protection = false,暂不删除资源块,也不要修改其他参数。 - 第二步:执行
terraform plan,确认输出中仅包含更新RDS实例deletion_protection参数的变更,没有任何销毁RDS实例的操作,避免同时触发参数更新和实例删除。 - 第三步:执行
terraform apply,等待参数更新完成,此时AWS RDS实例的删除保护已经被正式关闭。 - 第四步:执行删除操作:
- 如果你需要删除整个Terraform管理的资源栈,直接执行
terraform destroy即可 - 如果你只需要删除这一个RDS实例,可以将RDS资源块从配置中删除后执行
terraform apply,也可以直接执行定向销毁命令:terraform destroy --target aws_db_instance.<你的RDS资源名>
- 如果你需要删除整个Terraform管理的资源栈,直接执行
备选方案
如果上述操作依然报错,可以先通过AWS CLI手动关闭实例删除保护,再同步Terraform状态后删除:
- 执行CLI命令关闭删除保护:
aws rds modify-db-instance --db-instance-identifier awsworkerdb-green --no-deletion-protection --apply-immediately
- 执行
terraform refresh,将远端资源的最新状态同步到本地Terraform状态文件 - 再执行对应的销毁操作即可
注意:如果你的RDS配置中没有设置
skip_final_snapshot = true,删除前需要补充该参数,或者提前配置好final_snapshot_identifier,否则删除时还会因为需要创建最终快照触发报错。
内容的提问来源于stack exchange,提问作者Uddip
相关产品推荐
相关产品推荐

