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

Terraform配置疑问:能否将变量作为map类型变量的值传入?

可以这样配置,但需满足两个关键条件

结论:完全可以,Terraform支持在变量的default值中引用其他已定义的变量,只要符合以下要求:

  1. 类型严格匹配
    你的selected_role变量类型是map(list(string)),意味着它的每个值都必须是list(string)类型。因此var.devops_arn和var.dbadmin_arn必须明确定义为list(string),不能是单个string。正确的子变量定义示例:

    variable "devops_arn" {
      type = list(string)
      default = ["arn:aws:iam::123456789012:policy/DevOpsFullAccess"]
    }
    
    variable "dbadmin_arn" {
      type = list(string)
      default = ["arn:aws:iam::123456789012:policy/DBAdminReadOnly"]
    }
    

    如果你的子变量原本是单个ARN字符串,需要用方括号包装成列表,比如default = ["arn:xxx"]。

  2. 变量定义顺序正确
    必须确保devops_arn和dbadmin_arn在selected_role之前定义。Terraform按配置文件的解析顺序处理变量,后定义的变量可以引用先定义的变量,反之会触发"未定义变量"的错误。

排查阻塞问题的常见方向

如果配置报错,优先做以下检查:

  • 执行terraform validate,它会输出具体的类型不匹配或变量引用错误信息
  • 确认子变量的类型不是string,而是list(string)
  • 检查变量定义的先后顺序,避免循环引用或逆序引用

内容的提问来源于stack exchange,提问作者skscloud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:05:56