SNS 我应该使用每个集成的订阅 type/endpoint 还是每个客户的订阅?

SNS Should I use subscriptions per integration type/endpoint or Subscriptions per Client?

有关如何在 SNS 中构建订阅的最佳做法是什么。在我当前的项目中,我们正在处理 运行 长的文件作业,这可能需要几分钟的时间来处理,并且我们有一个可选的通知,客户可以在他们的作业完成时收到。此回调通知可以是不同的集成格式,例如 HTTP Post、消息到 SNS 主题以及将来更多。

最初我打算对每个客户进行订阅,但后来我选择对每个集成进行订阅。那就是我有一个 callbackType 类型的消息属性,它可以是 HTTPSNS。如果 callbackType=HTTP 应该有另一个名为 httpUrl 的属性,如果是 callbackType=SNS 则应该有一个 topicArn。然后在我的队列中,我有 2 个不同的 Lambda 订阅,每个 callbackType 将进行实际的回调。

一方面,这很棒,因为我不需要为每个客户创建新的订阅,并且可以重用重试逻辑。但另一方面,限制不是针对每个客户,而是针对每个集成,这意味着客户并不像他们应该的那样孤立。此外,我们至少有一个客户希望我们将此消息转发到他们的 SNS 主题,因此他们需要授予对我们 Lambda 函数的 role 的访问权限,据我所知,另一位客户可能必须再次为理想情况下相同的角色。

这是正确的方法吗?或者我应该将一个订阅映射到一个客户,还是将一个订阅映射到多个客户?我不需要 SNS 的订阅取消订阅功能我对这种方法可能遗漏的任何权衡更感兴趣。

对于应用程序集成,我会考虑使用 Amazon EventBridge 而不是 Amazon SNS。

创建一个custom event bus with two event rules that are listening for custom events。一种用于带有回调类型 SNS 的消息,一种用于 HTTP,两者都按照您的描述触发各自的 Lambda 函数。

对于可以从 AWS 服务或其他 AWS 账户接收的事件的速率没有限制。如果您将自定义事件发送到您的事件总线,则 PutEvents API quotas 适用。