2017-02-19 3 views
4

API 게이트웨이 요청에 의해 트리거 된 람다 함수를 사용하여 파일을 처리하는 프로젝트를 개발 중입니다. 그런 다음 S3 버킷에서 파일을 가져 와서 읽기 시작합니다. 이 점까지, 모든 것이 예상처럼 작동하지만, 파일 읽기 시작 우리는 다음과 같은 오류가 나타나면NoClassDefFoundError 라이브러리가있는 AWS 람다 함수를 실행할 때

파일 우리는 사실 때문에 우리 자신의 사용자 정의 파일 읽기/프로세스 라이브러리 (자바 프로젝트)를 사용
(...) 
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/rt.jar: error reading zip file 
2017-02-06 19:15:06 <9025af71-eca0-11e6-82d2-9ff4b9184005> ERROR JRestlessHandlerContainer:339 - container failure 
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/rt.jar: error reading zip file 
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.101-3.b13.24.amzn1.x86_64/jre/lib/rt.jar: error reading zip file 
END RequestId: (some id) 
REPORT RequestId: (some id) Duration: 3047.44 ms Billed Duration: 3100 ms  Memory Size: 1536 MB Max Memory Used: 94 MB 

Exception in thread "main" java.lang.Error: java.lang.NoClassDefFoundError: java/lang/Throwable$WrappedPrintWriter 
    at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:59) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94) 
Caused by: java.lang.NoClassDefFoundError:  java/lang/Throwable$WrappedPrintWriter 
    at java.lang.Throwable.printStackTrace(Throwable.java:721) 
    at lambdainternal.UserFault.trace(UserFault.java:43) 
    at lambdainternal.UserFault.makeUserFault(UserFault.java:26) 
    at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:290) 
    at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:57) 
    ... 3 more 
START RequestId: (some id) Version: $LATEST 
END RequestId: (some id) 

입니다 또한 우리의 필요에 맞게 사용자 정의하여 Maven을 사용하여 프로젝트에 추가했습니다. 우리의 람다 단지는 메이븐 그늘 플러그인을 사용하여 생성되었습니다

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
       <createDependencyReducedPom>false</createDependencyReducedPom> 
     </configuration> 
     <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
    </plugin> 

로컬 프로젝트를 테스트, 그것을 잘 작동합니다 그리고 우리는 파일 정보를 얻을 수 있습니다. 우리 코드는 JAX-RS와 Spring을 사용하여 API 게이트웨이를 처리합니다 (결과에 방해가 될지 확실하지 않습니다). 그러나 지금까지는 람다를 사용하여 프로젝트를 실행할 때이 문제를 해결할 수 없었습니다. 테스트 중에 기능 제한 시간과 메모리를 의도적으로 늘렸지 만 한계가 무엇이든 관계없이 오류가 지속됩니다.

미리 감사드립니다.

+0

전체 pom.xml 파일을 표시 할 수 있습니까? 당신은 이것을 보았습니까? http://docs.aws.amazon.com/lambda/latest/dg/java-create-jar-pkg-maven-no-ide.html – Zigglzworth

+0

이 "컨테이너 오류"는 실제로 표시 할 수 있습니다. 오류는 AWS 측에서 발생합니다. 이를 지원 팀 또는 AWS 포럼에 가져 가야합니다. –

+0

안녕하세요 @ JeshanBabooa, 그건 우리가 의심하는 것입니다. 우리는 이미 AWS 포럼에도이 문제를 게시했지만 지금까지 답변을 얻지 못했으며 여기에도 게시하기로 결정했습니다. –

답변

0

여전히 문제가 있습니까? 당신이 사용하고있는 특정 지역에서 람다 서비스가 유지되고있을 수 있습니다. 이 오류는 JRE가 손상되었으며 rt.jar에서 제공하는 라이브러리에 액세스 할 수 없음을 나타냅니다. 필요한 경우 지원부에 문의하십시오. AWS 헬스 here을 확인할 수 있습니다.

+0

안녕하세요, 오류가 계속 발생합니다. 우리는 여전히 해결책을 찾고 있습니다. –

+0

투표가 확실하지 않습니다. 우리는 람다 (Lambdas)와 비슷한 문제를 과거에 가지고 있으며 스스로 해결했습니다. 내가 말했듯이, 당신이 서비스 사용과 오류에 대한 대가를 지불하면 지원에 문의하십시오. – Nektie

1

로그 기법을 사용하여 코드를 디버그하고 AWS 지원팀에 문의하면 여기에 설명 된 바와 같이 라이브러리 중 하나가 금지 된 디렉토리 내에 파일을 생성하고있는 것을 볼 수 있습니다. 따라서 람다 함수가 실패했습니다.

파일을 만들려면/tmp 디렉토리를 사용해야하며 문제가 발생할 때까지는이 사실을 알 수 없다고 설명했습니다. 우리는이 문서를 여러 번 읽었지만,이 한 가지가 여전히 우리를 사로 잡았습니다. 어쨌든, 라이브러리에서 이것을 변경 한 후에 함수는 이제 예상대로 완벽하게 실행됩니다.

도움을 주셔서 감사합니다.

+0

FAQ에서 특정 질문을 가르쳐 주시겠습니까? 나는 그것을 감추어서 그것을 발견 할 수 없었다. –

+1

글쎄, 나는 그것을 찾을 수 없었다 (그것은 이상하다. 그러나 나는 그들이 그것을 보았던 마지막 시간 이후로 페이지를 업데이트했다고 믿는다). 어쨌든 도움이 될 수있는 다른 링크를 찾았습니다 : https://docs.aws.amazon.com/lambda/latest/dg/limits.html '/ tmp 디렉토리를 사용할 수 있습니다 ...'와 같은 것을 검색하십시오. –

관련 문제