Terraform 中的变量:我的学习
发布: (2025年12月28日 GMT+8 19:41)
3 分钟阅读
原文: Dev.to
Source: Dev.to
介绍
Terraform 变量允许你存储可以在整个配置中重复使用的值。它们分为两类:
- 输入变量 – 你提供给配置的值。
- 输出变量 –
terraform apply之后产生的值。
输入变量
输入变量让你对配置进行参数化(例如实例类型、区域、实例数量)。
variable "example" {
type = string # optional
default = "value" # optional
description = "A description of the variable"
}
输出变量
输出变量在运行后暴露信息,例如 EC2 实例的公网 IP。
output "example" {
value = aws_instance.example.public_ip
description = "The public IP of the instance"
}
Terraform 中的数据类型
Terraform 支持 原始 和 复合 数据类型。
原始数据类型
| 类型 | 描述 |
|---|---|
string | 任意文本,例如 "us-east-1" |
number | 整数或浮点数,例如 2 |
bool | 布尔值 true 或 false |
复合数据类型
List(列表)
有序的同类型值集合。
variable "regions" {
type = list(string)
default = ["ap-south-1", "us-east-1", "us-west-1"]
}
Set(集合)
无序的 唯一 同类型值集合。
variable "unique_regions" {
type = set(string)
default = ["ap-south-1", "us-east-1", "us-west-1"]
}
Map(映射)
键值对,键为字符串,值共享同一种类型。
variable "tags" {
type = map(string)
default = {
name = "ec2_instance"
description = "ec2 instance for running the backend"
env = "prod"
}
}
Tuple(元组)
有序且长度固定的集合,可以包含不同类型的值。元组是不可变的。
variable "network_addresses" {
type = tuple([string, string])
default = ["192.168.1.2", "192.168.1.1"]
}
Object(对象)
结构化类型,具有命名属性,每个属性可以有不同的类型。
variable "user" {
type = object({
name = string
age = number
email = string
})
default = {
name = "Rohan"
age = 20
email = "rohan@gmail.com"
}
}
结论
Terraform 变量通过避免硬编码字面量并实现跨模块和资源的值复用,使配置更加简洁易维护。