CloudFormation部署AWS Dashboard报InvalidParameterInput错误如何解决
AWS CloudFormation Dashboard部署InvalidParameterInput错误排查
核心问题根因
报错指向DashboardBody字段不是合法JSON,结合你提供的代码片段,可按以下优先级排查问题:
- 代码片段中JSON结构未闭合:当前代码只写了
widgets数组的第一个元素,缺少数组闭合符]和整个JSON对象的闭合符},如果实际部署的代码也遗漏这两个符号,会直接解析失败。 - 存在多余尾随逗号:如果当前是唯一的widget,你代码中widget结束的
}后面额外加了逗号,JSON规范不允许数组最后一个元素后带尾随逗号,也会触发语法错误。 - 变量替换异常:检查模板中是否已定义
${Env}和${AwsRegion}两个参数/变量,若变量不存在、值为空,或者值包含双引号等特殊字符,会破坏JSON结构。 - 转义字符冲突:如果后续新增的widget包含单引号,在
!Sub包裹的内容中需要对单引号做转义处理。
正确写法参考
推荐使用YAML多行字符串符|优化格式可读性,避免换行符导致的JSON解析问题:
AWSDashboard: Type: AWS::CloudWatch::Dashboard Properties: DashboardName: !Sub "awsdashboard" DashboardBody: !Sub | { "widgets": [ { "height": 6, "width": 6, "y": 0, "x": 9, "type": "metric", "properties": { "view": "timeSeries", "stacked": false, "metrics": [ [ "AWS/S3", "BucketSizeBytes", "StorageType", "StandardStorage", "BucketName", "abc-${Env}-abc-${AwsRegion}", { "period": 86400 } ], [ ".", "NumberOfObjects", ".", "AllStorageTypes", ".", ".", { "period": 86400 } ] ], "region": "${AwsRegion}", "title": "abc-s3-bktsz-numrofobjects", "period": 300 } } ] }
验证方法
部署前可先把变量替换后的DashboardBody内容复制到本地JSON校验工具检查语法,确认无错误后再提交部署。
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

