AWS SNS订阅event过滤策略失效,如何配置拒绝open事件?
问题解决:SNS订阅过滤策略不生效的修正方案
问题根源
你的过滤策略配置错误地将anything-but规则以JSON字符串形式定义,CloudFormation会将其识别为普通字符串值,而非SNS要求的过滤规则对象,导致过滤逻辑无法被正确解析执行。
修改后的YAML配置
SqsToSnsSubscription: Type: AWS::SNS::Subscription Properties: Endpoint: !GetAtt eventCollectorSQS.Arn Protocol: sqs RawMessageDelivery: true TopicArn: Fn::ImportValue: !Sub '${SNSStackName}-ourapp-eventsns' FilterPolicyScope: MessageBody FilterPolicy: ApplicationKey: - !Sub ${ApplicationKey} event: anything-but: - "open"
关键修改说明
- 过滤规则格式修正:将原来转义的JSON字符串
'{"anything-but": ["open"]}'替换为YAML原生的对象结构,让CloudFormation生成符合SNS规范的过滤策略。 - 保留正确的作用域:
FilterPolicyScope: MessageBody无需修改,该配置指定SNS基于消息体(业务JSON内容)中的字段进行过滤。
额外验证点
确保上游发布到SNS的消息体是原生JSON对象(而非转义后的JSON字符串),因为RawMessageDelivery: true会直接传递原始消息体,只有原生JSON对象才能让SNS正确解析其中的event字段。
内容的提问来源于stack exchange,提问作者crazyTech
相关产品推荐
相关产品推荐

