Variable 本地变量 本地变量可以理解为模块中的临时变量,其作用范围在所声明的模块内,通过关键字 locals 进行声明。本地变量适用于配置中有重复定义相同值或表达式的场景,可以减少代码冗余,并且易于修改。同时过度使用本地变量会导致变量的实际值被隐藏,代码晦涩,不利于维护,因此建议合理使用本地变量。 输入变量就像函数参数。 输出变量就像函数返回值。 本地变量就像函数的临时局部变量。 本地变量声明 一组相关的局部变量可以在一个locals 块中一起声明: java locals { servicename "forum" owner "Community Team" } 本地变量的赋值不仅限于文本常量,它们还可以引用模块中的其他值以进行转换或组合,包括变量、资源属性或其他本地值: java locals { securitygroupids concat(ctyunsecuritygroup.sg1.id, ctyunsecuritygroup.sg2.id) } locals { commontags { Service local.servicename Owner local.owner } } 本地变量的引用 声明了局部值,您就可以在表达式中引用它 local. 。 java resource "ctyunecs" "ecstest" { instancename local.servicename ... } 输入变量 输入变量声明 输入变量是一种无需更改模块自身的源代码,可以自定义名称和输入值。输入变量允许您在不同的 Terraform 配置之间共享模块,从而使您的模块可组合且可重用。 在配置的根模块中声明变量时,可以使用 Terraform CLI 输入或者通过环境变量设置它们的值。在子模块中声明变量时,调用模块应该在module代码块中传递值。 java variable "imageid" { type string } variable "password" { type string sensitive true nullable false description "手动输入密码" } variable "dns" { type list(string) default [ "114.114.114.114", "8.8.8.8", "8.8.4.4" ] } variable "azinfo" { type list(object({ availabilityzonename string availabilityzonecount number nodetype string })) default [ { availabilityzonename "cngsqyi21apublicctcloud" availabilityzonecount 1 nodetype "master" } ] } 上述是 variable 的定义,关键字 variable 后的标签是变量名称,该名称在同一模块的所有变量中必须是唯一的。变量名称由用户自定义,但用户需要注意一下字段不可作为变量名称:source, version, providers, count, foreach, lifecycle, dependson 和 locals。关于 {} 中定义的属性可参考输入变量参数的内容。