AWS SNS筛选策略中Exists运算符对数组字段不生效问题排查
问题排查与解决方案
你的问题出在两个可能的方向:筛选策略的写法隐患或者消息格式不符合要求,以下是具体的排查和解决步骤:
修正筛选策略的写法,避免转义错误
你当前用字符串形式编写FilterPolicy,容易出现JSON转义或解析问题。推荐直接用YAML对象格式定义,CloudFormation会自动处理序列化,更可靠:ResultTopicToAlertSqs: Type: AWS::SNS::Subscription Properties: TopicArn: !Ref ResultTopic Endpoint: !GetAtt AlertsQueue.Arn Protocol: "sqs" RawMessageDelivery: true FilterPolicyScope: MessageBody FilterPolicy: results: - exists: true确保消息体是标准JSON格式
因为你设置了FilterPolicyScope: MessageBody,SNS会解析消息体的JSON结构来应用筛选策略。如果发送的消息体不是合法JSON,或者results字段不是非空数组,都会导致筛选失败。
测试时请发送如下格式的消息:{ "results": ["test-item"] }验证数组字段的存在性判断逻辑
SNS的exists: true对数组字段的判断规则是:字段必须存在,且数组包含至少一个元素(空数组[]会被判定为不符合条件)。确认你发送的消息中results确实是非空数组,而非null或空数组。逐步排查验证
先移除FilterPolicy配置,确认消息能正常从SNS发送到SQS,再添加筛选策略,逐步缩小问题范围。
内容的提问来源于stack exchange,提问作者osynavets
相关产品推荐
相关产品推荐

