Terraform ресурс с количеством 0 и переменной в зависимости от ресурса - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь создать сегменты s3 в aws с помощью Terraform, во всех средах существует несколько блоков (dev, qa и prod), тогда как большинство блоков существует только в 1 или 2 средах. Я использую счетчик, чтобы определить ресурсы выборочно

Итак, в приведенном ниже коде я создаю сегмент в S3, только если среда является dev или qa с использованием счетчиков и условных выражений. Но когда я запускаю код для среды prod, я получаю Error: module 's3-bucket-example': unknown variable referenced: 'lifecycle_rule_s3_bucket_example'; define it with a 'variable' block

lifecycle_rule для каждого сегмента определяется в соответствующем файле var для каждой среды, например lifecycle_rule_s3_bucket_example определяется в var-file.dev и var-file.qa, но не в var-file.prod, так как сегмент существует в dev и qa. , Но поскольку корзина в prod отсутствует, почему я получаю сообщение об ошибке при определении переменной lifecycle_rule? Я предположил, что, поскольку count = 0 для prod, ни одна из оставшихся переменных не должна иметь значения в модуле.

module "s3-bucket-example" {
  source             = "./modules/s3"
  count              = "${var.aws-account == "dev"|| var.aws-account == "qa" ? 1 :0}"
  bucketname         = "${local.this_env_prefix}-s3-bucket-example"
  versioning-enabled = "true"
  lifecycle_rule     = "${var.lifecycle_rule_s3_bucket_example}"
  aws_account        = "${var.aws-account}"
}

1 Ответ

0 голосов
/ 31 мая 2019

До фактического создания какого-либо ресурса в AWS (или любого другого поставщика в этом отношении) Terraform выполняет проверку, чтобы проверить, все ли переменные и т. Д. Определены.

Таким образом, вероятность возникновения ошибки во время создания ресурса уменьшается.

Думаю, вам также нужно определить переменную для вашей prov env с фиктивным значением ...

...