состояние Terraform сохраняет состояния для различных файлов конфигурации? - PullRequest
0 голосов
/ 27 июня 2019

Вот так выглядит мой текущий каталог 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"

1 Ответ

0 голосов
/ 28 июня 2019

Другой вариант - использовать terragrunt, вы можете установить собственный путь для локального бэкэнда (используя разные конфигурации для любого env)

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

...