我使用工作区、本地文件和-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
会返回一个双引号键,如果用双引号包围目标,则需要转义该键使用 Terraform V 0.13
我尝试传递
tfvars
文件来销毁这样的命令:
terraform destroy -auto-approve -var-file="env/stage.tfvars"
请勿将 terraform 命令
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'
请告诉我这是否能解释您的担忧。