繁体   English   中英

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编写的AWS Lambda函数的示例,这些函数由Cloudwatch Scheduled事件触发...

样本函数的加分点。

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

此处还询问了这个问题: CloudWatch Events - Schedule触发器传递给Lambda函数的参数类型是什么? 有人评论建议使用Object并打印类名。 原来是LinkedHashMap。 看起来像我要得到的答案一样正确......

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

我可以看到在2.0.2版本的aws-lambda-java-events库中这是可用的。 代码在这里 ,2.0版本的更多细节在这里

以下是它的样板代码。

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>

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

但您可以自由创建自己的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引擎自动尝试将输入序列化为给定类的对象。

要知道结构,您可以指定类型“Map”并打印输出到日志:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM