DynamoDB 主表和 child 表作为 Amazon SNS 中的发布者/订阅者

DynamoDB master and child tables as Publisher/ Subscriber in Amazon SNS

我有两个 DynamoDB table,其中一个 table 有发布者记录(主 table),另一个 table 有订阅者记录(child table).

我想构建一个系统,发布者端的更改会导致所有订阅者都收到通知。我查看了AWS SNS的文档,订阅者可以是Lambda或SQS等

有什么方法可以让我的 child 记录成为 DynamoDB 中的订阅者?

因此,每当发布者记录发生变化时,所有 child 记录都应立即得到通知。

扩展 luk2302 完全有效的评论:

这里有一些误解

  • DynamoDB 和 SNS 之间没有直接集成,因此订阅 table 中的单个项目不起作用
  • 您无法在 SNS 之外管理 SNS 的订阅者,他们需要在 SNS 内订阅

实现 Publisher/Subscriber 模式的最简单方法确实是 SNS,但您不能只写入 DynamoDB table 并集成它。 如果你想要一个基于 DynamoDB 的解决方案,我可能会这样开始。

会有两个table:

  • Publishers 启用了 PK 和 SK 的复合主键以及 DynamoDB 流
  • 订阅者 具有 PK 和 SK 的复合主键

还有一个名为 StreamProcessor 的 Lambda 函数,它以 Publisher table 的流作为输入。

出版商看起来像这样

PK SK Message
P#<id> M#<id0> Some Message
P#<id> M#<id1> Some Message
P#<id> M#<id2> Some Message
P#<id> M#<id3> Some Message

P#<id> 其中 <id> 是发布者的 ID,M#<id0> 是消息 ID。

订阅者 看起来像这样:

PK SK Contact
P#<id> S#<id0> test1@mail.com
P#<id> S#<id1> test2@mail.com
P#<id> S#<id2> test3@mail.com
P#<id> S#<id3> test4@mail.com

P#<id> 其中 <id> 是发布者的 ID,S#<id0> 是订阅 ID。

现在只要发布者 table 发生变化(例如,新消息被添加到发布者),StreamProcessor Lambda 就会被调用。 StreamProcessor 然后可以做这样的事情:

  1. 从更新记录中提取发布者 ID
  2. 使用 PK=P#<id> 查询订阅者 table 以获取订阅者列表
  3. 对于每个结果:
  4. 确定联系方式
  5. 向订阅者发送消息