使用AWS安排一次任务

问题描述 投票:0回答:2

我必须实现需要在特定日期延迟一次向用户发送消息的功能,该日期可以是从明天到现在的几个月内的任何时间。

到目前为止,我们所有的代码都实现为lambda函数。

我正在考虑三种实现方法:

  1. 在DynamoDB中创建一个条目,哈希键为日期,范围键为唯一ID。安排lambda每天运行一次,并获取当天计划的所有条目/任务,并为每个条目/任务发送一条消息。

  2. 使用SDK创建具有cron表达式的cloudwatch事件规则,该规则指示单个执行,并使其调用具有用户/消息ID的lambda函数(目标)。 lambda将在特定的时间表上调用,并传递特定的用户/消息。

  3. 创建一个步进函数实例,并将其配置为休眠并使用逻辑调用步骤,以在适当时机发送消息。

关于实施这种业务需求的最佳实践,您可能有什么建议?也许是完全不同的方法?

amazon-web-services aws-lambda
2个回答
1
投票

很大程度上取决于规模。如果您在任何时间都只安排几个计划,那么我将使用CloudWatch事件方法。这是非常低的开销,并且不涉及运行代码和不执行任何操作。

如果您期望很多计划,那么DynamoDB方法很可能是最好的方法。按固定的时间表运行lambda,查看尚未运行的记录以及已过/等于当前时间的记录。在此模型中,您将要删除已经处理过的记录(或以某种方式对其进行标记),以免再次处理它们。除非您正在记录上次的时间,否则不要依赖时间表按特定的时间间隔运行并检查上次时间和当前时间之间的记录(即不要记录您在上次时间运行的时间,因为您安排了它在每个时间都运行分钟)。

如果时间不算太远,步进功能可能会起作用。您可以在导致其坐下等待的步骤中添加延迟。步进功能的延迟仅仅是延迟,而不是计划的时间,因此您必须自己弄清楚延迟,并希望它能充分触发您期望的时间。对于中低音量,这不是一个坏选择。


0
投票

而不是建议使用s3,而不是使用DynamoDB。存储要触发的消息和时间作为键值对。

  1. S3将日期和时间存储为键值存储。
  2. 使用s3 lambda触发器创建将针对特定lambda的等值的cloudwatch规则
  3. 您甚至可以安排一个cron到一个lambda,它将从s3中读取文件并更新要发送的消息所需的cron。

希望这符合您的要求

© www.soinside.com 2019 - 2024. All rights reserved.