AWS Lambda计划任务

Nat*_*n H 134 amazon-web-services cron-task aws-lambda

亚马逊宣布推出AWS Lambda(http://aws.amazon.com/lambda/).

产品描述包括:

计划任务

AWS Lambda函数可以由外部事件计时器触发,因此可以在定期维护时间或非高峰时间运行功能.例如,您可以触发AWS Lambda函数在非繁忙时段执行夜间归档清理.

当我读到这篇文章时,我明白我终于有办法不断地做"类似cron"的任务了.我想每天下午5点运行一个特定的查询.

但是我没有在文档中的任何地方找到它.他们只提到了programatical事件或来自其他AWS服务的事件的触发器.

我误会了吗?或者有人能指出我的文档?

Ant*_*ace 148

2015年10月8日增加了对预定活动的原生支持:

正如此AWS博客文章中所述,现在支持调度作为名为" CloudWatch Events - Schedule " 的事件源类型(也称为触发器),并且可以表示为rate或cron表达式.

将计划事件添加到新的lambda

导航到"配置触发器"创建步骤,并指定"CloudWatch事件 - 计划"触发器.示例配置如下:

显示在UTC时间下午5点创建预定事件的配置的图像.

将计划事件添加到现有lambda

导航到lambda的"触发器"选项卡,选择"添加触发器",然后指定"CloudWatch事件 - 计划"触发器.我有一个带有SNS触发器的现有lambda的示例屏幕截图:

该图显示了如何导航以从Lambda控制台添加触发器UI.

加载后,配置此触发器的UI与上面"将计划事件添加到新lambda"部分中的屏幕截图相同.

讨论

对于您的示例案例,您将要使用cron()而不是rate().lambda中的Cron表达式需要所有字段并以UTC表示.因此,要在每天下午5点(UTC)运行一个函数,请使用以下cron表达式:

cron(0 17 * * ? *)
Run Code Online (Sandbox Code Playgroud)

更多资源

笔记

  • 自此功能首次发布以来,此事件类型的名称已从"预定事件"更改为"CloudWatch事件 - 计划".
  • 在此功能发布之前,针对此问题的推荐解决方案(根据"AWS Lambda入门",42分钟50秒)是使用SWF创建计时器,或使用外部应用程序创建计时器.
  • 自定期活动博客文章发布以来,Lambda用户界面已经彻底检查,其中的屏幕截图不再精确.有关最新修订,请参阅我在2017年3月3日上方更新的屏幕截图.

  • 事件源类型现在是"CloudWatch Events - Schedule" (4认同)
  • 它现在确实支持1分钟的费率.http://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html (3认同)
  • 这有点像黑客但你可以以1分钟的频率执行此操作https://www.youtube.com/watch?v=FhJxTIq81AU (2认同)

sha*_*adi 17

从这篇文章的时间开始,似乎又提出了另一个解决方案:使用不可靠的城镇时钟(UTC)安排重复的AWS Lambda调用,其中作者建议订阅SNS主题不可靠的城镇时钟.我既没使用SWF也没使用SNS,但在我看来,SNS解决方案更简单.这是文章的摘录

不可靠的城镇时钟(UTC)

不可靠城镇时钟(UTC)是一个新的,免费的公共SNS主题(亚马逊简单通知服务),每四分钟向所有订户广播一个"编钟"消息.它可以将钟声发送到AWS Lambda函数,SQS队列和电子邮件地址.

您可以使用chime属性每15分钟运行一次代码,或者每小时运行一次代码(例如,当分钟=="00"时)或每天运行一次(例如,当小时=="00"和分钟= ="00")或任何其他一系列间隔.

您甚至可以订阅一个只想在将来的特定时间运行一次的函数:让函数忽略所有调用,直到它想要的时间之后.什么时候,它可以执行其工作,然后取消订阅自己的SNS主题.

将您的代码连接到Unreliable Town Clock是快速而简单的.无需申请流程或帐户创建

  • 不再是一个有效的答案.不可靠的城镇时钟不再可用 (7认同)

Yve*_* M. 15

新解决方案:Lambda计划作业

Werner Vogel今晚(10/08)在re:Invent上宣布AWS Lambda现在拥有自己的调度程序.

请参阅2015-10-08AWS Lambda发行说明:

您还可以使用AWS Lambda控制台设置AWS Lambda以定期调度您的代码.您可以指定固定费率(小时数,天数或周数),也可以指定cron表达式.有关示例,请参见演练5:使用Lambda函数处理预定事件(Python).


旧解决方案:使用AWS Data Pipeline进行调度

您可以使用AWS Data Pipeline 计划给定期间的任务.使用ShellCommandActivity配置管道时,该操作可以是任何命令.

例如,您可以运行AWS CLI命令:

  • 给SQS留言
  • 或直接调用Lambda函数(请参阅invoke)

您可以直接在AWS控制台中轻松创建AWS Data Pipeline计划任务(例如,使用AWS CLI命令):

在此输入图像描述

您还可以使用API​​来定义您的日程安排:

{
 "pipelineId": "df-0937003356ZJEXAMPLE",
 "pipelineObjects": [
    {
      "id": "Schedule",
      "name": "Schedule",
      "fields": [
        { "key": "startDateTime", "stringValue": "2012-12-12T00:00:00" }, 
        { "key": "type", "stringValue": "Schedule" }, 
        { "key": "period", "stringValue": "1 hour" }, 
        { "key": "endDateTime", "stringValue": "2012-12-21T18:00:00"  }
       ]
     }, {
      "id": "DoSomething",
      "name": "DoSomething",
      "fields": [
        { "key": "type", "stringValue": "ShellCommandActivity" },
        { "key": "command", "stringValue": "echo hello" },
        { "key": "schedule", "refValue": "Schedule" }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

限制:最小调度间隔为15分钟.
定价:每月约1.00美元.


map*_*pro 7

我是这样做的:

现在你有一个约15分钟的计时器.

然后其他Lambda函数订阅SNS主题并每15分钟调用一次.

  • 这个答案基本上是关于一种可以实现[Shadi的答案](http://stackoverflow.com/a/31354475/18192)中描述的不可靠城镇时钟的机制的说明.鉴于UTC的作者警告它"可能在任何时候没有任何警告而消失",你的方法可能远远优越. (4认同)