我正在尝试使用 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
以便创建数据库。