各位,我试图找到一种利用terraform random_id资源来重新创建和提供一个新的随机值的方法,当rds实例由于所做的更改而破坏和重新创建时,例如rds上的用户名已经更改。
这个随机值是试图附加到final_snapshot_identifier的aws_db_instance资源,以便快照应该有一个唯一的值到它的id,每次它被创建在rds实例被销毁。
当前代码:
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
}地形后的输出:
snap_id = "test-rds-inst-snap-5553"用例正在试用:
#1:修改rds实例中的值以模拟破坏&重新创建:
将用户名修改为"foo-tmp"
输出:
snap_id = "test-rds-inst-snap-5553"我原以为random_id会启动并输出一个唯一的id,但它没有。
观察:
删除state
中的
#2:在rds实例中再次修改值以模拟破坏&重新创建:
"foo-new"
修改用户名
有点在错误之下,因为以前的尝试没有得到一个新的值,但是无论如何都很累.
观察:
**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资源的random_id映射,但不确定我需要从rds_instance中添加什么,以便重新创建random_id资源,并最终为snap_id后缀提供一个新的唯一值。
此外,我觉得在random_id管理员中使用rds实例的任何属性,可能会导致循环依赖问题。我可能错了,但还没试过。
任何建议都会有帮助。谢谢。
发布于 2022-07-15 21:38:25
最简单的方法是在random_id资源上使用random_id,如文档1所示
如果
强制替换随机结果,则可以使用
taint命令在下一次运行时生成新结果。
或者,查看文档中的示例,您可以执行如下操作:
resource "random_id" "snap_id" {
byte_length = 8
keepers {
snapshot_id = var.snapshot_id
}
}
resource "aws_db_instance" "rds" {
.....
identifier = local.inst_id
final_snapshot_identifier = random_id.snap_id.keepers.snapshot_id
skip_final_snapshot = false
username = "foo"
apply_immediately = true
.....
}这意味着在变量snapshot_id的值发生变化之前,random_id将生成相同的结果。不确定这是否适用于locals,但您可以尝试用local.inst_snap_id替换var.snapshot_id。如果这样做有效,那么您可以使用内置函数(如formatdate 2和timestamp 3)来命名快照,以创建一个快照id,该id将绑定到运行apply时,如下所示:
locals {
inst_id = "test-rds-inst"
snap_time = formatdate("YYYYMMDD", timestamp())
inst_snap_id = "${local.inst_id}-snap-${format("%.4s", random_id.snap_id.dec)}-${local.snap_time}"
}https://stackoverflow.com/questions/72999269
复制相似问题