预定的AWS Lambda任务频率不到1分钟

AMA*_*AMA 10 scheduled-tasks amazon-ec2 amazon-web-services aws-lambda

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

wjo*_*dan 18

理论上,您可以在没有 EC2 实例或长时间运行的 lambda 的情况下使用由 CloudWatch Events 计划事件执行的AWS Step Function来连接高频任务触发器(例如,请参阅 Emanuele Menga 的博客文章),但这种方法实际上是根据我目前(截至 2019 年 5 月)的估计,比其他两种选择贵:

(假设 1 年 = 31536000秒)

步骤功能:

  • 每 1000 次状态转换$0.0250
  • 每滴答 2 次状态转换 ( Wait, Task) + 每分钟至少 1 次(用于设置/配置)
  • 31536000 * (2 + 1/60) * 0.0250 / 1000= 1589.94 美元/年,或低至65.70 美元/年的低频触发(每分钟 2 个滴答声)

拉姆达函数:

  • 每 100 毫秒$0.000000208(对于最小的 128mb 函数)
  • 31536000 * 0.000000208 * 10= 65.595488 美元/年

EC2 实例:

  • t3a.nano0.0047 $每小时点播,或低至$ 0.0014使用现货实例
  • 31536000 * 0.0047 / 3600 = $41.172 /年,或$12.264 /年(使用 Spot 实例)

所以会有一些调度成本,但正如你所看到的,成本并不高。


geo*_*rge 6

当前,至少从Cloudwatch计划事件每1分钟调用一次lambda函数。

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

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

while True:
  invoke lambda function via aws sdk
  sleep for x seconds
Run Code Online (Sandbox Code Playgroud)


Jar*_*eld 3

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

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

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


更新

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