首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Terraform Map中获取列表长度

从Terraform Map中获取列表长度
EN

Stack Overflow用户
提问于 2018-08-28 03:25:30
回答 1查看 4K关注 0票数 1

我目前在一个test.tfvars文件中有这个地图:

代码语言:javascript
复制
ssm = {
    names = ["Terraform-1","Terraform-2","Terraform-3"]
    values = ["tf-1","tf-2","tf-3"]
}

我想做的是:

代码语言:javascript
复制
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。我试过了:

代码语言:javascript
复制
"${length(var.ssm[names])}"

但是我得到了一个错误:

代码语言:javascript
复制
Error: aws_ssm_parameter.parameter_store: resource count can't reference variable: names

有谁能为我指出解决这个错误的正确方向吗?我不太确定我做错了什么。

EN

回答 1

Stack Overflow用户

发布于 2018-09-03 20:03:59

当当前的terraform版本(0.11.x)需要处理嵌套在map中的列表时,它的行为有时会有点奇怪。这可能会在新版本0.12.x中修复,但也许有更好的解决方案……

为什么不像这样重新构建您的地图:

代码语言:javascript
复制
ssm = {
    "Terraform-1" = "tf-1"
    "Terraform-2" = "tf-2"
    "Terraform-3" = "tf-3"
}

您的资源现在将如下所示:

代码语言:javascript
复制
resource "aws_ssm_parameter" "parameter_store" {
  count = "${length(var.ssm)}"
  name  = "${keys(var.ssm)[count.index]}"
  type  = "String"
  value = "${values(var.ssm)[count.index]}"
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52045811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档