Terraform:资源中的可选字段

Terraform: Optional fields in Resource

在 terraform 中,我正在尝试创建一些防火墙规则,这些规则通常不启用日志记录 - 为此,我必须 而不是 log_config字段创建。但是,我有一个变量 firewall_logging,如果为真,应该添加此字段和我希望它包含的选项。

我不认为在这里使用动态是正确的做法,但它有可能是正确的,而且我误解了如何生成它,而是想出了以下方法:

resource "google_compute_firewall" "this" {
  name          = var.name
  project       = var.project
  network       = var.network
  source_ranges = var.source_ranges
  source_tags   = var.source_tags
  target_tags   = var.target_tags
  priority      = var.priority
  direction     = var.direction

  allow {
    protocol = lower(var.protocol)
    ports    = var.ports
  }

  ##  If log_config is defined, this enables logging. By not defining it, we are disabling logging.
  var.firewall_logging == true ? log_config { metadata = var.log_metadata } : null

我希望变量会被评估,如果为真,log_config 部分将添加到资源中,但我得到一个错误,指出需要参数或块定义。

它应该可以使用 dynamic blocks。例如:

dynamic "log_config" {
  for_each = var.firewall_logging == true ? [true] : []
  content {
    metadata = var.log_metadata
  }
}