我正在尝试使用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}"
}
答案 0 :(得分:0)
Terraform在实际上在AWS(或与此有关的任何其他提供者)中创建任何资源之前,将执行验证以检查是否定义了所有变量。
这样,减少了在资源创建过程中遇到错误的机会。
猜想您还必须为产品环境定义一个变量,并带有一个虚拟值...