如何运行一个定时的 AWS Lambda 函数,其中定时时间是一个参数?

4
我想知道是否可以在AWS Lambda中使用输入参数运行cron作业。
例如:我调用我的API端点:api.example.com/LambdaFunction5?timestamp=1571299919&someOtherVariable=NetworkBytes 正如您所看到的,这是对我的API的get请求,它需要两个参数,一个Epoch时间戳(从现在开始一天)和另一个参数(可以是任何内容)。然后,此API调用将创建一个cron作业,在给定的时间戳上执行,使用另一个参数作为lambda函数中的变量。
我如何使用AWS Lambda实现这一点?我知道AWS允许我安排特定时间的lambda。

https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html

但问题在于,我不想每次想要一个cron job时都创建一个新的lambda函数。
有没有一种方法,当我调用我的API端点时,它会基于我提供的时间创建一个cron job,并运行一次,然后在完成该作业后“删除”自己,以便我不会最终拥有无数个不同的函数或CloudWatch规则?

如果我必须这样做,我可能不会使用AWS Lambda,因为似乎没有干净的解决方案来实现这一点。话虽如此,如果你真的想做到这一点,也许你可以使用AWS SDK在两个关键时刻更改计划:
  • 在cron运行后,通过设置下一个cron运行日期(或非常远的日期以确保在添加另一个计划之前不会运行)来更改计划
  • 在POST调用上,如果:没有计划或当前计划晚于实际添加的计划
你将不得不在某个地方存储计划。
- nfroidure
2个回答

3

您可以定义自定义的JSON属性,并将其与CloudWatch事件一起发送:

  • 前往Amazon EventBridge > 事件 > 规则
  • 单击您的规则
  • 单击右上角的“编辑”按钮
  • 向下滚动到“选择目标”
  • 单击“配置输入”
  • 选择“常量(JSON文本)”单选按钮
  • 在可编辑字段中添加带有您参数的JSON数据。

您可能会在控制台中遇到一个错误,禁止您通过控制台进行编辑。 您可能需要使用CLI(我暂时没有语法)。 错误在此处:https://github.com/concurrencylabs/aws-pricing-tools/issues/8

错误已关闭,但仍然存在。


欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便其他用户了解它的内容和原因,然后引用您链接的页面中最相关的部分,以防目标页面无法访问。仅仅提供链接的答案可能会被删除。 - STA
1
我编辑了我的帖子,添加了一个完整的可工作的解决方案。 - Brice Miramont

-1

是的,我已经在AWS Lambda和API Gateway上运行了一个API。我的问题是如何让Lambda按需创建定时任务并安排在特定日期执行。 - NetworkBytes
在Lambda Designer控制台中附加一个CloudWatch事件,您可以指定cron作业的分钟间隔。我建议将与API Gateway一起运行的Lambda函数与计划的Lambda函数分开。 - Ethan Nguyen
1
@EthanNguyen Cron job 是用于重复计划事件的。OP 正在询问如何传递未来的时间戳以安排 lambda 函数的计划。目标是将一个 lambda 函数安排在数百个不同的一次性计划上运行,其中这些计划是通过请求 API 网关的 POST 参数给出的时间戳。你该怎么做呢?我已经通过制作一个 webhook 调度程序项目来完成了这个任务,该项目使用 setIntervals 触发 webhooks,但这并不是一个干净的解决方案。 - ErwanLent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接