Hands-on: Try the Create Dynamic Expressions tutorial on HashiCorp Learn.
Expressions are used to refer to or compute values within a configuration.
The simplest expressions are just literal values, like
but the Terraform language also allows more complex expressions such as
references to data exported by resources, arithmetic, conditional evaluation,
and a number of built-in functions.
Expressions can be used in a number of places in the Terraform language, but some contexts limit which expression constructs are allowed, such as requiring a literal value of a particular type or forbidding references to resource attributes. Each language feature's documentation describes any restrictions it places on expressions.
You can experiment with the behavior of Terraform's expressions from
the Terraform expression console, by running
terraform console command.
The other pages in this section describe the features of Terraform's expression syntax.
Types and Values documents the data types that Terraform expressions can resolve to, and the literal syntaxes for values of those types.
Strings and Templates documents the syntaxes for string literals, including interpolation sequences and template directives.
References to Values documents how to refer to named values like variables and resource attributes.
Operators documents the arithmetic, comparison, and logical operators.
Function Calls documents the syntax for calling Terraform's built-in functions.
Conditional Expressions documents the
<CONDITION> ? <TRUE VAL> : <FALSE VAL>expression, which chooses between two values based on a bool condition.
For Expressions documents expressions like
[for s in var.list : upper(s)], which can transform a complex type value into another complex type value.
Splat Expressions documents expressions like
var.list[*].id, which can extract simpler collections from more complicated expressions.
Dynamic Blocks documents a way to create multiple repeatable nested blocks within a resource or other construct.
Type Constraints documents the syntax for referring to a type, rather than a value of that type. Input variables expect this syntax in their
Version Constraints documents the syntax of special strings that define a set of allowed software versions. Terraform uses version constraints in several places.