Day 11 of the 30 Days of AWS Terraform series focuses on Terraform Built-in Functions — a critical concept that brings programming-style logic into Terraform configurations.
Since Terraform does not support custom functions, mastering its built-in functions is essential for writing clean, reusable, and flexible infrastructure code.
This session introduces functions gradually, starting from basic programming concepts and moving into real AWS Terraform use cases.
🔹 What Is a Function (in Terraform Context)?
In programming, a function is a reusable block of logic.
Terraform:
❌ Does not allow user-defined functions
✅ Provides many built-in functions
These built-in functions cover:
String manipulation
Numeric calculations
Collections (lists, maps, sets)
Type conversions
Date & time
Lookups and iteration
🔑 Function Categories Covered
1️⃣ String Functions
Used heavily for:
Resource names
Tags
Sanitizing user input
Common String Functions
upper("aws") # AWS
lower("AWS") # aws
trim(" aws ") # aws
replace("my app", " ", "-")
substr("terraform", 0, 4)
Real AWS Use Case
AWS resource names have strict constraints.
String functions help sanitize inputs safely.
2️⃣ Numeric Functions
Used for calculations and comparisons.
Examples:
max(3, 7, 2)
min(5, 1, 9)
abs(-10)
Helpful when:
Calculating counts
Enforcing limits
Validating numeric values
3️⃣ Collection Functions (List & Map)
List Functions
length(var.subnets)
concat(list1, list2)
Map Functions
merge(map1, map2)
4️⃣ Type Conversion Functions
Terraform is strictly typed.
Examples:
toset(["a", "a", "b"])
tostring(123)
tonumber("42")
Use cases:
Removing duplicates
Fixing type mismatches
Handling dynamic inputs
5️⃣ Date & Time Functions
Useful for:
Logging
Naming
Auditing
Examples:
timestamp()
formatdate("YYYY-MM-DD", timestamp())
6️⃣ Sanitizing AWS Resource Names (Real-World Demo)
AWS S3 bucket rules:
Lowercase only
3–63 characters
No spaces
Solution Using Functions
locals {
bucket_name = substr(
replace(lower(var.bucket_name), " ", "-"),
0,
63
)
}
This prevents:
terraform failures
AWS API errors
7️⃣ Split, For-Expressions & Interpolation
Split a String
split(",", "dev,stage,prod")
For-Expression
[for env in var.envs : upper(env)]
Interpolation
"${var.project}-${var.env}"
These enable:
Dynamic resource creation
Iteration without duplication
Clean string composition
8️⃣ Lookup Function — Environment-Specific Logic
The lookup function selects values from a map safely.
lookup(var.instance_type_map, var.env, "t2.micro")
Why It’s Powerful
Avoids conditional chains
Provides default fallback
Ideal for multi-environment configs
SOCIAL SHARE CARD GENERATOR