Renaming a Terraform resource address — whether refactoring a module structure, changing a resource name for clarity, or migrating from count to for_each — traditionally causes Terraform to plan a destroy-then-create operation. For stateless resources like security group rules this is merely disruptive, but for stateful resources like RDS instances, EBS volumes, or S3 buckets with data, a destroy-and-recreate means data loss and downtime. Before Terraform 1.1 introduced moved blocks, teams had to use terraform state mv commands as manual operational steps that were error-prone, could not be code-reviewed, and left no audit trail in the configuration itself. The moved block solves this by declaratively recording the resource address change in your configuration, allowing Terraform to plan the rename as a no-op state update rather than a destructive operation. This makes refactoring safe, reviewable, and automated — the moved block appears in the pull request diff so reviewers can verify the rename is intentional. After one successful apply the moved block can be removed, but many teams keep them as documentation of the resource's history.