SNS向SQS订阅传递消息时按特定事件过滤的问题求助
问题排查与解决方案
核心问题:过滤策略字段路径错误
你当前的过滤策略使用顶层Message字段作为匹配键,但S3发送到SNS的消息体是嵌套结构,事件类型实际存在于Records[*].eventName字段中——该字段值是ObjectCreated:Put、ObjectRemoved:Delete这类完整事件名,而非单纯的ObjectCreated字符串,这是过滤失效的直接原因。
正确的过滤策略配置
ObjectCreated队列的过滤策略(消息体范围)
{ "Records": [ { "eventName": [{"prefix": "ObjectCreated:"}] } ] }
ObjectRemoved队列的过滤策略(消息体范围)
{ "Records": [ { "eventName": [{"prefix": "ObjectRemoved:"}] } ] }
关键配置验证点
- 确认SQS订阅SNS Topic时,过滤范围选择“消息体”(我们匹配的是消息体内部的嵌套字段)。
- 检查JSON语法:确保策略格式无语法错误,比如括号、逗号是否正确闭合。
- 手动测试:上传文件到S3验证ObjectCreated队列是否收消息,删除文件验证ObjectRemoved队列是否收消息。
补充说明
SNS消息体过滤支持prefix(前缀匹配)、suffix(后缀匹配)、equals(精确匹配)等操作符,这里用prefix是因为ObjectCreated类事件包含Put、Post、Copy等细分类型,前缀匹配可以覆盖所有同类别事件。
内容的提问来源于stack exchange,提问作者Kiyst
相关产品推荐
相关产品推荐

