使用aws sns和lambda发送定期通知

时间:2017-05-24 12:29:19

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

我有以下用例场景,我正在考虑aws服务,看看我如何能够提出可扩展的解决方案。在此先感谢您的帮助!

方案: 用户可以使用他们的电子邮件和电话注册一个应用程序(名为'Let's Remind'或其他名称)。 该应用程序做一件事是向用户发送电子邮件和短信警报。 用户可以创建他想要提醒的n个任务。例如,他可以设置一个 每月提醒支付卡会费。目前,n的值为每个用户5到10。 通知是灵活的,意味着它可以是每日,每周,每月,每两周一次。用户也可以 指定通知的开始日期。结束日期是事件到期的日期(例如 卡付款到期的那一天)。此日期过期后,通知将变为非活动状态 本月。 对于每周,每日,每两周一次的通知,一旦事件日期通过,通知将被删除。 这些不是经常性的。 对于每月经常性事件,如公寓租金支付等,通知本身不是 删除但在事件截止日期后呈现为非活动状态。一旦下一个事件周期(通常是下一个) 付款用例的月结算周期开始,通知恢复生命并开始全部 再次。 使用可以随时删除任何事件。如果删除了某个事件,则会显示该事件的通知 也将被删除。

首先,我希望用例很明确。现在这里是关于解决这个用例的想法 -

1)使用SNS,因为我需要发送电子邮件和短信。 SES仅支持电子邮件。 2)当用户注册应用程序时,创建2个订阅(一个用于他的电子邮件,一个用于他的短信端点),还为用户创建一个主题(可能是动态生成的随机用户标识) 3)一旦用户创建事件(例如,每月公寓租赁的提醒),将事件数据(例如userid,startdate,duedate,frequency,isactive)存储在dynamodb表中。 4)创建一个lambda函数,当一个条目被写入dynamodb表时将被唤醒(步骤3);它将执行以下操作 - i)它将从dynamodb表中读取事件数据 ii)根据当前日期和事件确定要发送的通知的下一个日期 数据 iii)对于活动事件(检查dynamodb记录的isActive列)创建一个预定的cron 在cloudwatch事件中基于ii的表达式规则并添加 target作为用户的主题(在上面的步骤2中创建)。目前,通知消息是 静态的。

我对第iii步有疑问/疑问 - 是否有可能动态创建cloudwatch事件cron规则并按照我的描述动态添加用户主题作为目标?或者更好的是触发第二个lambda函数,专门用于使用SNS通知向用户的主题发送消息?哪种方法对这个用例更好? 如果用户群变大,是否建议为每个用户创建一个主题? 从可扩展性的角度来看,我通常采用上述方法吗? 如果没有,有人可以提出更好的想法来实现这个用例吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

这不起作用。 对于SNS电子邮件订阅者接收通过SNS发送的电子邮件通知,它必须首先确认订阅。您不能只是动态创建订阅并向他们发送电子邮件通知

我认为SNS不适合您的使用案例。您最好使用SES发送电子邮件通知。

您可以在Lambda编写调度逻辑