我目前在lambda中有一个函数,当被调用时发送消息给调用它的用户。 2天后,我想发送一个后续消息。 所有发送实际消息的代码都可以正常工作。
由于自动缩放function,我正在使用Lambda,理想情况下,我希望避免必须设置单独的数据库来存储userId,原始交互的时间戳(以便我可以计算跟进时间),并遵循在2天后收到消息。 原因是因为我不确定什么时候会出现峰值。 这是一个短期的框架项目,但期望高度参与,但时间不确定。
我最初以为SNS可以用数据调用另一个lambda函数,但是我发现SNS不支持预定的消息。 理想情况下,我也不想参与投票另一项服务。 有没有什么好的解决scheme呢?
我意识到不使用数据库是一个强有力的限制,如果我必须使用一个,那么我会使用一个,但仍然不需要民意调查将是有益的(我想我可以安排一个lambda函数,并在时间戳创build索引dynamodb)
最近宣布的AWS Step Functions服务可以帮助您实现您所描述的内容。 该服务可以协调应用程序组件的执行,例如Lambda函数。 它为您提供了一个graphics化控制台,您可以在这个控制台上build模它们之间的依赖关系,并定义捕获应用程序工作stream的有限状态机。 您可以在以下链接中find有关该服务的更多信息:
AWS步骤function
宣布AWS步骤function
回到你的案子。 步骤function为您提供一个Wait状态,使状态机器延迟一段指定的时间。 所以你的应用程序工作stream程可能是这样的
FirstState状态将执行一个lambda函数, send a message to a user who invoked it 。 然后,它将等待2天,以wait_using_seconds状态表示,最后它会执行一个lambda函数“发送后续消息”,作为FinalState状态。
在Amazon States Language编写的状态机的定义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 } } }