Я пытаюсь создать корзины s3 на aws с помощью Terraform, несколько корзин существуют во всех средах (dev, qa и prod), тогда как большинство корзин существует только в 1 или 2 средах. Я использую count для выборочного определения ресурсов
Итак, в приведенном ниже коде я создаю ведро в 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. Но поскольку ведро не существует в продукте, почему я получаю сообщение об ошибке при определении переменной 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}"
}
Прежде чем фактически создать какой-либо ресурс в AWS (или любом другом поставщике, если на то пошло), Terraform выполняет проверку, чтобы проверить, определены ли все переменные и т. д.
Таким образом снижается вероятность возникновения ошибки при создании ресурса.
Думаю, вам нужно также определить переменную для вашего prod env с фиктивным значением...
Нет, я так не думаю, к сожалению.
Сейчас я определяю фиктивную переменную, но хотел знать, можно ли этого избежать.