首页 文章

从Terraform Map获取列表长度

提问于
浏览
0

我目前在test.tfvars文件中有这个 Map :

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)}"
}

但是,我希望计数基于我的ssm Map 中名称列表的长度,而不是count = 3 . 我试过这个:

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

但是我收到了错误:

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

任何人都可以指出我正确的方向解决这个错误?我不太确定我做错了什么 .

1 回答

  • 1

    当需要处理嵌套在 Map 中的列表时,当前的terraform版本(0.11.x)有时会有点奇怪 . 这可以通过新版本0.12.x修复,但也许有更好的解决方案......

    为什么不像这样重构 Map :

    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)}"
    }
    

相关问题