重命名资源而非删除?

22

在重新组织/重命名资源时,有没有避免资源删除的方法? 例如:当我最初实现CloudFront Terraform时,它是我的项目中独立的子目录,后来我切换到将其用作我根Terraform配置文件中的模块,但这会导致Terraform想要删除旧的CloudFront分配并创建一个新的:

Terraform will perform the following actions:
    - aws_cloudfront_distribution.main_site_distribution
    + module.cloudfront.aws_cloudfront_distribution.main_site_distribution

有没有办法强制Terraform重命名资源而不是删除它?

2个回答

33

不幸的是,Terraform 不知道您已经重命名/移动了资源,但是您可以使用 terraform state mv 告诉它资源应该在状态中存储的位置。

在您的情况下,如果您运行了以下命令:

terraform state mv aws_cloudfront_distribution.main_site_distribution module.cloudfront.aws_cloudfront_distribution.main_site_distribution

然后运行另一个计划,您应该看不到任何更改(或者只看到您所做的资源更改以及移动)。


1
Terraform v1.1+现在有一个moved {from... to...}块,可以用于此类重构。
我强烈建议使用moved {}而不是通过terraform cli更改状态。
根据您的示例,这将修复删除和创建。
moved {
  from = aws_cloudfront_distribution.main_site_distribution
  to   = module.cloudfront.aws_cloudfront_distribution.main_site_distribution
}

Terraform重构文档已更新


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接