terraform - 从 Terraform Map 获取列表的长度
问题描述
我目前在 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)}"
}
但我希望计数不是基于我的 ssm 地图中名称列表的长度,而不是 count=3。我试过这个:
"${length(var.ssm[names])}"
但我得到了错误:
Error: aws_ssm_parameter.parameter_store: resource count can't reference variable: names
谁能指出我解决此错误的正确方向?我不太确定我做错了什么。
解决方案
当前的 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]}"
}
推荐阅读
- python - 如何从 python 中的 Hierarchical Clustering 中形成的集群创建数据集?
- r - 如何将 sapply 应用于使用 match.call 的函数?
- python - Visual Studio Code 支持的 Python 文档字符串格式是什么?
- java - 如何使用 lombok 获取相同的实例
- cypress - salty-/cypress-testrail-reporter 未将结果发布到 TR
- rust - 如果 f32 不是 Eq,为什么会编译?
- c - 如何将 8 字节空指针(包括字符)打印为十六进制
- codenameone - 检测 Codename One 应用程序是否正在运行测试
- python - 传递参数时如何调用保留引号?
- video - FileSystemWatcher 未检测到 mp4 文件