我们有两种类型的SNS消息:
1.消息属性为空,如下所示:
"MessageAttributes": {}
2.消息属性是这样的:
"MessageAttributes": {
"Generator": {
"Type": "String",
"Value": "some-service"
}
}
我想使用忽略第二种类型但将第一种类型传递给订阅者的过滤器订阅策略。
所以我为政策尝试了这个:
{
"Generator": [
{
"exists": false
}
]
}
我认为这意味着它只会传递不包含Generator
密钥的消息MessageAttributes
但是我现在看到没有消息被传递。
AWS 订阅筛选条件文档似乎支持将此作为解决方案,但它们仅显示检查密钥是否存在的相反方法,因此我不确定它们是否支持检查密钥不存在:https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html#attribute-key-matching
这可能吗?
@David Adams的答案已经过时了。请参阅属性键匹配文档。
使用"exist":false 返回不包含指定属性的传入消息。
现在可以使用策略排除具有特定键的任何消息:
{
"key": [
{
"exists": false
}
]
}
回复较晚,但可能对某人有所帮助。
由于不存在而过滤掉是不可能的。查看 https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html#attribute-key-matching 底部
Note: You cannot use the exists operator to match messages in which an attribute does not exist. Filtering will NOT match any messages if you set [{"exists": false}].
如果不存在,您可以传递一个字符串"null"或类似于生成器属性?