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
Top comments (0)