> For the complete documentation index, see [llms.txt](https://isurus.gitbook.io/infrastructure-and-platform-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://isurus.gitbook.io/infrastructure-and-platform-notes/terraform-24/terraform-basics/06-build-in-functions.md).

# Built in Functions

Terraform provides many built in functions. These functions can be called by functionname() inside `${}`. For example, `${file(config.txt)}` will read the content of the file.

A list of commonly used functions,

| Function                         | Description                                                                                                                         | Example                                                                   |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| basename(path)                   | Returns filename of the a path                                                                                                      | basename("/home/isuru/file.txt") returns file.txt                         |
| coalesce(string1, string2, ...)  | Returns the first non empty value                                                                                                   | coalsec("", "", "hello")                                                  |
| coalescelist(list1, list2, ...)  | Returns the first non empty list                                                                                                    | "                                                                         |
| element(list, index)             | Returns a single element from a list at the given index                                                                             | element(module.vpc.public\_subnet, count.index)                           |
| format(format, args, ...)        | Formats a string/list according to the given format                                                                                 | format("server-%03d, count.index + 1) returns server-001, server-002      |
| index(list, elem)                | Finds the index of a given element in a list                                                                                        | index(aws\_instance.foo.\*.tags.Env, "prod")                              |
| join(delim, list)                | Joins a list together with a delimiter                                                                                              | join(",", var.AMIS) returns "ami-123, ami-456, ami-789"                   |
| list(item1, item2, ...)          | create a new list                                                                                                                   | join(":", list("a", "b", "c")) returns a:b:c                              |
| lookup(map, key, \[default])     | Perform a lookup on a map, using "key". Returns value representing "key" in the map(lookup("k", "v"), "k", "not found") returns "v" |                                                                           |
| lower(string)                    | returns lowercase value of "string"                                                                                                 | lower("Hello") returns hello                                              |
| map(key, value)                  | returns a new map using key:value                                                                                                   | map("k", "v", "k2", "v2") returns: {"k" = "v", "k2" = "v2"}               |
| merge(map1, map2, ...)           | Merge maps(union)                                                                                                                   | merge(map("k", "v"), map("k2", "v2")) returns: {"k" = "v", "k2" = "v2"}   |
| replace(string, search, replace) | Returns a search and replace on string                                                                                              | replace("aaab", "a", "b") returns bbbb                                    |
| split(delim, string)             | splits a string into a list                                                                                                         | split(",", "a,b,c,d") returns \["a", "b", "c", "d"]                       |
| substr(string, offset, length)   | Extract substring from string                                                                                                       | substr("abcd", -3, 3)returns cde                                          |
| timestamp()                      | returns RFC 3339 timestamp                                                                                                          | "Server started at ${timestamp()}" Server started at 2021-05-27T10:42:46Z |
| uppser(string)                   | Returns uppsecased string                                                                                                           | upper('string') returns STRING                                            |
| uuid()                           | Returns a UUID string in RFC 4122 v4 format                                                                                         | uuid() returns: c5f44842-beaa-11eb-8529-0242ac130003                      |
| values(map)                      | returns values of a map                                                                                                             | values(map("k", "v", "k2", "v2")) returns\["v", "v2"]                     |
