# 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"]                     |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://isurus.gitbook.io/infrastructure-and-platform-notes/terraform-24/terraform-basics/06-build-in-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
