Terraform - 如果快照存在,则从快照创建 aws_db_instance 资源,否则如果不存在快照,则创建一个新的数据库。

Terraform - 如果快照存在,则从快照创建 aws_db_instance 资源,否则如果不存在快照,则创建一个新的数据库。

我正在尝试使用 final_snapshot_identifier 定义的快照创建 aws_db_instance 资源,前提是 terraform 脚本已经运行,并且资源之前存在但已被销毁,导致创建了快照。如果快照不存在(例如,如果这是我第一次在新环境中运行 terraform 脚本),它应该只创建一个新的数据库。

我该怎么做?当我尝试为快照定义新的数据源时,它会抱怨快照不存在并停止。确实快照不存在,但我希望由于缺少快照而导致创建新的数据库。

答案1

这实际上并不是本机支持的,但你可以使用外部数据源,就像这样Github 问题评论关于这个话题:

设置最终快照名称

variable "final_snap" {
  default = "final_snap_name"
}

使用外部数据源和 aws cli 查明快照是否存在

data "external" "snapshot_exists" {
  program = ["bash", "-c", "if [ ! -z \"$(aws rds describe-db-snapshots --db-snapshot-identifier ${var.final_snap} | jq .DBSnapshots)\" ]; then echo '{\"SnapshotExists\": \"true\"}' | jq '.'; else echo '{\"SnapshotExists\": \"false\"}' | jq '.'; fi"]
}

现在使用有条件的决定是否创建数据库

resource "aws_db_instance" "foo" {
  count    = "${data.external.snapshot_exists.result.SnapshotExists == "false" ? 0 : 1}"
  ...
}

如果先前的外部数据源已返回,false则将 count 设置为0,因此不创建任何内容。如果没有,则将其设置为 ,1以便创建数据库。

相关内容