---
page_title: Local Values - 0.11 Configuration Language
description: >-
  Local values assign a name to an expression that can then be used multiple
  times

  within a module.
---

# Local Values

-> **Note:** This page is about Terraform 0.11 and earlier. For Terraform 0.12
and later, see
[Configuration Language: Configuring Local Values](/language/values/locals).

Local values assign a name to an expression, that can then be used multiple
times within a module.

Comparing modules to functions in a traditional programming language,
if [variables](/language/configuration-0-11/variables) are analogous to function arguments and
[outputs](/language/configuration-0-11/outputs) are analogous to function return values then
_local values_ are comparable to a function's local variables.

This page assumes you're already familiar with
[the configuration syntax](/language/configuration-0-11/syntax).

## Examples

Local values are defined in `locals` blocks:

```hcl
# Ids for multiple sets of EC2 instances, merged together
locals {
  instance_ids = "${concat(aws_instance.blue.*.id, aws_instance.green.*.id)}"
}

# A computed default name prefix
locals {
  default_name_prefix = "${var.project_name}-web"
  name_prefix         = "${var.name_prefix != "" ? var.name_prefix : local.default_name_prefix}"
}

# Local values can be interpolated elsewhere using the "local." prefix.
resource "aws_s3_bucket" "files" {
  bucket = "${local.name_prefix}-files"
  # ...
}
```

Named local maps can be merged with local maps to implement common or default
values:

```hcl
# Define the common tags for all resources
locals {
  common_tags = {
    Component   = "awesome-app"
    Environment = "production"
  }
}

# Create a resource that blends the common tags with instance-specific tags.
resource "aws_instance" "server" {
  ami           = "ami-123456"
  instance_type = "t2.micro"

  tags = "${merge(
    local.common_tags,
    map(
      "Name", "awesome-app-server",
      "Role", "server"
    )
  )}"
}
```

## Description

The `locals` block defines one or more local variables within a module.
Each `locals` block can have as many locals as needed, and there can be any
number of `locals` blocks within a module.

The names given for the items in the `locals` block must be unique throughout
a module. The given value can be any expression that is valid within
the current module.

The expression of a local value can refer to other locals, but as usual
reference cycles are not allowed. That is, a local cannot refer to itself
or to a variable that refers (directly or indirectly) back to it.

It's recommended to group together logically-related local values into
a single block, particularly if they depend on each other. This will help
the reader understand the relationships between variables. Conversely,
prefer to define _unrelated_ local values in _separate_ blocks, and consider
annotating each block with a comment describing any context common to all
of the enclosed locals.
