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秒)
Wait, Task) + 每分钟至少 1 次(用于设置/配置)31536000 * (2 + 1/60) * 0.0250 / 1000= 1589.94 美元/年,或低至65.70 美元/年的低频触发(每分钟 2 个滴答声)31536000 * 0.000000208 * 10= 65.595488 美元/年t3a.nano是0.0047 $每小时点播,或低至$ 0.0014使用现货实例所以会有一些调度成本,但正如你所看到的,成本并不高。
当前,至少从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)
此时,AWS Lambda 允许将函数安排为每 5 分钟运行一次,最长执行时间为 5 分钟。
这意味着,如果您希望在不使用 EC2 的情况下以少于每 5 分钟的间隔运行 AWS Lambda 函数,您可以采取两阶段方法。创建一个每 5 分钟运行一次的 AWS Lambda 函数,并让它实际运行整个 5 分钟,并以适当的时间间隔异步调用其他 AWS Lambda 函数。
这种方法会花费更多,因为运行整个 5 分钟的第一个 AWS Lambda 函数基本上会连续运行,但您可以通过分配最少量的 RAM 来降低成本。
更新
CloudWatch Events 现在允许以 1 分钟的频率进行计划。这意味着您现在可以安排 Lambda 函数每分钟运行一次,并让它运行最多一分钟以达到亚分钟级的精度。值得注意的是,预定的事件不会在每分钟开始时触发,因此实现精确的亚分钟计时仍然有点棘手。
| 归档时间: |
|
| 查看次数: |
7613 次 |
| 最近记录: |