亚马逊宣布推出AWS Lambda(http://aws.amazon.com/lambda/) .
产品描述包括:
计划任务AWS Lambda功能可以由外部事件计时器触发,因此可以在定期维护时间或非高峰时段运行功能 . 例如,您可以触发AWS Lambda函数在非繁忙时段执行夜间归档清理 .
当我读到这篇文章时,我明白我终于可以有办法一直做“类似cron”的任务了 . 我想每天下午5点运行一个特定的查询 .
但是我在文档中的任何地方都没有找到它 . 他们只提到了programatical事件或其他AWS服务事件的触发器 .
我误会了吗?或者有人能指出我的文档?
9 回答
您也可以使用cloudWatch事件安排它 . 创建规则 - >附加目标(lambda)并在规则上设置cron / rate wise schedule .
Web控制台的方式非常简单 . 只需为lambda创建一个
CloudWatch
规则,并将其添加到lambda的Triggers
选项卡中 .对于那些需要使用
aws cli
进行自动化的人,我们可以创建功能,
创建规则,
授予许可,
链接规则和功能
Create function
Create rules
2015年10月8日新增计划活动原生支持:
正如AWS blog post中所宣布的那样,现在支持调度为event source type(也称为触发器),称为“ CloudWatch Events - Schedule ”,可以表示为速率或cron表达式 .
将计划事件添加到新的lambda
导航到“配置触发器”创建步骤,并指定“CloudWatch事件 - 计划”触发器 . 示例配置如下:
将计划事件添加到现有lambda
导航到lambda的“触发器”选项卡,选择“添加触发器”,然后指定“CloudWatch事件 - 计划”触发器 . 我有一个带有SNS触发器的现有lambda的示例屏幕截图:
加载后,配置此触发器的UI与上面“将计划事件添加到新lambda”部分中的屏幕截图相同 .
讨论
对于您的示例,您将要使用
cron()
而不是rate()
. lambda中的Cron表达式需要所有字段并以UTC表示 . 因此,要在每天下午5点(UTC)运行一个函数,请使用以下cron表达式:更多资源
AWS Documentation - Schedule Expressions Using Rate or Cron
AWS Documentation - Run an AWS Lambda Function on a Schedule Using the AWS CLI
AWS Documentation - Tutorial: Using AWS Lambda with Scheduled Events
AWS提供了一个示例"blueprint",该示例使用名为
lambda-canary
的cron表达式,可以在AWS控制台创建函数期间选择该表达式 .本教程将指导您完成此蓝图的配置 .
注意事项
自此功能首次发布以来,此事件类型的名称已从"Scheduled Event"更改为"CloudWatch Events - Schedule" .
在此功能发布之前,针对此问题的建议解决方案(每"Getting Started with AWS Lambda" at 42min 50secs)为use SWF to create a timer,或者使用外部应用程序创建计时器 .
自定期活动博客文章发布以来,Lambda用户界面已经过大修,其中的截图不再精确 . 有关最新版本,请参阅上面2017年3月3日上面的更新截图 .
从这篇文章的时间开始,似乎又出现了另一种解决方案:Schedule Recurring AWS Lambda Invocations With The Unreliable Town Clock (UTC)其中作者提议订阅SNS主题不可靠的城镇时钟 . 我've used neither SWF nor SNS, but it seems to me that the SNS solution is simpler. Here'是文章的摘录
新解决方案:Lambda计划作业
Werner Vogel今晚(10/08)在re:Invent上宣布,AWS Lambda现在拥有自己的调度程序 .
请AWS Lambda release note on 2015-10-08:
旧解决方案:使用AWS Data Pipeline进行调度
您可以将AWS Data Pipeline用于schedule具有给定期间的任务 . 使用ShellCommandActivity配置管道时,该操作可以是任何命令 .
例如,您可以运行AWS CLI命令:
Put a message to SQS
或直接 invoke a Lambda function (见invoke)
您可以直接在AWS控制台中轻松创建AWS Data Pipeline计划任务(例如,使用AWS CLI命令):
您也可以使用API来define您的日程安排:
Limits:最小调度间隔为15分钟 .
Pricing:每月约1.00美元 .
我是这样做的:
给出SQS的
清除
发送消息延迟10分钟
https://gist.github.com/mikeplavsky/5ffe7e33e0d70a248537
创建CloudWatch警报:ApproximateNumberOfMessagesVisible> 0 1分钟
订阅SNS主题报警
订阅Lambda到SNS主题
现在你有一个约15分钟的计时器 .
然后其他Lambda函数订阅SNS主题并每15分钟调用一次 .
由于现在easily possible通过HTTP触发lambda函数(例如使用GET或curl),一个简单的解决方案是使用像easycron这样的托管CRON:https://www.easycron.com/来触发lambda函数运行 .
我们遇到了同样的问题,最终在python中运行了Google App Engine上的cron服务,因为这样可以提高CRON作业本身的灵活性和复杂性 .
在创建lambda函数时创建触发器“CloudWatch Events - Schedule”
现在,您可以在计划表达式中使用AWS预设,例如rate = 15 min,也可以使用cron表达式 .
根据您的要求,Cron Schedule是“0 0 17 1/1 ?”
Diksha是基于AWS SWF触发器的AWS Lambda Scheduler,由AWS Team推荐 . 可以使用cron表达式计划作业,还可以指定要运行的时间,开始时间或结束时间 . 您可以查看预定作业的状态和历史记录 . 安全性由AWS策略管理 .
设置diksha引擎后,您可以按以下方式使用cron表达式调度函数:
java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj“jobName | functionName | context | 0 0-59 * * * * | 10”
在这份工作中,每分钟都会运行10次 . AWS SWF将自动触发功能 .
详情:https://github.com/milindparikh/diksha
免责声明:我是该项目的贡献者 .