首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rds实例上触发random_id资源重新创建,销毁并重新创建

在rds实例上触发random_id资源重新创建,销毁并重新创建
EN

Stack Overflow用户
提问于 2022-07-15 20:24:41
回答 1查看 209关注 0票数 0

各位,我试图找到一种利用terraform random_id资源来重新创建和提供一个新的随机值的方法,当rds实例由于所做的更改而破坏和重新创建时,例如rds上的用户名已经更改。

这个随机值是试图附加到final_snapshot_identifier的aws_db_instance资源,以便快照应该有一个唯一的值到它的id,每次它被创建在rds实例被销毁。

当前代码:

代码语言:javascript
复制
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
}

地形后的输出:

代码语言:javascript
复制
snap_id = "test-rds-inst-snap-5553"

用例正在试用:

#1:修改rds实例中的值以模拟破坏&重新创建:

将用户名修改为"foo-tmp"

  • terraform应用-自动批准

输出:

代码语言:javascript
复制
snap_id = "test-rds-inst-snap-5553"

我原以为random_id会启动并输出一个唯一的id,但它没有。

观察:

删除state

  • snapshot“test-rds-inst-sn-5553”中重新创建的

  • rds实例中的
  • rds实例,以及可用状态

中的

  • rds实例中的“test-rds-inst-sn-5553”。

#2:在rds实例中再次修改值以模拟破坏&重新创建:

"foo-new"

  • terraform应用-auto-approve

修改用户名

有点在错误之下,因为以前的尝试没有得到一个新的值,但是无论如何都很累.

观察:

代码语言:javascript
复制
**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实例的任何属性,可能会导致循环依赖问题。我可能错了,但还没试过。

任何建议都会有帮助。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-07-15 21:38:25

最简单的方法是在random_id资源上使用random_id,如文档1所示

如果

强制替换随机结果,则可以使用taint命令在下一次运行时生成新结果。

或者,查看文档中的示例,您可以执行如下操作:

代码语言:javascript
复制
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时,如下所示:

代码语言:javascript
复制
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}"
}

1

2

3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72999269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档