首页 文章

AWS Lambda - CloudWatch事件类型

提问于
浏览
13

编写由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事件触发的......

样本函数的加分点 .

EDIT 1 目前还没有正确答案(虽然我不会将SDK中的事件传递给Lambda函数),因此实际上可能没有我想要的答案 .

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

3 回答

  • 1

    以下是它的样板代码 .

    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>
    
  • 8

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

    但您可以自由创建自己的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....
      }
    
  • 2

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

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

相关问题