Move multiple items in terraform states
Some of terraform state
commands can be used in case that modify the terraform state.
We use terraform state mv
command to move items or rename items in that state, enabling efficient refactoring.
terraform versions
$ terraform -v
Terraform v0.12.16
+ provider.aws v2.40.0
All resources within a terraform state.
$ terraform state list
module.cloud_trails.data.aws_caller_identity.this
module.cloud_trails.aws_cloudtrail.this
module.cloud_trails.aws_s3_bucket.this
module.cloud_trails.aws_s3_bucket_policy.this
module.guard_duty.aws_guardduty_detector.this
Example: Rename module.cloud_trails.*
to module.cloudtrail.*
$ terraform state mv -dry-run 'module.cloud_trails' 'module.cloudtrail'
Would move "module.cloud_trails" to "module.cloudtrail"
Example: Rename module.cloud_trails.*.this
to module.cloud_trails.*.that
$ terraform state list module.cloud_trails
| awk '{print $1 " " $1}' \
| sed 's/this/that/2' \
| xargs -n2 bash -c 'terraform state mv -dry-run $0 $1'
Would move "module.cloud_trails.data.aws_caller_identity.this" to "module.cloud_trails.data.aws_caller_identity.that"
Would move "module.cloud_trails.aws_cloudtrail.this" to "module.cloud_trails.aws_cloudtrail.that"
Would move "module.cloud_trails.aws_s3_bucket.this" to "module.cloud_trails.aws_s3_bucket.that"
Would move "module.cloud_trails.aws_s3_bucket_policy.this" to "module.cloud_trails.aws_s3_bucket_policy.that"
You need to eliminate -dry-run
to rename itemes in the state.