Terraform中如何展开CloudWatch Dashboard指标的嵌套列表
解决Terraform中CloudWatch Dashboard Metrics平铺问题
你可以用Terraform的flatten函数直接打平嵌套的列表结构,具体修改如下:
原代码中metrics部分的循环会生成嵌套列表,只需要把整个循环结果用flatten()包裹,就能将所有子列表的元素平铺到顶层:
resource "aws_cloudwatch_dashboard" "a_dashboard" { dashboard_name = "my_dashboard" dashboard_body = jsonencode({ widgets = [ { "height": 6, "width": 24, "y": 18, "x": 0, "type": "metric", "properties": { # 用flatten打平循环生成的嵌套列表 metrics = flatten([ for i, name in var.list_names : [ { "expression": name, "label": i, "id": i }, ["abcd", {"id": i}] ] ]) } } ] }) }
原理说明
- 原
for循环会为list_names中的每个元素生成一个包含2个元素的子列表,最终得到[[元素1,元素2], [元素3,元素4]]的嵌套结构 flatten函数会遍历嵌套列表,将所有层级的元素提取出来合并成一个单层列表,正好符合你需要的[元素1,元素2,元素3,元素4]结构
另外注意修正代码里的两个小问题:
- 变量引用要写
var.list_names而非"$list_names" ["abcd", "id":i]的语法不符合JSON规范,调整为["abcd", {"id": i}](如果是CloudWatch指标的维度格式,可根据实际需求调整,但核心平铺逻辑不受影响)
内容的提问来源于stack exchange,提问作者JennyToy
相关产品推荐
相关产品推荐

