Вот так выглядит мой текущий каталог 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
из корневого каталога создается новое репозиторий ecr в us-east-1 (регион Северной Вирджинии).
если я сейчас бегу:
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 будет думать, что больше ничего не нужно уничтожать.
Я надеялся, что состояние 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"