这是我当前的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(弗吉尼亚北部地区)中创建一个新的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.tfstate中删除了所有内容,因此terraform会认为没有其他要破坏的东西。 我希望地形状态足够聪明,以至于知道如果我们使用不同的环境变量,那么它应该保持不同的状态,似乎并非如此。 我该如何处理?
这是我的文件的样子:
ecr.tf:
resource "aws_ecr_repository" "ecr" {
name = "web-silver"
}
provider.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"
答案 0 :(得分:0)
其他选项是使用terragrunt,您可以为本地后端设置自定义路径(对任何环境使用不同的配置)