Search code examples
jsonamazon-web-servicespowershellamazon-cloudwatchaws-powershell

AWS powershell commandlet (Write-CWDashboard) outputs message 'Should match exactly one schema in oneOf'


I was trying to create AWS cloudwatch dashboard using AWS powershell commandlet Write-CWDashboard. Though the command was successful but it's generating an output message as 'Should match exactly one schema in oneOf'. Complete details are below,

I would like to understand why is it generating that message.

Command:

Write-CWDashboard -DashboardName 'test' -DashboardBody $DashboardBody;

$DashboardBody value in json format:

{ "widgets": [    
    {
        "type": "metric",
        "x": 0,
        "y": 0,
        "width": 10,
        "height": 10,
        "properties": {
            "region": "us-west-2",
            "metrics": [
["AWS/EC2", "CPUUtilization", "InstanceId", "i-04c3216xyz"]
            ],
            "view": "timeSeries",
            "stacked": false,
            "title": "server01 CPU",
            "legend": {
                "position": "right"
            }
        }
    },  
    {
        "type": "metric",
        "x": 0,
        "y": 10,
        "width": 10,
        "height": 10,
        "properties": {
            "region": "us-west-2",
            "metrics": [
["AWS/EBS", "VolumeReadOps", "VolumeId", "vol-0b1ab41abc"],
["AWS/EBS", "VolumeWriteOps", "VolumeId", "vol-0b1ab41abc"]
            ],
            "view": "timeSeries",
            "stacked": false,
            "annotations": {
            },
            "title": "server01 disk01 IOPs",
            "legend": {
                "position": "right"
            }
        }
    }
    ]}

Output:

DataPath                           Message
--------                           -------
/widgets/1/properties/annotations  Should match exactly one schema in oneOf

Solution

  • You get this exception from the annotations property.

    From Dashboard Body Structure and Syntax:

    annotations

    To include an alarm or annotation in the widget, specify an annotations array. For more information about the format, see Dashboard Widget Object: Annotation Properties. Use this parameter only for metric widgets.

    Type: Object

    Required: An alarm annotation is required only when the widget type is metric and metrics is not specified. A horizontal or vertical annotation is not required.

    But, as you can see since you provided metrics you don't need to provide any annotation.

    therefore, just remove the annotations property from the JSON.

    Working code snippet:

    $DashboardBody = @"
    {
      "widgets": [
        {
          "type": "metric",
          "x": 0,
          "y": 0,
          "width": 10,
          "height": 10,
          "properties": {
            "region": "us-west-2",
            "metrics": [
              [
                "AWS/EC2",
                "CPUUtilization",
                "InstanceId",
                "i-04c3216xyz"
              ]
            ],
            "view": "timeSeries",
            "stacked": false,
            "title": "server01 CPU",
            "legend": {
              "position": "right"
            }
          }
        },
        {
          "type": "metric",
          "x": 0,
          "y": 10,
          "width": 10,
          "height": 10,
          "properties": {
            "region": "us-west-2",
            "metrics": [
              [
                "AWS/EBS",
                "VolumeReadOps",
                "VolumeId",
                "vol-0b1ab41abc"
              ],
              [
                "AWS/EBS",
                "VolumeWriteOps",
                "VolumeId",
                "vol-0b1ab41abc"
              ]
            ],
            "view": "timeSeries",
            "stacked": false,
            "title": "server01 disk01 IOPs",
            "legend": {
              "position": "right"
            }
          }
        }
      ]
    }
    "@
    
    
    Write-CWDashboard -DashboardName 'test' -DashboardBody $DashboardBody;