Terraform如何要求字典必填Name键并允许任意可选键
解决Terraform标签变量保留自定义键且强制必填Name的问题
方法1:类型交集(Terraform 0.14+ 推荐)
通过类型交集语法,既能强制要求Name键存在,又允许任意额外的字符串键值对,不会丢弃自定义键。
代码示例:
tags = { "Name" = "EC2_Name_Value" # 必填 "AnyKey1" = "value1" "AnyKey2" = "value2" } variable "tags" { type = object({ Name = string }) & map(string) }
执行后所有键都会保留:
> var.tags { "Name" = "EC2_Name_Value" "AnyKey1" = "value1" "AnyKey2" = "value2" }
方法2:map类型加验证规则(兼容旧版本)
如果你的Terraform版本低于0.14,可以用map(string)作为变量类型,再通过验证规则强制检查Name键是否存在:
代码示例:
tags = { "Name" = "EC2_Name_Value" # 必填 "AnyKey1" = "value1" "AnyKey2" = "value2" } variable "tags" { type = map(string) validation { condition = contains(keys(var.tags), "Name") error_message = "标签必须包含必填的Name键。" } }
该方法同样会保留所有自定义键,同时确保Name键不会遗漏。
内容的提问来源于stack exchange,提问作者Emme
相关产品推荐
相关产品推荐

