AWS Lambda - CloudWatch事件类型

时间:2016-07-09 21:32:02

标签: amazon-web-services aws-lambda amazon-cloudwatch

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

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

public class LambdaHandler {

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

OR

public class LambdaHandler {

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

对于Cloudwatch预定事件驱动功能,将取代SNSEvent / S3Event?

public class LambdaHandler {

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

在我的生活中,我无法找到由Java编写的由Cloudwatch Scheduled事件触发的AWS Lambda函数的任何示例...

示例函数的加分点。

编辑1 目前还没有正确答案(虽然我不知道AWS已经在SDK中发布了一个适当的事件对象传递给Lambda函数),所以实际上可能没有我想要的答案。

这里也提出了这个问题:What is the parameter type passed to a Lambda function by a CloudWatch Events - Schedule trigger?并且有人评论建议使用Object并打印类名。原来是LinkedHashMap。看起来像答案一样正确......

3 个答案:

答案 0 :(得分:9)

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

我可以看到在2.0.2版本的aws-lambda-java-events库中这是可用的。代码为here,有关2.0版本的详细信息为here

答案 1 :(得分:2)

以下是其样板代码。

 Field('field_name', 'datetime', default=now)

为maven添加以下依赖项:

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
    }
}

答案 2 :(得分:1)

不幸的是,这类事件没有特定的类。

但您可以自由创建自己的POJO并将它们指定为事件参数类。例如,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
}

AWS Lambda引擎会自动尝试将输入序列化为给定类的对象。

要了解结构,您可以指定类型&#34; Map&#34;并将其打印出来记录:

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