terraform状态会为不同的配置文件保存状态吗?

时间:2019-06-27 19:12:04

标签: terraform terraform-provider-aws

这是我当前的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"

1 个答案:

答案 0 :(得分:0)

其他选项是使用terragrunt,您可以为本地后端设置自定义路径(对任何环境使用不同的配置)

https://github.com/gruntwork-io/terragrunt/issues/399

相关问题