我们正在尝试开发一个真正的基于lambda的应用程序,其中某些任务需要在可变频率的时间表上执行。它们实际上是在轮询数据,并且在一天的某些时间,这种轮询可以像每小时一样慢,而在其他时候它必须每秒一次。我已经查看了调度选项(例如Using AWS Lambda with Scheduled Events和AWS re:Invent 2015 | (CMP407) Lambda as Cron: Scheduling Invocations in AWS Lambda),但似乎没有启动EC2实例或长时间运行的lambda,没有内置的方法可以启动lambdas频率不到一分钟。 lambda rate表达式没有秒的位置。有没有办法在没有EC2实例或长时间运行的lambda的情况下执行此操作?理想情况下,可以做一些事情而不会产生额外的安排成本。
答案 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 秒)
Wait
,Task
)2个状态转换+每分钟至少1次状态转换(用于设置/配置)31536000 * (2 + 1/60) * 0.0250 / 1000
= $ 1589.94 /年,或者更低的触发频率(每分钟2滴答)低至 $ 65.70 /年31536000 * 0.000000208 * 10
= $ 65.595488 /年t3a.nano
按需每小时$0.000000208,使用竞价型实例则低至$0.0047 因此会有一些调度成本,但是如您所见,成本并不高。