Terraform 变量组合

Terraform Variable Composition

我在 API 网关资源中有一个定义查询参数的变量。每个资源都有一组基本的默认查询参数。某些资源具有基本集和附加参数。

# base set of query parameters that apply to all resources
variable "parameters_default" {
  default = {
    "method.request.querystring.brokerage"      = false
    "method.request.querystring.account_alias"  = false
    "method.request.querystring.start_date"     = false
    "method.request.querystring.end_date"       = false
    "method.request.querystring.valuation_date" = false
  }
}

# additional query parameter that applies to only one resource
variable "parameters_special_resource" {
  default = {
    "method.request.querystring.brokerage"      = false
    "method.request.querystring.account_alias"  = false
    "method.request.querystring.start_date"     = false
    "method.request.querystring.end_date"       = false
    "method.request.querystring.valuation_date" = false
    "method.request.querystring.top"            = false
  }
}

我不想重新定义所有基线查询参数,而是想使用基线来组成第二个查询参数。像这样

# compose the parameters_special_resource variable using parameters_special_resource
variable "parameters_special_resource" {
  # baseline parameters_special_resource
  default = {
    "method.request.querystring.top"            = false
  }
}

这是怎么做到的?

无法创建动态变量。相反,您应该使用 localsmerge:

# base set of query parameters that apply to all resources
variable "parameters_default" {
  default = {
    "method.request.querystring.brokerage"      = false
    "method.request.querystring.account_alias"  = false
    "method.request.querystring.start_date"     = false
    "method.request.querystring.end_date"       = false
    "method.request.querystring.valuation_date" = false
  }
}

# additional query parameter that applies to only one resource
variable "parameters_special_resource" {
  default = {
    "method.request.querystring.top"            = false
  }
}

locals {
  # marge base and special paramters
  parameters_special_resource = merge(var.parameters_default, var.parameters_special_resource)
}

然后在代码中使用 local.parameters_special_resource