Тело панели мониторинга - это строка, поэтому размещение синтаксиса 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"
}
}
}