AWS Lambda Java to S3 - java.lang.ClassNotFoundException на com.amazonaws.services.s3.AmazonS3ClientBuilder

Charles Letcher спросил: 03 февраля 2018 в 11:52 в: java

Я попытался запустить код ниже локально (как проект maven в Intellij), и он работает нормально. Когда вы пытаетесь запустить его как функцию Lambda, я всегда получаю java.lang.NoClassDefFoundError. Как-то, lambda делает так, чтобы класс не мог быть найден, когда вы включаете строку AmazonS3 ниже.

package example;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
public class ParserLambda implements RequestHandler<Object, Object> {
        @Override
        public Object handleRequest(Object input, Context context) {
            String retval = "";
            try {
                AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();
            } catch (Exception ex) {
                return "{'status':'error', 'retval': '" + ex.getMessage() + "'}";
            }
            return "{'status':'done', 'retval': '" + retval + "'}";
        }
}

, если вы закомментируете эту строку // AmazonS3 s3Client = AmazonS3ClientBuilder.standard (). build (); она дает: "{'status': 'done', 'retval': ''}" Это действительный результат .

С uncommentedAmazonS3 s3Client = AmazonS3ClientBuilder.standard (). build (); вы получаете:

{
  "errorMessage": "com/amazonaws/services/s3/AmazonS3ClientBuilder",
  "errorType": "java.lang.NoClassDefFoundError",
  "stackTrace": [
    "example.ParserLambda.handleRequest(ParserLambda.java:11)",
    "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
    "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
    "java.lang.reflect.Method.invoke(Method.java:498)"
  ],
  "cause": {
    "errorMessage": "com.amazonaws.services.s3.AmazonS3ClientBuilder",
    "errorType": "java.lang.ClassNotFoundException",
    "stackTrace": [
      "java.net.URLClassLoader.findClass(URLClassLoader.java:381)",
      "java.lang.ClassLoader.loadClass(ClassLoader.java:424)",
      "java.lang.ClassLoader.loadClass(ClassLoader.java:357)",
      "example.ParserLambda.handleRequest(ParserLambda.java:11)",
      "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
      "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
      "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
      "java.lang.reflect.Method.invoke(Method.java:498)"
    ]
  }
}

Мой файл pom включает в себя:

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

Я также попытался: AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient (); AmazonS3 s3Client = AmazonS3ClientBuilder.standard () .Region (Regions.US_EAST_1) .withForceGlobalBucketAccessEnabled (true) .build ();


0 ответов