Amazon web services 如何根据DynamoDB中存储的日期发送AWS SNS移动短信

Amazon web services 如何根据DynamoDB中存储的日期发送AWS SNS移动短信,amazon-web-services,aws-lambda,amazon-dynamodb,aws-sdk,amazon-sns,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Aws Sdk,Amazon Sns,我的应用程序中有一个特定的用例,为此我必须构建一个预约系统。它会将预约详情保存到DynamoDB表中,该表将包含预约日期和用户手机号码的信息。系统应在预约日期前一天向用户发送提醒短信提醒。DB表中还有一个status属性,当约会日期到达时,该属性应更改为“今日” 我应该如何构建这个系统,以成功地实现这些用例。自动化此过程的体系结构方法应该是什么?实现此过程的一种可能方法是在计时器上运行Lambda,或在DynamoDB表中运行具有适用于SMS警报的日期的值,然后使用(请注意,指向SDK的链接是针

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


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

实现此过程的一种可能方法是在计时器上运行Lambda,或在DynamoDB表中运行具有适用于SMS警报的日期的值,然后使用(请注意,指向SDK的链接是针对javascript的,但其他语言也支持这些函数)

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

  • 数据库模式
  • 对于通知部分,您可以设置触发lambda函数的cloudwatch警报。在lambda函数中,您可以列出今天应通知的所有用户,并向所有用户发送通知

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

  • 与其让一个lambda函数发送所有通知,不如将sk放在一些sq中,由另一个lambda函数拾取并发送通知

    a、 限制dyanmodb表上的写入

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

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


  • 仅供参考,除非您发送数百万条通知,否则您将永远不会达到15分钟的上限。我是否应该使用lambda直接访问dynamoDB表,使用IAM?正如这所建议的。但是有没有办法优化扫描操作?因为必须检查多个属性,以确保记录符合SNS通知的条件。1.存在问题e约会日期的剩余天数。2.约会记录的状态属性不等于已取消。是的,您应该使用具有正确IAM权限的Lambda调用DynamoDB scan(您可以通过Lambda控制台轻松设置)。在这里使用scan是一个很好的选择,使用多个筛选器扫描(剩余一天,状态属性).Scan的效率不如query,但在您的场景中,您必须进行扫描,除非您将数据库设置为“最好的祝愿”,并具有可以查询的“notifyOn”索引(query where notifyOn=todaysDate&&status!=已取消)我对DB模式有一定的灵活性。那么有没有一种可能的方法可以围绕这些属性来构造DB,从而导致查询操作而不是扫描?因为表将包含约会,因此表大小将日复一日地增长。每天对表执行扫描将浪费大量的资源从长远来看,它将不必要地扫描已经通过的约会(其状态==完成)。@RohanMehto您检查了我的答案吗?您将不必在那里使用扫描。是的,确切地说,如果您对模式具有灵活性,然后按照“最好的祝愿”的建议使用查询,它将更加高效
    | 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