使用 Java 和 CloudWatch 触发器调度 AWS-Lambda



我是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 的。

最新更新