Terraform 内置函数
写 Terraform 配置的时候,你肯定遇到过这些场景: 想把几个字符串拼起来 想从一个列表里取第一个元素 想根据条件选不同的值 想读取一个 JSON 配置文件 Terraform 内置了 100+ 个函数,覆盖了字符串处理、集合操作、类型转换、编码解码等各种需求。掌握它们,你的 HCL 代码会从"能跑"变成"优雅"。 本文挑出最常用的 20 个函数,每个都配上可直接运行的 demo,最后附上最佳实践。 1. 字符串函数 1.1. format() — 格式化字符串 类似其他语言的 sprintf,用占位符拼接字符串。 locals { env = "prod" region = "cn-hangzhou" # 输出: "prod-cn-hangzhou-01" name = format("%s-%s-01", local.env, local.region) } 1.2. join() — 用分隔符拼接列表 locals { tags = ["web", "nginx", "frontend"] # 输出: "web,nginx,frontend" csv = join(",", local.tags) } 1.3. split() — 按分隔符拆分字符串 locals { str = "10.0.0.1,10.0.0.2,10.0.0.3" # 输出: ["10.0.0.1", "10.0.0.2", "10.0.0.3"] ips = split(",", local.str) } 1.4. replace() — 替换子串 locals { name = "my-project-dev" # 输出: "my-project-prod" new = replace(local.name, "dev", "prod") } 1.5. trimprefix() / trimsuffix() — 去掉前缀/后缀 locals { domain = "www.example.com" # 输出: "example.com" base = trimprefix(local.domain, "www.") } 1.6. upper() / lower() / title() — 大小写转换 locals { env = "production" # 输出: "PRODUCTION" tag = upper(local.env) } 2. 集合函数(列表 / 映射 / 集合) 2.1. length() — 获取长度 locals { zones = ["cn-hangzhou-a", "cn-hangzhou-b", "cn-hangzhou-c"] count = length(local.zones) # 输出: 3 } 2.2. element() — 按索引取值(会循环) locals { zones = ["a", "b"] # 索引 2 超出长度,自动取模 → 回到索引 0 # 输出: "a" zone = element(local.zones, 2) } 💡 和直接 local.zones[2] 不同,element() 不会报错,适合循环创建资源时分配可用区。 ...