如何创建与嵌套消息属性匹配的SNS过滤策略?

Luc*_*ter 2 amazon-sns

我已经创建了一个SNS主题,并且希望使用与嵌套属性匹配的过滤器策略来订阅它。例如,给出如下消息:

{
  "foo": {
    "bar": "baz"
  },
  "quux": "vorp"
}
Run Code Online (Sandbox Code Playgroud)

我只想匹配的bar属性foo等于的邮件baz

到目前为止,我发现的文档仅提及在顶层指定的匹配属性。我对嵌套属性感兴趣。出于这个问题的目的,让我们假设我不控制消息的结构。

Mic*_*bot 9

订阅过滤器不作用于消息(正文,有效负载)。它们仅对消息属性起作用

消息属性不是复杂的对象……它们的唯一类型是字符串,字符串数组,数字和二进制。如果消息属性包含序列化的对象(例如JSON),则订阅筛选器不旨在支持提取/匹配内部的序列化数据。

  • 最近引入了消息正文(有效负载)过滤器 https://aws.amazon.com/blogs/compute/introducing-payload-based-message-filtering-for-amazon-sns/ (9认同)
  • 谢谢,这是长期以来被接受的答案!我撤回接受只是因为事实发生了变化(AWS 引入了新功能),使得这个答案不再正确。 (2认同)

Ric*_*doS 5

截至 2022 年,可以根据有效负载进行过滤。

这里提到了: https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering.html

过滤示例:

假设您的原始消息如下:

{
  "eventType": "SOME_STRING",
  "otherAttribs": "bla..."
}
Run Code Online (Sandbox Code Playgroud)

那么过滤器可以是这样的:

{
  "eventType": [
    {
      "prefix": "SAMETH"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在 AWS WebConsole 中,可以在 SNS -> 订阅 -> [选择一个] -> 订阅筛选策略中找到它。