带有数据的 AWS 计划任务

带有数据的 AWS 计划任务

我目前在 lambda 中有一个函数,当调用它时,它会向调用它的用户发送一条消息。两天后我想发送一条后续消息。发送实际消息的所有代码都运行正常。

我使用 Lambda 是因为其具有自动扩展功能,理想情况下,我希望避免设置单独的数据库来存储用户 ID、原始交互的时间戳(这样我就可以计算出跟进时间)和 2 天后的跟进消息。这样做的原因是由于扩展,因为我不确定峰值何时会到来。这是一个短期项目,但预计参与度很高,但时间未知且各不相同。

我最初考虑使用 SNS 来调用另一个 lambda 函数来处理数据,但后来我发现 SNS 不支持定时消息。理想情况下,我也不想涉及轮询其他服务。对此有什么好的解决方案吗?

我意识到不使用数据库是一个很大的限制,如果我必须使用一个,那么我就会使用一个,但仍然不必轮询会很有用(我想我可以安排一个 lambda 函数并在 dynamodb 中的时间戳上创建一个索引)

答案1

最近宣布的AWS Step Functions服务可以帮助您实现您所描述的内容。该服务可以协调应用程序组件(例如Lambda函数)的执行。它为您提供了一个图形控制台,您可以在其中对它们之间的依赖关系进行建模,并定义一个捕获应用程序工作流的有限状态机。您可以在以下链接中找到有关该服务的更多信息:

AWS Step Functions

宣布推出 AWS Step Functions

回到您的案例。Step Functions 为您提供了一种Wait状态,可延迟状态机继续运行一段时间。因此,您的应用程序工作流程可能如下所示:

在此处输入图片描述

状态FirstState将执行一个 lambda 函数send a message to a user who invoked it。然后,它将等待 2 天,以wait_using_seconds状态表示,最后它将执行一个 lambda 函数“发送后续消息”,以FinalState状态表示。

状态机的定义如下Amazon States Language

{
  "Comment": "An example of the Amazon States Language using wait states",
  "StartAt": "FirstState",
  "States": {
    "FirstState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT:function:FUNCTION1",
      "Next": "wait_using_seconds"
    },
    "wait_using_seconds": {
      "Type": "Wait",
      "Seconds": 172800,
      "Next": "FinalState"
    },

    "FinalState": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT:function:FUNCTION2",
      "End": true
    }
  }
}

相关内容