计划的AWS Lambda任务频率不到1分钟

时间:2016-03-08 21:44:17

标签: amazon-web-services amazon-ec2 scheduled-tasks aws-lambda

我们正在尝试开发一个真正的基于lambda的应用程序,其中某些任务需要在可变频率的时间表上执行。它们实际上是在轮询数据,并且在一天的某些时间,这种轮询可以像每小时一样慢,而在其他时候它必须每秒一次。我已经查看了调度选项(例如Using AWS Lambda with Scheduled EventsAWS re:Invent 2015 | (CMP407) Lambda as Cron: Scheduling Invocations in AWS Lambda),但似乎没有启动EC2实例或长时间运行的lambda,没有内置的方法可以启动lambdas频率不到一分钟。 lambda rate表达式没有秒的位置。有没有办法在没有EC2实例或长时间运行的lambda的情况下执行此操作?理想情况下,可以做一些事情而不会产生额外的安排成本。

4 个答案:

答案 0 :(得分:5)

目前,至少每隔1分钟从Cloudwatch计划事件中调用lambda函数。

可能有效的解决方案如下:

设置EC2实例,并从程序中将您作为后台作业运行,使用aws sdk调用lambda函数。例如:

while True:
  invoke lambda function via aws sdk
  sleep for x seconds

答案 1 :(得分:3)

此时,AWS Lambda允许将功能安排为每5分钟运行一次,最长执行时间为5分钟。

这意味着如果您希望以不到每5分钟的间隔运行AWS Lambda函数而不使用EC2,则可以采用两阶段方法。创建一个AWS Lambda函数,每隔5分钟运行一次,让它实际运行整整5分钟,以适当的时间间隔异步调用其他AWS Lambda函数。

这种方法会花费更多,因为运行整个5分钟的第一个AWS Lambda函数将基本上连续运行,但您可以通过分配最小量的RAM来降低成本。

<强>更新

CloudWatch Events现在允许以1分钟的频率进行计划。这意味着您现在可以安排Lambda函数每分钟运行一次并使其运行长达一分钟,以达到亚分钟的准确度。值得注意的是,预定事件不会在每分钟开始时触发,因此实现精确的分钟时间仍然有点棘手。

答案 2 :(得分:2)

不要使用lambda进行轮询,或者如果您希望花费更多时间进行轮询而不是执行工作,那么最好使用EC2。 Lambda按执行时间和轮询收费是很昂贵的。

你真的需要一个带Lambda的事件驱动系统。什么决定你的民意调查?

答案 3 :(得分:1)

理论上,您可以使用由CloudWatch Events计划事件执行的AWS Step Function来连接没有EC2实例或长时间运行的lambda的高频任务触发器(请参阅Emanuele Menga的{ {3}}为例,但根据我目前(截至2019年5月)的估算,该方法实际上比其他两种方法要昂贵

(假设1年= 31536000 秒)

Step Function:

    每1000个状态转换
  • blog post
  • 每刻度(WaitTask)2个状态转换+每分钟至少1次状态转换(用于设置/配置)
  • 31536000 * (2 + 1/60) * 0.0250 / 1000 = $ 1589.94 /年,或者更低的触发频率(每分钟2滴答)低至 $ 65.70 /年

Lambda函数:

    每100毫秒
  • $0.0250(用于最小的128mb功能)
  • 31536000 * 0.000000208 * 10 = $ 65.595488 /年

EC2实例:

  • t3a.nano按需每小时$0.000000208,使用竞价型实例则低至$0.0047
  • 31536000 * 0.0047 / 3600 = $ 41.172 /年,或 $ 12.264 /年(使用竞价型实例)

因此会有一些调度成本,但是如您所见,成本并不高。