根据Dynamo DB属性在AWS步骤功能中通过事件/ SES计划提醒电子邮件

问题描述

我有一个包含3个lambda的step函数,最后一个lambda基本是在带有时间戳的状态dynamo DB中写入一个条目,状态=“ unpaid”(某些情况下会根据另一个工作流自动更新为“ paid”),电子邮件并关闭执行。现在,我想在DynamoDB中未付款且超过7天的任何条目上安排提醒,如果在14天之内未付款没有任何条目,则进行第二次提醒,在第19天,最后一个提醒通过电子邮件发送。所以问题是:

  1. 是否有任何方法可以执行每个Step函数的调度(然后可以在ddb中监视该特定条目7、14、19天,并相应地发送提醒,直到状态为“未付款”)。 如果是的话,这会造成太多开销,因为可能会有数百万笔交易。

  2. 我正在考虑的第二种方法是构建另一个调度程序lambda序列:第一个lambda基本上是通过整个ddb进行解析,以搜索对提醒有效的条目(7、14、19)。第二个Lambda从第一个Lambda获取列表,并根据其第一个,第二个或第三个(循环)以及第三个Lambda通过SES发送提醒来准备提醒。

是否有更好或更简单的方法可以做到这一点? 我知道我们可以通过云事件触发步进函数或lambda,或者我们也可以使用cron,但是它们不太适合用例。 感谢您的任何帮助?

解决方法

DynamoDB没有基于逻辑的延迟通知功能,您需要自行设计此流程。幸运的是,AWS具有执行此操作所需的所有工具。

我相信最好的选择可能是在将项目写入DynamoDB时创建CloudWatch Events / EventBridge(通过您的应用程序或使用DynamoDB Streams通过Lambda触发) )。

event would be scheduled使用7天,在7天内可以执行任何检查以验证是否已付款。如果尚未付款,则安排下一个事件并发送通知。如果已付款,则只需退出Lambda函数。然后,此操作将在接下来的两个时间段继续。

然后,您可以通过使用DynamoDB流进一步增强此功能,以便在更新DynamoDB表的情况下,触发Lambda以检测状态是否已从未付费更改。如果发生这种情况,只需删除事件触发器以防止它必须处理。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...