首页 > 解决方案 > 由于来自 Cloudwatch 的表达式字符串,无法更新 AWS CloudFormation

问题描述

我正在尝试使用一个表达式:在我的 CloudFormation 中搜索以制作仪表板。

{ "表达式": "SEARCH('{AWS/ApiGateway,ApiName} MetricName=\"Count\"', 'Sum', 300)", "id": "e1" }

上面的行在创建小部件时直接取自 Cloudwatch 源。这必须针对 CloudFormation 进行修改,因为 CloudFormation 中的仪表板是字符串类型。

我把它改成这样:

{ \"表达式\": \"SEARCH('{AWS/ApiGateway,ApiName} MetricName=\"Count\"', 'Sum', 300)\", \"id\": \"e1\" }

问题是,当我尝试使用此更改更新 CloudFormation 时,它失败了。

我尝试过使用文档,但 AWS 对此类问题没有任何帮助,而且我似乎找不到合适的资源来展示它应该如何完成。

任何帮助都会很棒,谢谢。

-编辑-

这是我的模板的片段:

至于模板,我可以给你片段:

\"properties\": 
{
\"metrics\":
[
{ \"expression\": \"SEARCH('{AWS/ApiGateway,ApiName}   MetricName=\"Count\"', 'Sum', 300)\", \"id\": \"e1\" }
],
\"period\": 300,
\"stat\": \"Average\",
\"region\": \"$${AWS::Region}\"
}

我可以告诉大家,表达本身就是问题所在。如果我要一起删除该表达式并保存/更新我的模板 CloudFormation 将更新并推送,但表达式本身会导致错误,可能是因为格式。

-编辑#2-

所以我一直在努力,得到了一些新信息和一个新错误,但我认为这是向前迈出的一步。

{ \"expression\": \"SEARCH('{AWS/ApiGateway,ApiName} MetricName=\\\"Count\\\"', 'Sum', 300)\", \"id\": \"e1\" }

我工作的一位开发人员给了我对代码的这个更改,认为它可以工作,但出现了这个错误。

The dashboard body is invalid, there are 2 validation errors:
[
{ "dataPath": "/widgets/4/properties/metrics/0", "message": "Should be array" }, 
{ "dataPath": "/widgets/4/properties/metrics/0", "message": "Field \"metrics\" has to be an array of array of strings, with an optional metricRenderer object as last element" } 
]

(服务:AmazonCloudWatch;状态代码:400;错误代码:

标签: amazon-cloudformationamazon-cloudwatch

解决方案


这里有几件事:

  1. metrics是一个数组数组,所以你的表达式应该用[].
  2. 反斜杠MetricName=\"Count\"'也应该被转义,将其更改为:MetricName=\\\"Count\\\"'
  3. 您只需要该地区的一个美元符号,将其更改为\"${AWS::Region}\". 您还需要将仪表板主体包装到一个子块中才能正常工作。

这是一个类似于您需要的完整示例:

{
    "Resources": {
        "ExampleDashboard": {
            "Type": "AWS::CloudWatch::Dashboard",
            "Properties": {
                "DashboardName": "SomeDashboard",
                "DashboardBody": {
                     "Fn::Sub": "{ \"widgets\": [{\"type\": \"metric\", \"x\": 0, \"y\": 0, \"width\": 12, \"height\": 6, \"properties\": { \"metrics\": [ [ { \"expression\": \"SEARCH('{AWS/ApiGateway,ApiName}   MetricName=\\\"Count\\\"', 'Sum', 300)\", \"id\": \"e1\" } ] ], \"region\": \"${AWS::Region}\", \"stat\": \"Average\", \"period\": 300, \"view\": \"timeSeries\", \"title\": \"CPUUtilization\", \"stacked\": false } } ] } "
                 }
            }
        }
    }
}

推荐阅读