该产品描述包括:
当我阅读此内容时,我明白了我终于可以有一种一致地执行“cron-like”任务的方法了。比如说,我想每天下午5点运行一个特定的查询。定时任务
AWS Lambda 函数可以通过外部事件触发器进行触发,因此函数可以在定期维护时间或非高峰小时运行。例如,您可以在空闲时间触发 AWS Lambda 函数以执行每晚的归档清理。
然而,我在文档中找不到任何信息。他们只提到程序事件或其他 AWS 服务的触发器。
是我误解了吗?还是有人能够将我指向文档呢?
当我阅读此内容时,我明白了我终于可以有一种一致地执行“cron-like”任务的方法了。比如说,我想每天下午5点运行一个特定的查询。定时任务
AWS Lambda 函数可以通过外部事件触发器进行触发,因此函数可以在定期维护时间或非高峰小时运行。例如,您可以在空闲时间触发 AWS Lambda 函数以执行每晚的归档清理。
正如在AWS博客文章中宣布的那样,现在支持将调度作为事件源类型(也称为触发器),称为“CloudWatch事件-计划”,并且可以表示为速率或cron表达式。
转到创建的“配置触发器”步骤,并指定“CloudWatch事件-计划”触发器。以下是示例配置:
导航至 Lambda 的“触发器”选项卡,选择“添加触发器”,并指定“CloudWatch Event - Schedule”触发器。以下是一个示例截图,其中我已经为 Lambda 添加了 SNS 触发器:
一旦加载完成,配置此触发器的用户界面与上面“将计划事件添加到新lambda”部分中的截图完全相同。cron(0 17 * * ? *)
lambda-canary
的cron表达式示例“蓝图”,可以在AWS控制台中选择函数创建时使用。不可靠的小镇时钟(UTC)
不可靠的小镇时钟(UTC)是一个新的、免费的、公共的SNS主题(Amazon简单通知服务),每隔15分钟向所有订阅者广播“钟声”消息。它可以将钟声发送到AWS Lambda函数、SQS队列和电子邮件地址。
您可以使用钟声属性每隔15分钟运行代码,或仅在每小时运行代码一次(例如,当分钟=="00"时)或每天运行一次代码(例如,当小时=="00"并且分钟=="00"时),或任何其他间隔序列。
您甚至可以订阅一个只想在未来特定时间运行一次的函数:让该函数忽略所有调用,直到超过它想要的时间。当时间到达后,它可以执行其工作,然后从SNS主题中取消订阅自己。
将您的代码连接到不可靠的小镇时钟非常快速和简单。无需申请过程或账户创建
Werner Vogel在re:Invent大会上宣布,AWS Lambda现在拥有自己的调度程序。
请参阅2015年10月8日的AWS Lambda发布说明:
您还可以使用AWS Lambda控制台设置AWS Lambda以定期或按计划调用您的代码。您可以指定固定速率(小时、天或星期数),也可以指定cron表达式。有关示例,请参见步骤5:使用Lambda函数处理计划事件(Python)。
您可以使用AWS Data Pipeline 安排具有给定周期的任务。当您使用ShellCommandActivity配置Pipeline时,操作可以是任何命令。
例如,您可以运行AWS CLI命令来:
您可以直接在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" }
]
}
]
}
创建Lambda函数:
创建CloudWatch警报:ApproximateNumberOfMessagesVisible > 0持续1分钟
现在您拥有了大约15分钟分辨率的计时器。
然后,其他Lambda函数已经订阅了SNS主题,并且每隔15分钟被调用一次。
在AWS中作为cron运行
这是一个使用CloudFormation设置CloudWatch定时事件触发Lambda函数的示例。
LambdaSchedule:
Type: "AWS::Events::Rule"
Properties:
Description: A schedule for the Lambda function..
ScheduleExpression: rate(5 minutes)
State: ENABLED
Targets:
- Arn: !Sub ${LambdaFunction.Arn}
Id: LambdaSchedule
LambdaSchedulePermission:
Type: "AWS::Lambda::Permission"
Properties:
Action: 'lambda:InvokeFunction'
FunctionName: !Sub ${LambdaFunction.Arn}
Principal: 'events.amazonaws.com'
SourceArn: !Sub ${LambdaSchedule.Arn}
LambdaFunction:
Type: "AWS::Lambda::Function"
Properties:
Description: Scheduled lambda to run every 5 minutes
CodeUri: ./build/package.zip
Handler: index.lambda_handler
MemorySize: 128
Runtime: python3.6
EventsBridge(CloudWatch)解决方案:
您可以创建一个AWS Events Bridge规则,并将Lambda函数设置为目标,使用它的ARN。您可以指定一个速率或cron计划表达式。例如,以下表达式将在所有工作日每十分钟后运行您的Lambda函数。
schedule = "cron(0/10 * ? * MON-FRI *)"
lambda:InvokeFunction
权限,以便EventsBridge可以触发Lambda函数。