🏗️ Built-in Functions & Expressions
Строковые, числовые, коллекционные, кодирующие функции и ограничения типов
🔧 String Functions
`format("Hello, %s!", var.name)` — интерполяция строк. `tostring()`, `lower()`, `upper()`, `trimspace()`, `replace()`, `split()`, `join()`. `substr(str, offset, length)` — подстрока. Интерполяция строк в Terraform: `"${var.env}-server"`.
📋 Collection Functions
`length(list)` — количество элементов. `toset()` — преобразование list в set. `tolist()` — преобразование set в list. `flatten([[a,b],[c]])` → `[a,b,c]`. `distinct()` — удаление дубликатов. `merge(map1, map2)` — объединение map-ов. `keys()`, `values()` — элементы map. `lookup(map, key, default)` — безопасный поиск.
🔢 Numeric & Type Functions
`max(a,b,c)`, `min(a,b,c)`, `abs(n)`, `ceil(n)`, `floor(n)`. `tonumber()`, `tobool()`. Type constraints: `string`, `number`, `bool`, `list(type)`, `set(type)`, `map(type)`, `object({key=type})`, `tuple([type,...])`. `any` — любой тип.
🧩 Conditional & Dynamic Expressions
Тернарный оператор: `condition ? true_val : false_val`. For expression: `[for s in var.list : upper(s)]`. Map for: `{for k, v in var.map : k => v * 2}`. Комбинация `for_each` + `for`. Splat operator: `aws_instance.web[*].id` — получение атрибута из list.
💡 Ключевые моменты
- join(",", list) — создание строки из list
- split(",", string) — создание list из строки
- merge(map1, map2) — объединение map-ов
- for expression — преобразование list/map
- Тернарный оператор: condition ? a : b
- lookup(map, key, default) — безопасный поиск по map
📋 Пример кода
# String functions
locals {
env = "production"
prefix = format("%s-%s", var.project, local.env)
tags = join(", ", ["web", "api", "db"])
parts = split("-", "us-east-1") # ["us","east","1"]
}
# Collection functions
variable "instance_names" {
default = ["web", "api", "api", "db"]
}
locals {
unique_names = toset(var.instance_names) # {"api","db","web"}
upper_names = [for n in var.instance_names : upper(n)]
name_map = {for n in toset(var.instance_names) : n => "t3.micro"}
}
# Conditional
locals {
instance_type = var.env == "prod" ? "t3.large" : "t3.micro"
}
# Lookup with default
locals {
ami = lookup(var.ami_map, var.region, "ami-default")
🎯 Советы для экзамена
- `toset(["a","b","a"])` → `{"a","b"}` — удаляет дубликаты (необходимо для for_each)
- `flatten()` — преобразует вложенный list в единый плоский list
- For expression с фильтром: `[for x in list : x if condition]`
- Splat `[*]` — только для list. `for` expression — для любого типа
- `contains(list, value)` — проверка наличия элемента (true/false)
⚠️ Частые ошибки
- Считать, что в set гарантирован порядок — set не упорядочен. Для for_each предпочтительнее использовать map
- При конфликте в `merge()` побеждает последний map — следите за порядком
- В тернарном выражении оба branch вычисляются — может возникнуть ошибка null reference
🧠 Для запоминания: "SCNF" = String (format/join/split), Collection (merge/flatten/toset), Numeric (max/min/ceil), For-expression — 4 основные категории функций Terraform
Проверьте себя по теме «Built-in Functions & Expressions»
Бесплатные интерактивные тесты, пробный экзамен и полные уроки — на платформе CertMaster.
Начать бесплатно →