这是我当前的Terraform目录的外观,要部署ECR回购。
├── configs
│ ├── qa-ohio.tfvars
│ ├── qa-ohio.tfvars.template
│ ├── qa-virginia.tfvars
│ └── qa-virginia.tfvars.template
├── ecr.tf
├── provider.tf
└── vars.tf
如果我运行:
terraform apply --var-file=configs/qa-virginia.tfvars
从根目录中,在US-EAST-1(N. Virginia地区(中创建了一个新的ECR回购。如果我现在运行:
terraform apply --var-file=configs/qa-ohio.tfvars
从根目录中,在US-EAST-2(俄亥俄州(中创建了一个新的ECR回购。到目前为止还不错。
我的问题现在出现了,因为Terraform.tfstate现在被第二个命令覆盖。这意味着如果我运行:
terraform destroy --var-file=configs/qa-ohio.tfvars
它将在ECR中销毁仓库(并为Terraform.tfstate清空(,但是如果我运行:
terraform destroy --var-file=configs/qa-virginia.tfvars
什么都不会发生,因为以前的命令已经从Terraform中删除了所有内容。我希望Terraform状态足够聪明,可以知道,如果我们使用不同的环境变量,那么它应该保持不同的状态,情况似乎并非如此。我应该如何处理?
这就是我的文件的样子:
ecr.tf:
resource "aws_ecr_repository" "ecr" {
name = "web-silver"
}
提供者.tf:
provider "aws" {
access_key = "${var.AWS_ACCESS_KEY}"
secret_key = "${var.AWS_SECRET_KEY}"
region = "${var.REGION}"
}
vars.tf:
variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}
variable "REGION" {}
qa-virginia.tfvars
AWS_ACCESS_KEY = "hidden-for-security-purposes"
AWS_SECRET_KEY = "hidden-for-security-purposes"
REGION = "us-east-1"
qa-ohio.tfvars
AWS_ACCESS_KEY = "hidden-for-security-purposes"
AWS_SECRET_KEY = "hidden-for-security-purposes"
REGION = "us-east-2"
其他选项是使用Terragrunt,您可以为本地后端设置自定义路径(使用任何Env的不同配置(
https://github.com/gruntwork-io/terragrunt/issues/399