【问题标题】:Terraform resource with count 0 and a variable depending on the resource计数为 0 的 Terraform 资源和取决于资源的变量
【发布时间】:2019-10-16 12:33:13
【问题描述】:

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

所以在下面的代码中,只有当环境是 dev 或 qa 使用计数和条件时,我才会在 S3 中创建一个存储桶。但是当我运行 prod 环境的代码时,我得到了Error: module 's3-bucket-example': unknown variable referenced: 'lifecycle_rule_s3_bucket_example'; define it with a 'variable' block

每个存储桶的生命周期规则在每个环境的相应 var 文件中定义,例如 lifecycle_rule_s3_bucket_example 在 var-file.dev 和 var-file.qa 中定义,但不在 var-file.prod 中定义,因为存储桶存在于 dev 和 qa .但是由于产品中不存在存储桶,为什么我会收到定义生命周期规则变量的错误?我的猜测是,由于 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}"
}

【问题讨论】:

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


    【解决方案1】:

    在 AWS(或任何其他提供商)中实际创建任何资源之前,Terraform 会执行验证以检查是否定义了所有变量等。

    这样可以减少资源创建过程中出错的机会。

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

    【讨论】:

    • 我现在正在定义一个虚拟变量,但想知道是否可以避免。
    • 不,很遗憾,我不这么认为。
    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2019-11-20
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多