在Terraform中,我们如何定义对象列表?
变量.tf
variable "aws_cluster_arn" {
type = string
}
variable "aws_ecs_placement_strategy" {
type = list(object)
}
配置中。tfvars
aws_ecs_placement_strategy=(object({type="spread",field="attribute:ecs.availability-zone"}),object({type="BinPack",field="CPU"}))
我得到以下错误:
错误:类型规范无效
在变量.tf行53上;aws_ecs_placement_strategy":
53:type=列表(对象(
定义object
类型时,应指定object
的所有字段及其类型,如下所示:
variable "aws_ecs_placement_strategy" {
type = list(object({
type = string,
field = string
}))
}
人们通常希望能够在Terraform中将自定义对象列表定义为变量,这比你想象的更简单。
它可以简单地定义如下:
variable "var_name" {
val_a = string
val_list = list(object({
list_val_1 = string
list_val_2 = number
}))
}
通过这种方式,您可以定义一个变量值列表,这些值可以通过迭代来动态生成资源。当与"动态"块配对时,它将成为一个强大的工具。它可以如下使用,假设我们按照上面的例子定义了一个变量列表:
dynamic "resource_name" {
for_each = var.var_name.val_list
content = {
val_1 = resource_name.value.list_val_1
val_2 = resource_name.value.list_val_2
}
}
遵循这种模式可以使Terraform代码更加模块化和可重用,允许跨多个用例的动态定义。