настройка виджета для панели управления CloudWatch. Получение ошибки Тело панели недействительно, имеется 1 ошибка валидации

Я не могу указать имя службы в виджете.

Получение следующей ошибки с данным кодом: тело панели недействительно, есть 1 ошибка проверки: [{"dataPath": "/ widgets / 0 / properties / metrics / 0", "message": "НЕ должно иметь более 3 элемента "}] (Сервис: 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 } }]}"

      }
    }



Ответы (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"
                }
            }
        }
person Dejan Peretin    schedule 16.06.2019
comment
Я не могу изменить формат с JSON на YAML, поскольку JSON - это стандарт, который я использую в моей работе во всех проектах. Вы знаете, как добавить его в JSON? - person Esha Sherry; 16.06.2019

Вы можете определить свои информационные панели CloudWatch в JSON в своих шаблонах yaml следующим образом:

  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
            }
        }
    ]
}
'
person John Shaw    schedule 16.09.2020