如何在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
相关产品推荐
相关产品推荐

