计数0和相关变量的Terraform资源

时间:2019-05-30 20:32:45

标签: amazon-web-services amazon-s3 terraform terraform-provider-aws

我正在尝试使用Terraform在aws上创建s3存储桶,在所有环境(dev,qa和prod)中都存在很少的存储桶,而大多数存储桶仅在1或2个环境中存在。我正在使用count选择性地定义资源

因此,在下面的代码中,仅当环境为使用计数和条件的dev或qa时,才在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中没有定义,因为存储桶存在于dev中和qa。但是由于存储桶在prod中不存在,为什么我得到定义lifecycle_rule变量的错误?我的猜测是,由于prod的count = 0,因此其余变量在模块中都不重要。

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 :(得分:0)

Terraform在实际上在AWS(或与此有关的任何其他提供者)中创建任何资源之前,将执行验证以检查是否定义了所有变量。

这样,减少了在资源创建过程中遇到错误的机会。

猜想您还必须为产品环境定义一个变量,并带有一个虚拟值...