我正在尝试使用Terraform在亚马逊网络服务上创建s3存储桶,很少有存储桶存在于所有环境(开发、质量和生产)中,而大多数存储桶只存在于1到2个环境中。我使用count有选择地定义资源
因此,在下面的代码中,只有当环境是dev或qa时,我才使用count和conditionals在S3中创建存储桶。但是当我运行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中定义,因为存储桶存在于开发和qa中。但是既然存储桶在prod中不存在,为什么我在定义lifecycle_rule变量时会出现错误?我的猜测是,由于prod的计数=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}"
}
发布于 2019-05-31 05:35:08
在AWS (或任何其他提供商)中实际创建任何资源之前,Terraform会执行验证,以检查是否定义了所有变量等。
这样就减少了在资源创建过程中出错的机会。
我猜你还得为你的prod env定义一个虚值的变量……
https://stackoverflow.com/questions/56385252
复制相似问题