在 terraform 资源块中使参数可选

Making an argument optional in terraform resource block

我们能否使资源块中存在的参数用法可选 例如,在下面的资源块 table_name 中, mapping_rule_name 和 data_format 是可选参数,我希望有一个标准的 terraform 格式,我可以使这些值可选,例如 if var.table_name 变量有值,它应该提供给 table_name 否则 table_name 应该被忽略,即在没有 table_name,[=19= 的情况下形成 eventhubconnection ] 和 data_format 因为这些是可选值

resource "azurerm_kusto_eventhub_data_connection" "eventhub_connection" {
  name                = "my-kusto-eventhub-data-connection"
  resource_group_name = azurerm_resource_group.rg.name
  location            = azurerm_resource_group.rg.location
  cluster_name        = azurerm_kusto_cluster.cluster.name
  database_name       = azurerm_kusto_database.database.name

  eventhub_id    = azurerm_eventhub.eventhub.id
  consumer_group = azurerm_eventhub_consumer_group.consumer_group.name

  table_name        = var.table_name       #(Optional)
  mapping_rule_name = var.mapping_rule_name #(Optional)
  data_format       = var.data_format          #(Optional)
} 

有什么方法可以在 terraform 中做到这一点?

您可以使用 Conditionally Omitted Arguments,它允许具有值 null 的变量被 Terraform 解释为“未设置”。我喜欢使用以下模式来制作更多利用此功能的“toggle-able”属性:

定义变量

# variables.tf
variable "table_name" {
  type    = string
  # ...
  default = null
}
variable "mapping_rule_name" {
  type    = string
  # ...
  default = null
}

正在初始化变量

# myterraform.tfvars
table_name = "my-table-name"

使用有条件的省略参数

# eventhub.tf
resource "azurerm_kusto_eventhub_data_connection" "eventhub_connection" {
  # ...
  table_name        = var.table_name        # instantiated to value in .tfvars
  mapping_rule_name = var.mapping_rule_name # is "unset" by default null value
} 

如果您想这样做,但使用嵌套的属性块而不仅仅是属性,您可以查看 Dynamic Nested Blocks 并应用条件逻辑来确定是否会生成所述块。