---
page_title: The terraform_data Managed Resource Type
description: >-
  Retrieves the root module output values from a Terraform state snapshot stored
  in a remote backend.
---

# The `terraform_data` Managed Resource Type

The `terraform_data` implements the standard resource lifecycle, but does not directly take any other actions. 
You can use the `terraform_data` resource without requiring or configuring a provider. It is always available through a built-in provider with the [source address](/language/providers/requirements#source-addresses) `terraform.io/builtin/terraform`.

The `terraform_data` resource is useful for storing values which need to follow a manage resource lifecycle, and for triggering provisioners when there is no other logical managed resource in which to place them.


## Example Usage (data for `replace_triggered_by`)


[The `replace_triggered_by` lifecycle argument](/language/meta-arguments/lifecycle#replace_triggered_by) requires all of the given addresses to be for resources, because the decision to force replacement is based on the planned actions for all of the mentioned resources.

Plain data values such as [Local Values](/language/values/locals) and [Input Variables](/language/values/variables) don't have any side-effects to plan against and so they aren't valid in `replace_triggered_by`. You can use `terraform_data`'s behavior of planning an action each time `input` changes to _indirectly_ use a plain value to trigger replacement.


```hcl
variable "revision" {
  default = 1
}

resource "terraform_data" "replacement" {
  input = var.revision
}

# This resource has no convenient attribute which forces replacement,
# but can now be replaced by any change to the revision variable value.
resource "example_database" "test" {
  lifecycle {
    replace_triggered_by = [terraform_data.replacement]
  }
}
```

## Example Usage (`null_resource` replacement)

```hcl
resource "aws_instance" "web" {
  # ...
}

resource "aws_instance" "database" {
  # ...
}

# A use-case for terraform_data is as a do-nothing container
# for arbitrary actions taken by a provisioner.
resource "terraform_data" "bootstrap" {
  triggers_replace = [
    aws_instance.web.id,
    aws_instance.database.id
  ]

  provisioner "local-exec" {
    command = "bootstrap-hosts.sh"
  }
}
```


## Argument Reference

The following arguments are supported:

* `input` - (Optional) A value which will be stored in the instance state, and reflected in the `output` attribute after apply.

* `triggers_replace` - (Optional) A value which is stored in the instance state, and will force replacement when the value changes.

## Attributes Reference

In addition to the above, the following attributes are exported:

* `id` - A string value unique to the resource instance.

* `output` - The computed value derived from the `input` argument. During a plan where `output` is unknown, it will still be of the same type as `input`.
