如何在RDS实例重建时触发Terraform random_id资源重新生成?
问题:Terraform RDS销毁重建时无法生成唯一快照ID
我需要通过Terraform的random_id资源,在RDS实例因配置变更(如修改username)触发销毁重建时,生成新的随机值,将其附加到aws_db_instance资源的final_snapshot_identifier,确保每次RDS销毁时生成的快照ID唯一。
当前代码
resource "random_id" "snap_id" { byte_length = 8 } locals { inst_id = "test-rds-inst" inst_snap_id = "${local.inst_id}-snap-${format("%.4s", random_id.snap_id.dec)}" } resource "aws_db_instance" "rds" { ..... identifier = local.inst_id final_snapshot_identifier = local.inst_snap_id skip_final_snapshot = false username = "foo" apply_immediately = true ..... } output "snap_id" { value = aws_db_instance.rds.final_snapshot_identifier }
首次执行结果
执行terraform apply后输出:
snap_id = "test-rds-inst-snap-5553"
测试场景
场景1:第一次修改配置触发销毁重建
- 将
username改为foo-tmp - 执行
terraform apply -auto-approve
输出依旧为:
snap_id = "test-rds-inst-snap-5553"
实际观察到的现象:
- RDS实例处于删除状态
- 快照
test-rds-inst-snap-5553正在创建 - RDS实例重建完成后正常可用
- 快照
test-rds-inst-snap-5553创建完成可用
场景2:第二次修改配置触发销毁重建
- 将
username改为foo-new - 执行
terraform apply -auto-approve
触发错误:
**Error:** error deleting DB Instance (test-rds-inst): DBSnapshotAlreadyExists: Cannot create the snapshot because a snapshot with the identifier test-rds-inst-snap-5553 already exists.
疑问与需求
我了解random_id的keepers{}参数可以触发重新生成值,但不确定应该将RDS实例的哪个属性放入该映射,才能在RDS需要销毁重建时触发random_id生成新值作为快照ID后缀。同时担心使用RDS的属性会导致循环依赖问题,希望得到相关解决方案建议。
内容的提问来源于stack exchange,提问作者codecorrect
相关产品推荐
相关产品推荐

