You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CDK(Python)中创建包含两个属性的SNS订阅过滤器

解决AWS CDK中SNS订阅SQS的AND逻辑过滤问题

嘿,我懂你遇到的困扰——单独设置id或者type的过滤规则都能正常工作,但想把两个条件用AND逻辑组合起来就不知道该怎么操作了对吧?其实这事儿比你想的简单,只要把两个过滤规则合并到同一个filter_policy字典里就行!

核心原理

AWS SNS的过滤策略默认就是AND逻辑:当你在filter_policy中定义多个键值对时,SNS会要求消息同时满足所有条件才会推送到订阅的SQS队列。你之前分开创建idMapping和typeMapping是把它们当成了独立的过滤规则,现在只要把它们合并成一个字典,就能实现你要的联合过滤效果。

修正后的代码

class MyStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)
        queue = sqs.Queue(self, "MyQueue")
        snsTopic = sns.Topic(self, "MyTopic", display_name="My Topic")
        
        # 将两个过滤条件合并到同一个filter_policy字典中,自动实现AND逻辑
        filter_policy = {
            "id": sns.SubscriptionFilter(conditions=[{"numeric": [">", 0, "<", 100]}]),
            "type": sns.SubscriptionFilter(conditions=["foo", "bar"])
        }
        
        sub = subs.SqsSubscription(queue, filter_policy=filter_policy)
        snsTopic.add_subscription(sub)

代码说明

  • 我们创建了一个包含id和type两个键的filter_policy字典,每个键对应各自的SubscriptionFilter规则。
  • SNS会自动处理这两个条件的AND关系:只有当消息的id数值在0到100之间,并且type字段是"foo"或"bar"时,才会被推送到你的SQS队列。
  • 如果之后需要调整过滤规则,比如添加新的条件,直接在这个字典里新增键值对就行,SNS会自动把所有条件用AND逻辑组合。

内容的提问来源于stack exchange,提问作者Jay Askren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:02:49