【问题标题】:Terraform for loop用于循环的 Terraform
【发布时间】: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' 结尾后的额外字符 表达式..

一如既往地提前感谢您的帮助。

【问题讨论】:

    标签: amazon-web-services templates terraform amazon-cloudwatch dashboard


    【解决方案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"
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 1970-01-01
      • 2020-11-01
      • 2021-03-11
      • 2021-03-02
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多