| --- |
| page_title: 'Internals: Resource Address' |
| description: |- |
| A resource address is a string that identifies zero or more resource |
| instances in your overall configuration. |
| --- |
| |
| # Resource Addressing |
| |
| A _resource address_ is a string that identifies zero or more resource |
| instances in your overall configuration. |
| |
| An address is made up of two parts: |
| |
| ``` |
| [module path][resource spec] |
| ``` |
| |
| In some contexts Terraform might allow for an incomplete resource address that |
| only refers to a module as a whole, or that omits the index for a |
| multi-instance resource. In those cases, the meaning depends on the context, |
| so you'll need to refer to the documentation for the specific feature you |
| are using which parses resource addresses. |
| |
| ## Module path |
| |
| A module path addresses a module within the tree of modules. It takes the form: |
| |
| ``` |
| module.module_name[module index] |
| ``` |
| |
| - `module` - Module keyword indicating a child module (non-root). Multiple `module` |
| keywords in a path indicate nesting. |
| - `module_name` - User-defined name of the module. |
| - `[module index]` - (Optional) [Index](#index-values-for-modules-and-resources) |
| to select an instance from a module call that has multiple instances, |
| surrounded by square bracket characters (`[` and `]`). |
| |
| An address without a resource spec, i.e. `module.foo` applies to every resource within |
| the module if a single module, or all instances of a module if a module has multiple instances. |
| To address all resources of a particular module instance, include the module index in the address, |
| such as `module.foo[0]`. |
| |
| If the module path is omitted, the address applies to the root module. |
| |
| An example of the `module` keyword delineating between two modules that have multiple instances: |
| |
| ``` |
| module.foo[0].module.bar["a"] |
| ``` |
| |
| -> Module index only applies to modules in Terraform v0.13 or later. In earlier |
| versions of Terraform, a module could not have multiple instances. |
| |
| ## Resource spec |
| |
| A resource spec addresses a specific resource instance in the selected module. |
| It has the following syntax: |
| |
| ``` |
| resource_type.resource_name[instance index] |
| ``` |
| |
| - `resource_type` - Type of the resource being addressed. |
| - `resource_name` - User-defined name of the resource. |
| - `[instance index]` - (Optional) [Index](#index-values-for-modules-and-resources) |
| to select an instance from a resource that has multiple instances, |
| surrounded by square bracket characters (`[` and `]`). |
| |
| -> In Terraform v0.12 and later, a resource spec without a module path prefix |
| matches only resources in the root module. In earlier versions, a resource spec |
| without a module path prefix would match resources with the same type and name |
| in any descendent module. |
| |
| ## Index values for Modules and Resources |
| |
| The following specifications apply to index values on modules and resources with multiple instances: |
| |
| - `[N]` where `N` is a `0`-based numerical index into a resource with multiple |
| instances specified by the `count` meta-argument. Omitting an index when |
| addressing a resource where `count > 1` means that the address references |
| all instances. |
| - `["INDEX"]` where `INDEX` is a alphanumerical key index into a resource with |
| multiple instances specified by the `for_each` meta-argument. |
| |
| ## Examples |
| |
| ### count Example |
| |
| Given a Terraform config that includes: |
| |
| ```hcl |
| resource "aws_instance" "web" { |
| # ... |
| count = 4 |
| } |
| ``` |
| |
| An address like this: |
| |
| ``` |
| aws_instance.web[3] |
| ``` |
| |
| Refers to only the last instance in the config, and an address like this: |
| |
| ``` |
| aws_instance.web |
| ``` |
| |
| Refers to all four "web" instances. |
| |
| ### for_each Example |
| |
| Given a Terraform config that includes: |
| |
| ```hcl |
| resource "aws_instance" "web" { |
| # ... |
| for_each = { |
| "terraform": "value1", |
| "resource": "value2", |
| "indexing": "value3", |
| "example": "value4", |
| } |
| } |
| ``` |
| |
| An address like this: |
| |
| ``` |
| aws_instance.web["example"] |
| ``` |
| |
| Refers to only the "example" instance in the config. |