Reputation: 353
Is there any way to avoid resource deletion when reorganizing/renaming resources? Example: when I first implemented CloudFront Terraform it was an independent sub directory in my project, later I switched to using it as a module in. my root Terraform config but this caused Terraform to want to delete the old CloudFront distribution and create a new one:
Terraform will perform the following actions:
- aws_cloudfront_distribution.main_site_distribution
+ module.cloudfront.aws_cloudfront_distribution.main_site_distribution
Is there any way to force Terraform to rename the resource instead?
Upvotes: 24
Views: 10430
Reputation: 368
Terraform v1.1+ now has a moved {from... to...}
block which can be used for these sort of refactoring.
I'd strongly recommend using moved {}
over changing state via the terraform cli.
Per your example this would fix the delete and create:
moved {
from = aws_cloudfront_distribution.main_site_distribution
to = module.cloudfront.aws_cloudfront_distribution.main_site_distribution
}
Terraform refactoring documentation has been updated.
Upvotes: 3
Reputation: 56869
Unfortunately Terraform doesn't know that you've renamed/moved the resource around but you could tell it where the resource should be stored in the state by using terraform state mv
.
In your case if you ran:
terraform state mv aws_cloudfront_distribution.main_site_distribution module.cloudfront.aws_cloudfront_distribution.main_site_distribution
and then run another plan you should see no changes (or only the changes to the resource you have made as well as the move).
Upvotes: 34