我最近使用Cloudfront,S3和WAF测试并创建了一个UI。
我对Cloudfront模块进行了一些更改,并对创建的WAF ACL名称进行了硬编码,以便每次执行terraform apply
时,它将使用我创建的WAF。然后我从代码中删除了WAF模块。
当我尝试再进行一次terraform apply
时,它表示WAF将被销毁。我以为是因为我删除了WAF模块。
是否可以执行terraform plan
/ apply
并跳过销毁先前部署中最近部署的WAF的方法?
答案 0 :(得分:6)
terraform state rm some.resource.to.remove
Terraform状态管理实际上工作得很好,我在移动资源时经常使用它,例如之前我对包含不同资源的模块进行模块化。在这种情况下,Terraform最初会尝试销毁旧资源并创建新资源,因此我使用:
terraform state mv aws_lb.my_lb module.some_module.aws_lb.my_lb
答案 1 :(得分:2)
您可以使用terraform -target=resource
仅更新特定资源及其依赖项。这可能很笨拙,但是应该可以让您解决丢失的声明。
或者,您可以从.tfstate文件中删除资源。我不知道terraform
是否可以选择这样做,如果资源有很多依赖关系,可能会很复杂。