2020-10-27 02:15:36 +01:00
|
|
|
---
|
2021-12-15 03:41:17 +01:00
|
|
|
page_title: Moving Resources - Terraform CLI
|
|
|
|
description: >-
|
|
|
|
Commands that allow you to manage the way that resources are tracked in state.
|
|
|
|
They are helpful when you move or change resources.
|
2020-10-27 02:15:36 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
# Moving Resources
|
|
|
|
|
|
|
|
Terraform's state associates each real-world object with a configured resource
|
2021-12-15 03:41:17 +01:00
|
|
|
at a specific [resource address](/cli/state/resource-addressing). This
|
2020-10-27 02:15:36 +01:00
|
|
|
is seamless when changing a resource's attributes, but Terraform will lose track
|
|
|
|
of a resource if you change its name, move it to a different module, or change
|
|
|
|
its provider.
|
|
|
|
|
|
|
|
Usually that's fine: Terraform will destroy the old resource, replace it with a
|
|
|
|
new one (using the new resource address), and update any resources that rely on
|
|
|
|
its attributes.
|
|
|
|
|
|
|
|
In cases where it's important to preserve an existing infrastructure object, you
|
|
|
|
can explicitly tell Terraform to associate it with a different configured
|
|
|
|
resource.
|
|
|
|
|
2022-01-11 01:44:18 +01:00
|
|
|
For most cases we recommend using
|
|
|
|
[the Terraform language's refactoring features](/language/modules/develop/refactoring)
|
|
|
|
to document in your module exactly how the resource names have changed over
|
|
|
|
time. Terraform will react to this information automatically during planning,
|
|
|
|
and thus users of your module will not need to take any unusual extra steps.
|
|
|
|
|
|
|
|
> **Hands On:** Try the [Use Configuration to Move Resources](https://learn.hashicorp.com/tutorials/terraform/move-config) on HashiCorp Learn.
|
|
|
|
|
|
|
|
There are some other situations which require explicit state modifications,
|
|
|
|
though. For those, consider the following Terraform commands:
|
|
|
|
|
2021-12-15 03:41:17 +01:00
|
|
|
- [The `terraform state mv` command](/cli/commands/state/mv) changes
|
2020-10-27 02:15:36 +01:00
|
|
|
which resource address in your configuration is associated with a particular
|
|
|
|
real-world object. Use this to preserve an object when renaming a resource, or
|
|
|
|
when moving a resource into or out of a child module.
|
|
|
|
|
2021-12-15 03:41:17 +01:00
|
|
|
- [The `terraform state rm` command](/cli/commands/state/rm) tells
|
2020-10-27 02:15:36 +01:00
|
|
|
Terraform to stop managing a resource as part of the current working directory
|
|
|
|
and workspace, _without_ destroying the corresponding real-world object. (You
|
|
|
|
can later use `terraform import` to start managing that resource in a
|
|
|
|
different workspace or a different Terraform configuration.)
|
|
|
|
|
2021-12-15 03:41:17 +01:00
|
|
|
- [The `terraform state replace-provider` command](/cli/commands/state/replace-provider)
|
2020-10-27 02:15:36 +01:00
|
|
|
transfers existing resources to a new provider without requiring them to be
|
|
|
|
re-created.
|