AWS CloudFormation模板YAML格式错误:MetricFilter的FilterPattern行报错求助
AWS CloudFormation YAML格式报错排查结果
核心问题原因
你遇到的格式报错是YAML语法的固有规则导致的:
- YAML解析器会将以
{开头的内容默认识别为**内联字典(对象)**的起始标记,而你配置的FilterPattern值是CloudWatch日志过滤规则,本身就以{开头,未做特殊包裹的情况下会被YAML误认为是对象声明,触发格式解析错误。 - 你原写法中用
\"转义双引号的操作也没必要,反而增加了语法冲突的概率。
修复方案
两种方案任选一种即可:
方案1:用单引号包裹整个过滤规则
单引号在YAML中会将内部内容直接识别为纯字符串,不需要额外转义双引号,修改后代码如下:
FilterPattern: '{($.errorCode="*UnauthorizedOperation") || ($.errorCode="AccessDenied*")}'
方案2:使用YAML字面量块标记
如果过滤规则较长,推荐用|字面量块标记,彻底避免特殊符号冲突:
FilterPattern: | {($.errorCode="*UnauthorizedOperation") || ($.errorCode="AccessDenied*")}
修复后完整模板
AWSTemplateFormatVersion: "2010-09-09" Resources: MySNSTopic: Type: AWS::SNS::Topic Properties: Subscription: - Endpoint: "abcd@abcd.com" Protocol: email snstopic: Type: AWS::Logs::LogGroup DependsOn: MySNSTopic Properties: RetentionInDays: 7 UnauthorizedApiCalls: Type: AWS::Logs::MetricFilter DependsOn: snstopic Properties: LogGroupName: Ref: "snstopic" FilterPattern: '{($.errorCode="*UnauthorizedOperation") || ($.errorCode="AccessDenied*")}' MetricTransformations: - MetricValue: "1" MetricNamespace: "unauthorized-api-calls" MetricName: "LogMetrics"
内容的提问来源于stack exchange,提问作者David Perera
相关产品推荐
相关产品推荐

