AWS Lambda Java,S3配置

时间:2016-07-26 00:05:45

标签: java maven amazon-web-services amazon-s3 aws-lambda

我正在尝试遵循AWS Lambda Java示例:http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-java

创建新类LambdaFunctionHandler以坚持修改lambda代码的S3映像。已将aws-lambda-java-core 1.0.0,aws-lambda-java-events 1.0.0,maven-shade-plugin 2.4.3和aws-java-sdk-core 1.11.0添加到maven依赖项。创建jar,上传并测试lambda后出错。

出现以下错误:

START RequestId: 9b800497-52c2-11e6-a2c2-416f188f3ed0 Version: $LATEST
Error loading class LambdaFunctionHandler: com/amazonaws/services/s3/AmazonS3: class java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/amazonaws/services/s3/AmazonS3
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.s3.AmazonS3
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 2 more

我使用了这些版本号,因为其他答案似乎引用了这些特定版本。

为了确保我不仅仅错误地使用maven,我使用Eclipse的AWS插件创建了一个AWS Lambda项目,但仍然导致了相同的错误。

2 个答案:

答案 0 :(得分:0)

您需要添加de S3依赖

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.0</version>
</dependency>

或者你可以放

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.11.0</version>
</dependency>

这个包含所有服务的库。

答案 1 :(得分:0)

确保您的POM中包含所有依赖项,并且对于AWS lambda,您需要一个包含这些依赖项的胖jar。如果您认为自己拥有类路径中的所有依赖项,那么请查看下面的shade插件是否可以帮助您(使用maven-shade-plugin创建的胖jar):

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <finalName>${project.artifactId}</finalName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>