无服务器的 MoonMail Lambda 架构

MoonMail Lambda architecture with Serverless

我一直在研究这个项目,因为让整个系统成为 Lambda 函数集合的想法似乎非常有吸引力。事实上,几年前我编写了一些与 MoonMail 功能几乎相同的软件,并且由于某些规格发生了变化,因此需要进行更新。我正在评估将我的软件移植到 Lambda 或只是调整它以使用 MoonMail。

我有以下问题:

在我使用无服务器的测试中,我注意到当我更改资源名称(如 DynamoDb table 的名称)并重新部署时,没有警告,旧的 table 及其内容被销毁。我认为一个简单的错误,比如配置文件中的一个额外字符,会导致删除数据库中的所有数据,这是非常危险的。你是如何处理这类问题的?

关于通过 SES 发送电子邮件。当您达到特定帐户的发送限制时,您如何处理节流?你做指数退避吗?我似乎无法在代码库中找到它。如果您能指出发生这种情况的回购协议中的一般区域,我将不胜感激。

  1. MoonMail 的 table 名称存储在 s-templates.json 中。这个文件很少被触及,因此团队还没有遇到这个问题,但确实危险仍然存在,我会向 AWS 团队询问如何通过简单地在 CF 中重命名它来避免删除 table .
  2. 它会重试 Cloud Watch invocation 发送极限情况(如果我错了,MM 团队会纠正我,但 99% 确定我没有错)。

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

如果您的 Lambda 是由 SNS 调用的,那么当超过 SES 限制时您可能会失败。然后 SNS 将使用 back-offs.

重新尝试传递

我目前的方法是在单独的进程中创建 dynamodb。所以我的无服务器设置是 read-only,没有创建数据库。因为我认为我不会经常成为 re-creating 我的分贝 :)