MoonMail无服务器Lambda架构

8

我一直在研究这个项目,因为让整个系统成为Lambda函数的集合的想法非常吸引人。事实上,几年前我写了一些软件,与MoonMail的功能基本相同,但由于某些规格已更改,它需要更新。我正在评估将我的软件移植到Lambda或仅使用MoonMail来进行调整。

我有以下问题:

在使用Serverless进行测试时,我注意到当我更改资源名称(例如DynamoDb表的名称)并重新部署时,没有警告,并且旧表及其内容被销毁。我认为,像配置文件中多余字符这样的简单错误会导致删除数据库上的所有数据,这是相当危险的。您如何处理此类问题?

关于通过SES发送电子邮件。当您达到特定帐户的发送限制时,您如何处理限流?您是否进行指数回退?我似乎找不到这个代码库中的相关内容。如果您能指出发生这种情况的存储库的大致位置,我将非常感激。

3个回答

5
  1. MoonMail将其表名存储在s-templates.json中。这个文件很少被修改,因此团队尚未遇到这个问题,但确实存在危险性,我会向AWS团队提出如何通过在CF中重命名来避免删除表的问题。
  2. 在发送限制情况下,使用Cloud Watch调用进行重试(如果我错了,请MM团队纠正我,但我99%确定我没有错)。

1
关于限流问题,@julian,当它超过发送速率时,我们只需将电子邮件保留在队列中,直到队列为空,它将自动重试(更多信息请参见此处)。如果达到每日限制,我们将停止发送进程,因为配额要等到第二天才会恢复,但在发送活动之前我们会进行一些检查以避免超出限制。 - davids

5

在创建DynamoDB表时,您可以设置DeletionPolicy: Retain,以防止它们被Cloud Formation意外删除。

如果您的Lambda由SNS调用,则当超过SES限制时可以简单地失败。然后,SNS将使用回退重试传递。


3

目前我的方法是在单独的进程中创建dynamodb。因此,我的无服务器设置是只读的,没有数据库创建。因为我不认为我会经常重新创建我的数据库 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接