You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:15:01