首页 > 解决方案 > AWS sns 订阅过滤策略限制

问题描述

在我的用例中,我达到了 sns 订阅过滤策略的 150 值限制,如过滤策略中的过滤策略约束中所述。总的来说,我希望有大约 500 到 1500 个值用作我的过滤策略中的包含标准。

似乎每个 sns 订阅也有一个过滤策略的限制。通过 cli 应用第二个过滤策略 json 会set-subscription-attributes覆盖第一个过滤策略 json。最后,根据我对sns subscribe的阅读,每个订阅资源(例如 sqs 队列)似乎限制了一个 sns 主题的订阅。subscribe对同一主题和队列多次使用 cli ,每次都返回相同的订阅 arn。

所以我唯一的选择是每当我达到 150 个值限制时添加更多的 sqs 队列,每个队列都有自己对 sns 主题的订阅——或者提出不同的过滤策略,这在我的用例中会不太精确,并且在我的订阅者应用程序中进行额外过滤以保持低于 150 值限制。

我没有看到任何关于此的 SO 线程。我是否遗漏了什么,或者有人通过 aws cli 或 sdk 找到了绕过 150 值过滤器策略限制的更好方法?

附加背景信息:订阅者应用程序是一项现有的产品服务,可针对新到达的 parquet 数据集实例生成数据质量指标,这些实例包含在企业 s3 数据湖中,并已加入此部门级服务。作为将湖数据集加入此服务的一部分,我们将它们添加到订阅数据湖 SNS 主题的过滤策略中。本主题向订阅者发布数据集属性列表(s3 存储桶、密钥、数据集名称、时间戳等),用于湖数据集实例的所有 put — 跨越 000 个数据集和大量存储桶。我们不控制这个企业级的 SNS 主题,但可以订阅它。目前,我们的订阅者应用程序每天会看到一条消息,每个登录数据集。订阅应用程序在一个自动缩放组中运行,该组根据我们的 sqs 队列中可见的消息数量进行缩放。它具有一些丢弃不合格消息的功能。最近,当我们尝试将服务扩展到湖中的其他数据集时,我们达到了过滤策略限制。我倾向于更改我们的过滤策略以仅包含放入我们部门级 s3 存储桶的消息,然后在应用程序内进行数据集级过滤。必须看看这如何影响自动缩放。然后在应用程序内进行数据集级过滤。必须看看这如何影响自动缩放。然后在应用程序内进行数据集级过滤。必须看看这如何影响自动缩放。

SUBSCRIPTION_ARN=`aws sns --profile myProfile subscribe --topic-arn arn:aws:sns:us-east-1:123456789012:mySNS --protocol sqs --notification-endpoint arn:aws:sqs:us-east-1:999999999999:mySQS --return-subscription-arn` 
aws sns --profile myProfile set-subscription-attributes --subscription-arn $SUBSCRIPTION_ARN --attribute-name FilterPolicy --attribute-value file:///myUser/github/repo/filter_policy1.json

其中 filter_policy1.json 限制为 150 个数据集值并采用以下形式:

{
    "dataset": [
      "datasetname_1",
      "datasetname_5",
      "datasetname_256"
    ],
    "_SUCCESS": [
      "True"
    ]
}

标签: amazon-web-servicesamazon-sns

解决方案


只是暂时关闭它...

当前的:

SNS Topic => SQS Subscriber (150 value limit)

解决方案:我们决定在 SNS Topic 和 SQS 之间插入多个 lambda 订阅者;每个 lambda 运行相同的代码来将订阅的 sns 事件写入我们的 SQS;不是很好,但允许我们的应用程序支持数百个数据集并保持现有的应用程序架构,直到我们需要更具可扩展性的东西

SNS Topic => lambda1 Subscriber (1st 150 datasets) => SQS
SNS Topic => lambda2 Subscriber (2nd 150 datasets) => SQS
...

推荐阅读