Terraform 如何从任意数量的输入参数创建RDS参数组?

Terraform 如何从任意数量的输入参数创建RDS参数组?,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我有四种不同的环境: 发展 坐着 uat 刺激 每个环境的参数组值都不同。每个环境的变量文件中将包含以下值 以下是示例AWS RDS参数组的参数。在其他环境中,可能有更多或更少的参数: parameter { name = "character_set_client" value = "utf8mb4" } parameter { name = "character_set_connection" value = "utf8mb4" } parameter { nam

我有四种不同的环境:

  • 发展
  • 坐着
  • uat
  • 刺激
每个环境的参数组值都不同。每个环境的变量文件中将包含以下值

以下是示例AWS RDS参数组的参数。在其他环境中,可能有更多或更少的参数:

parameter {
  name = "character_set_client"
  value = "utf8mb4"
}

parameter {
  name = "character_set_connection"
  value = "utf8mb4"
}

parameter {
  name = "character_set_server"
  value = "utf8mb4"
}

parameter {
  name = "log_bin_trust_function_creators"
  value = "1"
}
我很好奇如何在变量中表示这一点,以及如何编写资源来使用这些变量创建具有任意数量参数的RDS参数组


如何从任意数量的输入参数创建RDS参数组?

您可以使用动态块:

dynamic "parameter" {
    for_each = var.parameters
    content {
      name         = parameter.value.name
      value        = parameter.value.value
    }
  }
变量可以是映射列表:

variable "parameters" {
  type        = list(map(string))
  default     = []
}
terraform.tfvars

parameters = [ 
  {
  name = "character_set_connection"
  value = "utf8mb4"
  },
  {
  name = "character_set_server"
  value = "utf8mb4"
  },
  {
  name = "log_bin_trust_function_creators"
  value = "1"
  }
]

可以使用动态块:

dynamic "parameter" {
    for_each = var.parameters
    content {
      name         = parameter.value.name
      value        = parameter.value.value
    }
  }
变量可以是映射列表:

variable "parameters" {
  type        = list(map(string))
  default     = []
}
terraform.tfvars

parameters = [ 
  {
  name = "character_set_connection"
  value = "utf8mb4"
  },
  {
  name = "character_set_server"
  value = "utf8mb4"
  },
  {
  name = "log_bin_trust_function_creators"
  value = "1"
  }
]

对于terraform 0.12?在计划之后,我将其作为参数{+apply_method=“immediate”+name=“character\u set_server”+value=“utf8mb4”}获取。apply_方法是可选的,带有“immediate”(默认)或“挂起的重新启动”。如果愿意,您可以将其添加到参数中,并使用以下语法查看它是否可用,如果不可用,则将其设置为null:
apply\u method=lookup(parameters.apply\u method,“apply\u method”,null)
对于terraform 0.12?在计划之后,我将其作为参数{+apply\u method=“immediate”+name=“character_set_server”+value=“utf8mb4”}apply_方法是可选的,带有“immediate”(默认)或“pending reboot”。如果愿意,可以将其添加到参数中,并使用以下语法查看其是否可用,如果不可用,则将其设置为null:
apply_method=lookup(parameters.apply_method,“apply_method”,null)