从Terraform地图获取列表的长度

时间:2018-08-27 19:25:30

标签: terraform terraform-provider-aws

我目前在test.tfvars文件中有此地图:

ssm = {
    names = ["Terraform-1","Terraform-2","Terraform-3"]
    values = ["tf-1","tf-2","tf-3"]
}

我想做的是以下事情:

resource "aws_ssm_parameter" "parameter_store" {
  count = 3
  name = "$${element(var.ssm[names],count.index)}"
  type = "String"
  value = "$${element(var.ssm[values],count.index)}"
}

但是我希望计数不是基于count = 3,而是基于ssm映射中名称列表的长度。我已经尝试过了:

"${length(var.ssm[names])}"

但是我得到了错误:

Error: aws_ssm_parameter.parameter_store: resource count can't reference variable: names

有人能指出解决这个错误的正确方向吗?我不太确定自己在做什么错。

1 个答案:

答案 0 :(得分:1)

当前的Terraform版本(0.11.x)在需要处理嵌套在地图中的列表时,有时表现有些奇怪。新版本0.12.x可能会解决此问题,但也许有更好的解决方案...

为什么不这样调整地图结构?

ssm = {
    "Terraform-1" = "tf-1"
    "Terraform-2" = "tf-2"
    "Terraform-3" = "tf-3"
}

您的资源现在看起来像这样:

resource "aws_ssm_parameter" "parameter_store" {
  count = "${length(var.ssm)}"
  name  = "${keys(var.ssm, count.index)}"
  type  = "String"
  value = "${values(var.ssm, count.index)}"
}
相关问题