我們正在開發一個項目,以使用由API網關請求觸發的lambda函數來處理文件。該功能然後將文件存入S3存儲桶並開始讀取。直到這個點,一切正常像預期,但在文件讀取開始我們收到以下錯誤:使用庫運行AWS lambda函數時出現NoClassDefFoundError
(...)
/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)
我們用自己的自定義文件讀/過程庫(Java項目),由於該文件是也根據我們的需求定製,我們使用Maven將其添加到我們的項目中。使用Maven的陰影插件生成我們的拉姆達的jar:
<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網關(我們不確定這是否會干擾結果)。但是,直到現在,當使用lambda運行項目時,我們無法解決這個問題。在我們的測試中,我們特意增加了功能超時和內存,但不管限制如何,錯誤依然存在。
預先感謝您。
你能顯示你的整個pom.xml文件嗎?你有沒有看到這個:http://docs.aws.amazon.com/lambda/latest/dg/java-create-jar-pkg-maven-no-ide.html – Zigglzworth
這裏顯示的這個「容器故障」確實可以表明該錯誤在AWS端。您應該將其發送給他們的支持團隊或AWS論壇。 –
嗨@JeshanBabooa,這也是我們所懷疑的。我們已經在AWS論壇上發佈了這個問題,但直到現在我們還沒有答案,並決定在這裏發佈。 –