我使用工作区、局部变量和 -backend-config 使用 terraform 为不同的环境(测试/生产)创建了基础设施,因此只有两个不同的文件,其他文件对于两种环境都是通用的。
不幸的是,我没有找到以同样的方式破坏特定环境的方法(无需为每个环境创建大量特定文件)。
我错过了什么吗?有没有办法做到这一点?
任何帮助将不胜感激。
提前感谢!
问候
弗洛伦特
编辑:感谢您的回答,我设法使用工作区,本地变量和后端配置做了我想做的事情!
您可以使用-target
来定位要销毁的特定资源。
terraform destroy
-target 'module.default.aws_autoscaling_group.one'
-target 'module.default.aws_autoscaling_group.two'
笔记
- 如果使用
count
或for_each
逻辑,则需要在目标周围引号,这会导致目标名称中的方括号。 - 单引号更好,因为
for_each
会返回一个双引号键,如果用双引号将目标括起来,则需要对其进行转义
不要混合使用地形命令init/workspace
plan/apply/destroy
。
所以我想你使用以下命令运行来设置后端(保存 tfstate 文件的位置)
terraform init -backend-config=<path>
terraform get
terraform workspace select <env>
然后,您应该为所有计划,应用和销毁命令使用相同的-var-file=<file>
或-var 'foo=bar'
选项运行以下命令。
terraform plan -var-file=dev/terraformtfvars -var 'foo=bar'
terraform apply -var-file=dev/terraformtfvars -var 'foo=bar'
terraform destroy -var-file=dev/terraformtfvars -var 'foo=bar'
让我知道这是否解释了您的担忧。
使用 Terraform V 0.13
我试图传递tfvars
文件来销毁命令,如下所示:
terraform destroy -auto-approve -var-file="env/stage.tfvars"