Java 创建lambda函数将S3中文件的元数据存储到Mysql数据库?

Java 创建lambda函数将S3中文件的元数据存储到Mysql数据库?,java,amazon-web-services,amazon-s3,aws-lambda,Java,Amazon Web Services,Amazon S3,Aws Lambda,我是AWS新手,目前正在尝试理解Lambda函数,并在将文件上载到S3 bucket时触发它。 我为此编写了一个处理程序类: public class Hello implements RequestHandler<Employee, String> { public String handleRequest(Employee input, Context context) { context.getLogger().log("helloWorld");

我是AWS新手,目前正在尝试理解Lambda函数,并在将文件上载到S3 bucket时触发它。 我为此编写了一个处理程序类:

public class Hello implements RequestHandler<Employee, String> {
    public String handleRequest(Employee input, Context context) {
        context.getLogger().log("helloWorld");
        return "Hello World " ;
    }
}
但是作为一名Java开发人员,我尝试使用
S3EventNotification
作为参数:

public class Hello implements RequestHandler<S3EventNotification, String> {
    public String handleRequest(S3EventNotification input, Context context) {
        context.getLogger().log(input.getRecords().get(0).getEventSource());
        return "Hello World " ;
    }
}
public类Hello实现RequestHandler{
公共字符串handleRequest(S3EventNotification输入,上下文){
context.getLogger().log(input.getRecords().get(0.getEventSource());
返回“你好世界”;
}
}
但我得到了以下错误:

An error occurred during JSON parsing: java.lang.RuntimeException
java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: lambdainternal.util.ReflectUtil$ReflectException: java.lang.NoSuchMethodException: com.amazonaws.services.s3.event.S3EventNotification$S3ObjectEntity.<init>(java.lang.String, java.lang.Long, java.lang.String, java.lang.String)
Caused by: java.lang.NoSuchMethodException: com.amazonaws.services.s3.event.S3EventNotification$S3ObjectEntity.<init>(java.lang.String, java.lang.Long, java.lang.String, java.lang.String)
JSON解析期间发生错误:java.lang.RuntimeException
java.lang.RuntimeException:JSON解析期间出错
原因:lambdainternal.util.reflectil$ReflectException:java.lang.NoSuchMethodException:com.amazonaws.services.s3.event.S3EventNotification$S3ObjectEntity。(java.lang.String、java.lang.Long、java.lang.String、java.lang.String)
原因:java.lang.NoSuchMethodException:com.amazonaws.services.s3.event.S3EventNotification$S3ObjectEntity。(java.lang.String、java.lang.Long、java.lang.String、java.lang.String)

如何在Java中实现同样的功能?谢谢。

尝试以下几种变体:

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;

public class Hello implements RequestHandler<S3Event, Void> {
    @Override
    public Void handleRequest(S3Event s3event, Context context) {
        try {
            S3EventNotificationRecord record = s3event.getRecords().get(0);

            String bkt = record.getS3().getBucket().getName();
            String key = record.getS3().getObject().getKey().replace('+', ' ');
            key = URLDecoder.decode(key, "UTF-8");
       } catch (Exception e) {
           // do something
       }
       return null;
    }
}
import com.amazonaws.services.lambda.runtime.Context;
导入com.amazonaws.services.lambda.runtime.RequestHandler;
导入com.amazonaws.services.lambda.runtime.events.S3Event;
公共类Hello实现RequestHandler{
@凌驾
公共Void handleRequest(S3Event S3Event,上下文){
试一试{
S3EventNotificationRecord记录=s3event.getRecords().get(0);
字符串bkt=record.getS3().getBucket().getName();
String key=record.getS3().getObject().getKey().replace('+','');
key=urldecker.decode(key,“UTF-8”);
}捕获(例外e){
//做点什么
}
返回null;
}
}
下面是我在pom.xml中使用的相应依赖项:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.228</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>2.0.1</version>
</dependency>

亚马逊网站

).

尝试以下几种方法:

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;

public class Hello implements RequestHandler<S3Event, Void> {
    @Override
    public Void handleRequest(S3Event s3event, Context context) {
        try {
            S3EventNotificationRecord record = s3event.getRecords().get(0);

            String bkt = record.getS3().getBucket().getName();
            String key = record.getS3().getObject().getKey().replace('+', ' ');
            key = URLDecoder.decode(key, "UTF-8");
       } catch (Exception e) {
           // do something
       }
       return null;
    }
}
import com.amazonaws.services.lambda.runtime.Context;
导入com.amazonaws.services.lambda.runtime.RequestHandler;
导入com.amazonaws.services.lambda.runtime.events.S3Event;
公共类Hello实现RequestHandler{
@凌驾
公共Void handleRequest(S3Event S3Event,上下文){
试一试{
S3EventNotificationRecord记录=s3event.getRecords().get(0);
字符串bkt=record.getS3().getBucket().getName();
String key=record.getS3().getObject().getKey().replace('+','');
key=urldecker.decode(key,“UTF-8”);
}捕获(例外e){
//做点什么
}
返回null;
}
}
下面是我在pom.xml中使用的相应依赖项:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.228</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-core</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-events</artifactId>
    <version>2.0.1</version>
</dependency>

亚马逊网站

).

S3Event类中没有getRecords()方法您使用的S3Event错误。很容易做到,因为有两个。我已将导入添加到代码中。感谢您尽快回复。我无法从lambda包中获取S3事件类。您能告诉我S3Event类在pom.xml中的依赖关系吗?相信这是aws lambda java事件(可能还有aws lambda java core)。文档()是研究此类问题的最佳场所。它还将为您提供全局信息,这是帮助您成功的重要上下文。S3Event类中没有像getRecords()这样的方法—您使用的S3Event是错误的。很容易做到,因为有两个。我已将导入添加到代码中。感谢您尽快回复。我无法从lambda包中获取S3事件类。您能告诉我S3Event类在pom.xml中的依赖关系吗?相信这是aws lambda java事件(可能还有aws lambda java core)。文档()是研究此类问题的最佳场所。它也会给你一个大局,这是帮助你成功的重要背景。