我是AWS和AWS-Lambdas的新手。我必须创建一个 lambda 函数来每 10 分钟运行一次 cron 作业。我计划添加一个 Cloudwatch 触发器,每 10 分钟触发一次相同的触发器,但没有任何事件。我在互联网上查找,发现需要一些事件才能运行。
我需要在以下 2 点上获得一些清晰度和线索:
- 我是否可以使用 AWS-Lambda 和 cloudwatch 在 10 分钟内触发相同的任务来计划作业,而不会发生任何事件。
- 如何使其与托管在 AWS 上的 MySQL 数据库进行交互。
我在 SpringBoot 上构建了我的应用程序,这些实例在具有共享数据库(单一事实来源)的多个实例上运行。我已经使用 Spring 的内置调度程序设计了上述所有内容,并使用锁在数据库级别进行适当的同步,但由于实例的分布式性质,我被建议使用 lambda 做同样的事情。
你需要将 ScheduledEvent 对象传递给 lambda 的 handleRequest()。
handleRequest(ScheduledEvent event, Contex context)
在云监视模板中配置每 10 分钟运行一次的 cron 作业(如果使用 cloudformation)。这将确保每 10 分钟触发一次您的 lambda。
确保将下面提到的依赖项添加到您的 pom 中。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>2.2.5</version>
</dependency>
方法2:
您可以在云形成模板中指定类似内容。这不需要将任何参数传递给您的处理程序(),以防您不需要任何与事件相关的信息。这将根据您的 cron 作业自动触发您的 lambda。
"ScheduledRule": {
"Type": "AWS::Events::Rule",
"Properties": {
"Description": "ScheduledRule",
"ScheduleExpression": {
"Fn::Join": [
"",
[
"cron(",
{
"Ref": "ScheduleCronExpression"
},
")"
]
]
},
"State": "ENABLED",
"Targets": [
{
"Arn": {
"Fn::GetAtt": [
"LAMBDANAME",
"Arn"
]
},
"Id": "TargetFunctionV1"
}
]
}
},
"PermissionForEventsToInvokeLambdaFunction": {
"Type": "AWS::Lambda::Permission",
"Properties": {
"FunctionName": {
"Ref": "NAME"
},
"Action": "lambda:InvokeFunction",
"Principal": "events.amazonaws.com",
"SourceArn": {
"Fn::GetAtt": [
"ScheduledRule",
"Arn"
]
}
}
}
}
- 如果要从云监视事件运行 cronjob,则是唯一的选择。
- 如果您不想使用云监视事件,请继续使用 EC2 实例。但是EC2将比云观察活动花费更多。
注意:Cloudwatch events 规则 steup 就像在任何 Linux 系统中的 crontab 中定义 cronjob 一样,仅此而已。在 linux serevr 中,您将所有内容定义为 RAW 的,但这里它只是一个基于 UI 的。