AWS SNS主题订阅过滤策略配置咨询:基于action与sourceClientName的消息过滤规则
配置AWS SNS订阅过滤策略,实现SQS精准接收指定消息
Hey there! 作为AWS SNS新手,不用慌,这个过滤策略配置其实很直接,我帮你把需求转化成可直接用的配置方案,还会给你一步步的操作指引。
先明确需求对应的过滤逻辑
你需要SQS队列只接收两类消息:
- 所有
action字段值为Exception的消息(不管sourceClientName是A/B/C/D) action为Success且sourceClientName不是D的消息
直接可用的过滤策略JSON
AWS SNS的过滤策略是基于JSON的,下面这个完全符合你的需求:
{ "OR": [ { "action": ["Exception"] }, { "AND": [ { "action": ["Success"] }, { "sourceClientName": { "anything-but": ["D"] } } ] } ] }
简单解释下这个策略:
- 外层用
OR逻辑,只要满足两个分支中的任意一个,消息就会被推送到SQS - 第一个分支直接匹配
action等于Exception的所有消息 - 第二个分支用
AND逻辑,同时满足两个条件:action是Success,且sourceClientName不是D(这里用anything-but操作符来排除指定值)
控制台配置步骤(适合新手)
- 登录AWS管理控制台,找到并进入SNS服务
- 定位到你要配置的主题,点击进入后切换到「订阅」标签页
- 找到关联目标SQS队列的那条订阅,点击右侧的「编辑」按钮
- 在弹出的编辑窗口中,找到「过滤策略」区域,把上面的JSON代码粘贴进去
- 点击「保存更改」就完成啦!
额外的实用提示
- 测试验证:配置完成后,你可以发送几条测试消息来验证:
- ✅
{"action": "Exception", "sourceClientName": "D"}应该能被SQS接收 - ✅
{"action": "Success", "sourceClientName": "A"}应该能被SQS接收 - ❌
{"action": "Success", "sourceClientName": "D"}应该不会被推送
- ✅
- CLI配置方式(如果习惯用命令行):
把下面的命令中的订阅ARN替换成你自己的,直接执行即可:
aws sns set-subscription-attributes \ --subscription-arn "arn:aws:sns:us-east-1:123456789012:your-topic:abc123-xyz456" \ --attribute-name FilterPolicy \ --attribute-value '{"OR":[{"action":["Exception"]},{"AND":[{"action":["Success"]},{"sourceClientName":{"anything-but":["D"]}}]}]}'
- 注意:确保你的消息是标准JSON格式,并且包含
action和sourceClientName字段,否则过滤策略会判定为不匹配,消息不会被推送到SQS。
内容的提问来源于stack exchange,提问作者AmiDeveloper
相关产品推荐
相关产品推荐

