用于循环的 Terraform
Posted
技术标签:
【中文标题】用于循环的 Terraform【英文标题】:Terraform for loop 【发布时间】:2020-12-24 15:09:18 【问题描述】:我一直在学习 terraform,并且一直在玩仪表板。
我有以下生成仪表板的文件。
resource "aws_cloudwatch_dashboard" "main"
dashboard_name = "sample_dashboard"
dashboard_body = <<EOF
"widgets": [
$templatefile("$path.module/cpu.tmpl", ids = aws_instance.web[*].id ),
$templatefile("$path.module/network.tmpl", ids = aws_instance.web[*].id )
]
EOF
这是cpu模板文件。
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties":
"metrics": $jsonencode([for id in ids : ["AWS/EC2","CPUUtilization","InstanceId", "$id"]]),
"period": 300,
"stat": "Average",
"region": "us-east-1",
"title": "EC2 Instance CPU"
这里有网络模板文件。
"type": "metric",
"x": 12,
"y": 0,
"width": 12,
"height": 6,
"properties":
"metrics": $jsonencode([for id in ids :
["AWS/EC2", "NetworkIn", "InstanceId", "$id"]
]),
"period": 300,
"stat": "Average",
"region": "us-east-1",
"title": "EC2 Instance Network"
一切都按预期工作,我得到以下仪表板。
我遇到的问题是尝试在 for 循环中添加另一个指标时出现错误。
"type": "metric",
"x": 12,
"y": 0,
"width": 12,
"height": 6,
"properties":
"metrics": $jsonencode([for id in ids :
["AWS/EC2", "NetworkIn", "InstanceId", "$id"],
["AWS/EC2", "NetworkOut", "InstanceId", "$id"]
]),
"period": 300,
"stat": "Average",
"region": "us-east-1",
"title": "EC2 Instance Network"
我收到以下错误。
调用函数“模板文件”失败:./network.tmpl:9,70-71: 'for' 表达式无效; 'for' 结尾后的额外字符 表达式..
一如既往地提前感谢您的帮助。
【问题讨论】:
【参考方案1】:解决该问题的一种方法是concat 您的指标:
"type": "metric",
"x": 12,
"y": 0,
"width": 12,
"height": 6,
"properties":
"metrics": $jsonencode(concat([for id in ids :
["AWS/EC2", "NetworkIn", "InstanceId", "$id"]
], [for id in ids :
["AWS/EC2", "NetworkOut", "InstanceId", "$id"]
])),
"period": 300,
"stat": "Average",
"region": "us-east-1",
"title": "EC2 Instance Network"
【讨论】:
以上是关于用于循环的 Terraform的主要内容,如果未能解决你的问题,请参考以下文章