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
}
AWS 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>
编写由 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
}
AWS 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>