A moved block renames without destroying

Renaming a resource or moving it into a module makes Terraform plan a destroy and a create, and 1.1 lets the rename be declared instead.

moved {
  from = aws_s3_bucket.uploads
  to   = module.storage.aws_s3_bucket.this
}

# the plan is now empty rather than proposing to destroy
# a bucket with four years of files in it.

# what it replaces:
#   terraform state mv aws_s3_bucket.uploads 
#     module.storage.aws_s3_bucket.this
#   — correct, and a manual step outside review

The value over state mv is that it appears in the plan and therefore in the review, so the rename is something a second person approves rather than something one person ran. The blocks accumulate and are never removed, which is the honest cost: a year later the file has fourteen of them describing history nobody needs.