DEV Community

Cover image for πŸš€ Terraform Day 11: Mastering Built-in Functions for Smarter IaC
Jeeva
Jeeva

Posted on

πŸš€ Terraform Day 11: Mastering Built-in Functions for Smarter IaC

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)