terraform中地图和地图对象的区别

问题描述 投票:0回答:1

我在看地图和物体的区别。我的理解是这样的:

只要所有元素都是同一类型,地图就可以包含任何类型

variable "project_defaults" {
      type = map(string)
      default  = {
          project = "example_project"
          region = "eu-west-1" 
      }
    }

一个对象包含命名属性,每个属性都有自己的类型

variable "s3_buckets" {
  type = object({
    name                   = string
    versioning             = bool
    s3_rules   = list(map(any))
  })
  description = "List of maps for S3 buckets"
}

我看过使用

map(object)
的示例,但我真的不确定与
object

类型相比有什么区别
variable "s3_buckets" {
      type = map(object({
        name                   = string
        versioning             = bool
        s3_rules   = list(map(any))
      }))
      description = "List of maps for S3 buckets"
    }

我试图弄清楚何时使用

map(object)
而不是使用
object
。在语法方面,它们看起来非常相似,但不确定何时使用它们的实际场景。

amazon-web-services list object terraform maps
1个回答
0
投票

Map 可以包含任何类型,只要所有元素都是同一类型即可。如果我有一个只有字符串的映射并且想为任何资源配置使用这些值,这将是有意义的。

对象类型的模式是

{ <KEY> = <TYPE>, <KEY> = <TYPE>, ... }
——一对花括号包含一系列以逗号分隔的
<KEY> = <TYPE>
对。与对象类型匹配的值必须包含所有指定的键,并且每个键的值必须与其指定的类型匹配。如果在创建资源时需要遵循对象模式的特定结构,这将有意义。

需要注意的一点是,如果映射(或更大的对象)至少具有对象模式所需的键,则可以将其转换为对象。转换期间会丢弃任何其他属性,这意味着

map -> object
地图转换可能是有损的。

© www.soinside.com 2019 - 2024. All rights reserved.