使用变量中定义的键对局部地图进行 Terraform 插值

Terraform interpolation of locals map with key defined in a variable

局部地图的 Terraform 插值,键在变量中定义

Objective: 在变量中定义预设大小标签,资源配置使用本地映射中的预设值。


var "define_size" {
  description = "Select either small, medium, large"
  default = "large"
}


locals {

  small = {
    volume_gb = 1
    volume_count = 1
  }

  medium = {
    volume_gb = 20
    volume_count = 5
  }

  large = {
    volume_gb = 500
    volume_count = 10
  }

}


resource "aws_ebs_volume" "example" {
  availability_zone = var.availability_zone
  size              = ??????
}

尝试次数:

如果您想要基于密钥的访问,您应该使 locals 定义与密钥一起使用,例如一个 map:

locals {
  sizes = {
    small = {
      volume_gb = 1
      volume_count = 1
    }
    medium = {
      volume_gb = 20
      volume_count = 5
    }
    large = {
      volume_gb = 500
      volume_count = 10
    }
  }
}

然后使用 local.sizes[var.define_size].volume_gb

访问它

感谢@Luk2302 的回答,我也在看这个。我无法发表评论,所以我创建了另一个答案。 对于我的情况,我从 json 文件中读取了一个列表,然后依赖于环境,它将获得正确的值。

power.json

[
  {
    "name": "a",
    "power": {
      "dev" : 1,
      "sit" : 2,
      "uat" : 3,
      "prod" : 4
    }
  }
]

在tf文件中,我使用如下

locals {
  power = jsondecode(file("power.json"))
}

resource "aws_example" "power" {
  count = length(local.power.*.name)
  power = local.power[count.index].power[var.env]
}

根据输入 var.env,“幂”的值为 1、2、3 或 4