计数为 0 的 Terraform 资源和一个取决于资源的变量

Terraform resource with count 0 and a variable depending on the resource

我正在尝试使用 Terraform 在 aws 上创建 s3 存储桶,所有环境(开发、qa 和生产)中都存在很少的存储桶,而大多数存储桶仅存在于 1 或 2 个环境中。我正在使用计数来有选择地定义资源

所以在下面的代码中,仅当环境是开发或质量保证时,我才使用计数和条件在 S3 中创建存储桶。但是当我 运行 生产环境的代码时,我得到 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 因为 bucket 存在于 dev 和 qa 中。但是由于产品中不存在存储桶,为什么我会收到定义 lifecycle_rule 变量的错误?我的猜测是,由于产品的计数 = 0,因此剩余变量的 none 在模块中应该很重要。

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 会执行验证以检查是否定义了所有变量等。

这样可以减少 运行 在资源创建过程中出错的几率。

我猜你必须为你的产品环境定义变量以及一个虚拟值...