如何根据DynamoDB中存储的日期发送AWS SNS移动SMS消息

时间:2019-03-04 14:30:08

标签: amazon-web-services aws-lambda amazon-dynamodb aws-sdk amazon-sns

我的应用程序中有一个特定的用例,为此我必须构建一个预约系统。它将约会详细信息保存到DynamoDB表中,该表将包含有关约会日期和用户手机号码的信息。系统应在约会日期的前一天向用户发送提醒短信提醒。这也是DB表中的状态属性,当约会日期到来时,该属性应更改为“ TODAY”。

我应该如何构建这个系统,以成功实现这些用例。使该过程自动化的体系结构方法应该是什么?

2 个答案:

答案 0 :(得分:2)

解决此问题的一种可能方法是让Lambda在using CloudWatch cron event triggerscans DynamoDB表的计时器queries上运行,以获取具有适用于SMS警报的日期的值,然后使用SNS publish to SMS相应地发送警报(请注意,SDK的链接适用于javascript,但其他语言也支持这些功能)

答案 1 :(得分:1)

您可以采用以下方法解决用例

  1. 数据库架构
| pk        |    sk      |     notifyOn    |  notificationStatus | 
| user1     | uuid1234   |     12-5-3019   |  Pending            | some other metadata
| user1     | uuid2345   |     12-5-2018   |  done               | some other metadata
| user2     | uuid2645   |     12-5-2028   |  Pending               | some other metadata
...

There is a GSI created with notifyOn as primary Key and sk as secondary Key

对于通知部分,您可以设置触发lambda功能的cloudwatch警报。在lambda函数中,您可以列出应立即通知的所有用户,并将通知发送给所有用户。

根据您的用例和规模,您可以进行进一步的优化,例如

  1. 与其让一个lambda函数发送所有通知,不如将sk放在另一个lambda函数提取并发送通知的sqs中。这样可以解决诸如

    a。限制dyanmodb表上的写入。

    b。限制您可能用于发送通知的其他资源。

    c。由于lambda执行时间的上限为15分钟,因此在发送过多通知时可能会遇到问题。