首页 文章

AWS Lambda计划任务

提问于
浏览
106

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

产品描述包括:

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

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

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

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

9 回答

  • 3

    您也可以使用cloudWatch事件安排它 . 创建规则 - >附加目标(lambda)并在规则上设置cron / rate wise schedule .

  • 6

    Web控制台的方式非常简单 . 只需为lambda创建一个 CloudWatch 规则,并将其添加到lambda的 Triggers 选项卡中 .

    对于那些需要使用 aws cli 进行自动化的人,我们可以

    • 创建功能,

    • 创建规则,

    • 授予许可,

    • 链接规则和功能

    Create function

    aws lambda create-function --function-name ${FUNCTION-NAME} \
    --runtime java8 \
    --role 'arn:aws:iam::${Account}:role/${ROLE}' \
    --handler org.yourCompany.LambdaApp \
    --code '{"S3Bucket":"yourBucket", "S3Key": "RC/yourapp.jar"}' \
    --description 'check hive connection' \
    --timeout 180 \
    --memory-size 384 \
    --publish \
    --vpc-config '{"SubnetIds": ["subnet-1d2e3435", "subnet-0df4547a"], "SecurityGroupIds": ["sg-cb17b1ae", "sg-0e7ae277"]}' \
    --environment Variables={springEnv=dev}
    

    Create rules

    ## create
    aws events put-rule --name ${ruleName} \
    --schedule-expression 'rate(5 minutes)' \
    --state ENABLED \
    --description 'check hive connection'
    
    # grant permission to the Rule to allow it to trigger the function
    aws lambda add-permission --function-name ${functionName} \
    --statement-id 123 \
    --action 'lambda:InvokeFunction' \
    --principal events.amazonaws.com \
    --source-arn arn:aws:events:us-east-1:acc:rule/${ruleName}
    
    # link rule and function
    aws events put-targets --rule ${ruleName} \
    --targets '[{"Id":"1", "Arn":"arn:aws:lambda:us-east-1:acc:function:RC-checkhive"}]'
    
  • 12

    2015年10月8日新增计划活动原生支持:

    正如AWS blog post中所宣布的那样,现在支持调度为event source type(也称为触发器),称为“ CloudWatch Events - Schedule ”,可以表示为速率或cron表达式 .

    将计划事件添加到新的lambda

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

    Image that shows configuration for creating a scheduled event at 5pm UTC.

    将计划事件添加到现有lambda

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

    Image that shows how to navigate to add trigger UI from Lambda console.

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

    讨论

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

    cron(0 17 * * ? *)
    

    更多资源

    注意事项

    • 自此功能首次发布以来,此事件类型的名称已从"Scheduled Event"更改为"CloudWatch Events - Schedule" .

    • 在此功能发布之前,针对此问题的建议解决方案(每"Getting Started with AWS Lambda" at 42min 50secs)为use SWF to create a timer,或者使用外部应用程序创建计时器 .

    • 自定期活动博客文章发布以来,Lambda用户界面已经过大修,其中的截图不再精确 . 有关最新版本,请参阅上面2017年3月3日上面的更新截图 .

  • 1

    从这篇文章的时间开始,似乎又出现了另一种解决方案: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'是文章的摘录

    不可靠的城镇时钟(UTC)不可靠的城镇时钟(UTC)是一个新的,免费的公共SNS主题(亚马逊简单通知服务),每四分钟向所有订户广播一个“编钟”消息 . 它可以将钟声发送到AWS Lambda函数,SQS队列和电子邮件地址 . 您可以使用chime属性每15分钟运行一次代码,或者每小时运行一次代码(例如,当分钟==“00”)或每天运行一次(例如,当小时==“00”和分钟= =“00”)或任何其他一系列间隔 . 您甚至可以订阅一个只想在将来的特定时间运行一次的函数:让函数忽略所有调用,直到它想要的时间之后 . 什么时候,它可以执行其工作,然后取消订阅自己的SNS主题 . 将代码连接到Unreliable Town Clock非常简单快捷 . 无需申请流程或帐户创建

  • 0

    新解决方案:Lambda计划作业

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

    AWS Lambda release note on 2015-10-08

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


    旧解决方案:使用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命令):

    enter image description here

    您也可以使用API来define您的日程安排:

    {
     "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" }
          ]
        }
      ]
    }
    

    Limits:最小调度间隔为15分钟 .
    Pricing:每月约1.00美元 .

  • 15

    我是这样做的:

    • 创建Lambda:

    给出SQS的

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

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

  • 0

    由于现在easily possible通过HTTP触发lambda函数(例如使用GET或curl),一个简单的解决方案是使用像easycron这样的托管CRON:https://www.easycron.com/来触发lambda函数运行 .

    我们遇到了同样的问题,最终在python中运行了Google App Engine上的cron服务,因为这样可以提高CRON作业本身的灵活性和复杂性 .

  • -1

    在创建lambda函数时创建触发器“CloudWatch Events - Schedule”

    现在,您可以在计划表达式中使用AWS预设,例如rate = 15 min,也可以使用cron表达式 .

    enter image description here

    根据您的要求,Cron Schedule是“0 0 17 1/1

  • 124

    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

    免责声明:我是该项目的贡献者 .

相关问题