Terraform:基于 .tfvars 中的变量有条件地创建资源

Terraform: Conditional creation of a resource based on a variable in .tfvars

我在 .tf 文件中定义了对多个应用程序通用的资源。我通过 .tfvars 文件填充了许多字段。我需要省略一些完全基于 .tfvars 中的变量的资源。

例如,如果我有这样的资源:

resource "cloudflare_record" "record" {
  zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
  name    = "${var.subdomain}"
  value   = "${var.origin_server}"
  type    = "CNAME"
  ttl     = 1
  proxied = true
}

但后来我在我的 .tfvars 文件中声明了类似 cloudflare = false 的东西 我希望能够做这样的事情:

if var.cloudflare {
  resource "cloudflare_record" "record" {
    zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
    name    = "${var.subdomain}"
    value   = "${var.origin_server}"
    type    = "CNAME"
    ttl     = 1
    proxied = true
 }
}

我查看了动态块,但看起来您只能使用它们来编辑资源中的字段和块。我需要能够忽略整个资源。

使用在 .tfvars 中声明的变量添加具有三元条件的 count 参数,如下所示:

resource "cloudflare_record" "record" {
  count = var.cloudflare ? 1 : 0
  zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
  name    = "${var.subdomain}"
  value   = "${var.origin_server}"
  type    = "CNAME"
  ttl     = 1
  proxied = true
}

在此示例中,var.cloudflare 是在 .tfvars 文件中声明的布尔值。如果为真,将创建 1 record 个计数。如果为假,将创建计数 0 record

count申请资源后成为一个组,所以稍后在引用中使用0-index组:

cloudflare_record.record[0].some_field

我看到的一个问题是,如果您尝试创建的资源已经在使用 for_each,那么您不能在该资源中同时使用 count 和 for_each。如果我找到更好的东西,我仍在努力寻找这个问题的答案。