github.com/muratcelep/terraform@v1.1.0-beta2-not-internal-4/website/docs/language/values/locals.html.md (about)

     1  ---
     2  layout: "language"
     3  page_title: "Local Values - Configuration Language"
     4  sidebar_current: "docs-config-locals"
     5  description: "Local values assign a name to an expression that can be used multiple times within a Terraform module."
     6  ---
     7  
     8  # Local Values
     9  
    10  > **Hands-on:** Try the [Simplify Terraform Configuration with
    11  Locals](https://learn.hashicorp.com/tutorials/terraform/locals?in=terraform/configuration-language&utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS)
    12  tutorial on HashiCorp Learn.
    13  
    14  A local value assigns a name to an [expression](/docs/language/expressions/index.html),
    15  so you can use it multiple times within a module without repeating
    16  it.
    17  
    18  If you're familiar with traditional programming languages, it can be useful to
    19  compare Terraform modules to function definitions:
    20  
    21  - [Input variables](./variables.html) are like function arguments.
    22  - [Output values](./outputs.html) are like function return values.
    23  - Local values are like a function's temporary local variables.
    24  
    25  -> **Note:** For brevity, local values are often referred to as just "locals"
    26  when the meaning is clear from context.
    27  
    28  ## Declaring a Local Value
    29  
    30  A set of related local values can be declared together in a single `locals`
    31  block:
    32  
    33  ```hcl
    34  locals {
    35    service_name = "forum"
    36    owner        = "Community Team"
    37  }
    38  ```
    39  
    40  The expressions in local values are not limited to literal constants; they can
    41  also reference other values in the module in order to transform or combine them,
    42  including variables, resource attributes, or other local values:
    43  
    44  ```hcl
    45  locals {
    46    # Ids for multiple sets of EC2 instances, merged together
    47    instance_ids = concat(aws_instance.blue.*.id, aws_instance.green.*.id)
    48  }
    49  
    50  locals {
    51    # Common tags to be assigned to all resources
    52    common_tags = {
    53      Service = local.service_name
    54      Owner   = local.owner
    55    }
    56  }
    57  ```
    58  
    59  ## Using Local Values
    60  
    61  Once a local value is declared, you can reference it in
    62  [expressions](/docs/language/expressions/index.html) as `local.<NAME>`.
    63  
    64  -> **Note:** Local values are _created_ by a `locals` block (plural), but you
    65  _reference_ them as attributes on an object named `local` (singular). Make sure
    66  to leave off the "s" when referencing a local value!
    67  
    68  ```
    69  resource "aws_instance" "example" {
    70    # ...
    71  
    72    tags = local.common_tags
    73  }
    74  ```
    75  
    76  A local value can only be accessed in expressions within the module where it
    77  was declared.
    78  
    79  ## When To Use Local Values
    80  
    81  Local values can be helpful to avoid repeating the same values or expressions
    82  multiple times in a configuration, but if overused they can also make a
    83  configuration hard to read by future maintainers by hiding the actual values
    84  used.
    85  
    86  Use local values only in moderation, in situations where a single value or
    87  result is used in many places _and_ that value is likely to be changed in
    88  future. The ability to easily change the value in a central place is the key
    89  advantage of local values.