amazon-cloudformation - 由于来自 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;错误代码:
解决方案
这里有几件事:
metrics
是一个数组数组,所以你的表达式应该用[]
.- 反斜杠
MetricName=\"Count\"'
也应该被转义,将其更改为:MetricName=\\\"Count\\\"'
- 您只需要该地区的一个美元符号,将其更改为
\"${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 } } ] } "
}
}
}
}
}
推荐阅读
- sql-server - SQL Server 触发器将插入的事件日期与现有记录日期进行比较
- haskell - 在 monad 中打印
- android - Android + Firebase Auth + REST API:如何正确使用令牌?
- c++ - 为什么空循环更慢?
- jdbc - 最新的 Firebird JDBC 驱动程序有病毒吗?
- vb.net - 加载表单中的 VB .Net 传递值
- google-cloud-platform - Google Colaboratory 与 Google Datalab。它们有何不同?
- javascript - 对具有相同属性的对象进行分组 - javascript
- python - spaCy 分类器:“unicode”对象没有属性“to_array”
- c++ - C++汇编代码分析(用clang编译)