AWS Lambda - CloudWatch 事件类型

AWS Lambda - CloudWatch Event type

编写由 Cloudwatch 计划事件触发的 AWS Java Lambda 函数时,哪个事件对象会传递给 Lambda 处理程序函数?

例如,对于由 S3 事件触发的 Lambda 函数,AWS 调用该函数并传递一个 S3Event 对象。同样,它会将 SNSEvent 对象传递给由 SNS 消息触发的函数。

public class LambdaHandler {

    public void eventHandler(S3Event event, Context context) {
    }

public class LambdaHandler {

    public void eventHandler(SNSEvent event, Context context) {
    }

对于 Cloudwatch 计划事件驱动函数,什么可以代替 SNSEvent / S3Event?

public class LambdaHandler {

    public void eventHandler(__________ event, Context context) {
    }

我这辈子都找不到任何用 Java 编写的由 Cloudwatch 计划事件触发的 AWS Lambda 函数示例...

示例函数加分。

编辑 1 目前还没有正确的答案(尽管我不知道 AWS 已经在 SDK 中发布了一个合适的 'event' 对象传递给 Lambda 函数),因此实际上可能没有我正在寻找的答案。

这里也有人问过这个问题:What is the parameter type passed to a Lambda function by a CloudWatch Events - Schedule trigger? 有人评论说建议使用 Object 并打印 class 名称。原来是一个LinkedHashMap。看起来和我将要得到的答案一样正确...

遗憾的是,没有特定的class此类事件。

但您可以自由创建自己的 POJO 并将它们指定为事件参数的 class。例如,CloudWatchEvent 可以描述为:

public class CloudWatchEvent {

    private String version;
    private String id;
    private String detailType;
    private String source;
    private String account;
    private Date time;
    private String region;
    private List<String> resources;
    ...   
    // getters and setters
}

A​​WS Lambda 引擎自动尝试将输入序列化为给定 class 的对象。

要了解结构,您可以指定类型 "Map" 并将其打印到日志中:

  public void eventHandler(Map event, Context context) {
        log.debug(event); // or System.out....
  }

com.amazonaws.services.lambda.runtime.events.ScheduledEvent 是当前答案。

我可以看到在 2.0.2 版本的 aws-lambda-java-events 库中这是可用的。代码是 here and more details on 2.0 version are here

以下是它的样板代码。

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.ScheduledEvent;


public class CollectionLambda {
    public void eventHandler(ScheduledEvent event, Context context) {
        // todo
    }
}

为 maven 添加以下依赖项:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.2.0</version>
</dependency>

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>2.2.2</version>
</dependency>