【问题标题】:setting the widget for cloudwatch dashboard. Getting the error "The dashboard body is invalid, there are 1 validation errors"为 cloudwatch 仪表板设置小部件。收到错误“仪表板正文无效,有 1 个验证错误”
【发布时间】:2019-10-30 03:36:09
【问题描述】:

我无法在小部件中引用服务名称。

使用给定代码出现以下错误: 仪表板正文无效,有 1 个验证错误: [ { "dataPath": "/widgets/0/properties/metrics/0", "message": "Should NOT have more than 3 items" } ] (服务:AmazonCloudWatch ; 状态码: 400; 错误码: InvalidParameterInput

"CloudwatchDashboard": {
      "Type": "AWS::CloudWatch::Dashboard",
      "Properties": {

"{ \"widgets\":
[{ \"type\":\"metric\", 
\"x\":0, 
\"y\":0, 
\"width\":12, 
\"height\":6, 
\"properties\":
{ \"metrics\":
[[ \"AWS/ECS\", \"CPUUtilization\", \"ServiceName\",
{ \"Fn::Sub\": [ \"${Service}\", { \"Service\": {\"Ref\" : \"AWS::StackName\" }} ]}]], 
\"region\": \"us-east-1\", 
\"stat\":\"Average\",
\"period\": 300, 
\"view\": \"timeSeries\", 
\"title\":\"CPUUtilization\", 
\"stacked\": false } }]}"

      }
    }

【问题讨论】:

    标签: json amazon-web-services amazon-cloudformation amazon-cloudwatch amazon-cloudwatch-metrics


    【解决方案1】:

    您可以在 yaml 模板中以 JSON 格式定义 CloudWatch 仪表板,如下所示:

      ExampleDashboard:
        Type: AWS::CloudWatch::Dashboard
        Properties: 
          DashboardName: 'SomeDashboard'
          DashboardBody: !Sub '
    {
        "widgets": [
            {
                "type": "metric",
                "x": 0,
                "y": 0,
                "width": 12,
                "height": 6,
                "properties": {
                    "metrics": [
                        [ "AWS/ECS", "CPUUtilization", "ServiceName", "${AWS::StackName}"]
                    ],
                    "region": "us-east-1",
                    "stat": "Average",
                    "period": 300,
                    "view": "timeSeries",
                    "title": "CPUUtilization",
                    "stacked": false
                }
            }
        ]
    }
    '
    

    【讨论】:

      【解决方案2】:

      仪表板正文是一个字符串,因此将Sub 语法放在该字符串中会使其成为仪表板定义的一部分,从而使其无效。

      我建议切换到 yaml 语法。这将使您的仪表板定义更清晰,您可以像这样使用Sub

      ExampleDashboard:
          Type: AWS::CloudWatch::Dashboard
          Properties: 
              DashboardName: 'SomeDashboard'
              DashboardBody: !Sub |
                {
                    "widgets": [
                        {
                            "type": "metric",
                            "x": 0,
                            "y": 0,
                            "width": 12,
                            "height": 6,
                            "properties": {
                                "metrics": [
                                    [ "AWS/ECS", "CPUUtilization", "ServiceName", "${AWS::StackName}"]
                                ],
                                "region": "us-east-1",
                                "stat": "Average",
                                "period": 300,
                                "view": "timeSeries",
                                "title": "CPUUtilization",
                                "stacked": false
                            }
                        }
                    ]
                }
      

      在 json 中也是一样的:

      "ExampleDashboard": {
                  "Type": "AWS::CloudWatch::Dashboard",
                  "Properties": {
                      "DashboardName": "SomeDashboard",
                      "DashboardBody": {
                          "Fn::Sub": "{\n    \"widgets\": [\n        {\n            \"type\": \"metric\",\n            \"x\": 0,\n            \"y\": 0,\n            \"width\": 12,\n            \"height\": 6,\n            \"properties\": {\n                \"metrics\": [\n                    [ \"AWS/ECS\", \"CPUUtilization\", \"ServiceName\", \"${AWS::StackName}\"]\n                ],\n                \"region\": \"us-east-1\",\n                \"stat\": \"Average\",\n                \"period\": 300,\n                \"view\": \"timeSeries\",\n                \"title\": \"CPUUtilization\",\n                \"stacked\": false\n            }\n        }\n    ]\n}\n"
                      }
                  }
              }
      

      【讨论】:

      • 我无法将格式从 JSON 更改为 YAML,因为 JSON 是我在所有项目中使用的标准。你知道如何在 JSON 中将其子化吗?
      猜你喜欢
      • 2021-07-07
      • 2013-02-10
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2017-07-30
      相关资源
      最近更新 更多