Terraform旧代码中废弃map函数如何更新替换为tomap
你这种替换写法是错误的,不能直接替换,且你对Terraform废弃语法的认知存在偏差:
- 首先官方废弃的是用于构造map值的
map()函数,比如locals { app_map = map("name", "test", "env", "prod") }这类用法,而你当前在变量type约束中使用的map(<ELEMENT_TYPE>)是Terraform类型系统的标准语法,从未被废弃,不需要修改。 - 你给出的替换方案
type = tomap({...})不符合语法规范:tomap()是用于将输入值转换为map类型的函数,仅能用于表达式场景,不能放在变量类型声明的位置,直接套用该写法Terraform会直接抛出类型解析错误。 - 你贴出的两段代码都存在语法缺失,需要补充末尾的闭合符号,完整的合法变量声明写法如下:
variable "application_gateways" { type = map(object({ name = string webapp_firewall_policy_key = string zones = list(string) enable_http2 = bool sku = object({ name = string tier = string capacity = number }) })) }
如果你后续碰到值构造场景下的废弃map()函数,正确的替换方式是直接使用map字面量,参考示例:
旧写法:
locals { test_map = map("key1", "value1", "key2", "value2") }
新写法:
locals { # 常规场景直接用map字面量即可 test_map = { key1 = "value1", key2 = "value2" } # 如需强制转换为所有元素类型一致的map而非object类型,才需要调用tomap test_map_typed = tomap({ key1 = "value1", key2 = "value2" }) }
内容的提问来源于stack exchange,提问作者Vegas588
相关产品推荐
相关产品推荐

