Variable变量
Terraform 运行时会读取工作目录中所有的 *.tf, *.tfvars文件,所有变量不应在单个文件中去,应分类在不同的文件中。
- 通过variables.tf文件集中管理变量
- 通过variable关键字声明变量的名称、类型、默认值等
- 在同一个模块的所有变量中必须是唯一的
- 可以从环境变量或者文本文件中读取
- 在系统环境变量中export敏感变量的值(以TF_VAR_的名称开头)
- 在terraform.tfvars文件中定义变量的值,Terraform默认读取这个文件
声明变量的可选参数
- default 变量的默认值
- type 变量的类型
- description 变量的描述信息
- validation 定义变量验证规则
- sensitive 限制变量在终端中显示,如果为true就隐藏显示
- nullable 变量是否可为空
变量的常见类型
- any
- string、number、bool
- list(
)、set( )、map( ) - object((ATTR_NAME = ATTR_TYPE, ...))、tuple([
,...])
例如:使用map类型变量定义DNS域名,在variables.tf中声明变量map类型,在terraform.tfvars中定义变量的值,在resource中通过map数据类型的索引来调用对应值
变量的使用方式
在变量声明后,可以使用 var.VAR_NAME 的方式引用;VAR_NAME是在variables.tf定义的名称。
变量的优先级如下:
1.环境变量,Terraform会读取TF_VAR_name格式的环境变量
2.terraform.tfvars | terraform.tfvars.json
3.*.auto.tfvars | *.auto.tfvars.json
4.命令行下, -var选项传递变量, -var-file选项加载一个变量文件
Terraform会自动加载当前目录下扩展名为.tfvars和.auto.tfvars的文件来填充定义的变量。
如果以其他格式存放,可以使用-var-file选项来手动指定需要加载的HCL格式或JSON格式的变量值文件。
terraform apply -var="region=cn-beijing"
terraform apply -var='env_list=["dev", "test"]' -var="region=cn-beijing"
terraform apply -var-file="dev.tfvars"
export TF_VAR_region='cn-beijing'
export TF_VAR_env_list='["dev", "test"]"
示例:Terraform会读取TF_VAR_access_key的环境变量,并用于填充access_key变量。
本地变量
- 局部值有助于避免在配置中多次重复相同的值或表达式
- 多用于调试和测试
- 通过locals关键字进行定义,通过local.VAR_NAME调用
交互输入
如果没有对变量赋值,在执行命令时,会出现交互界面,让用户手动输入变量值,来给变量赋值。
Output输出
- 可以打印已定义的变量,也可以公开信息以供其他 Terraform 配置使用
- 输出值类似于编程语言中的返回值。
Output可选参数
- description 变量的描述信息;
- sensitive 限制变量在UI中显示;
- depends_on 依赖关系