You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:第一次修改配置触发销毁重建

  1. 将username改为foo-tmp
  2. 执行terraform apply -auto-approve

输出依旧为:

snap_id = "test-rds-inst-snap-5553"

实际观察到的现象:

  • RDS实例处于删除状态
  • 快照test-rds-inst-snap-5553正在创建
  • RDS实例重建完成后正常可用
  • 快照test-rds-inst-snap-5553创建完成可用

场景2:第二次修改配置触发销毁重建

  1. 将username改为foo-new
  2. 执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:24:24