2017-02-19 12 views
4

APIゲートウェイリクエストによってトリガされたラムダ関数を使用してファイルを処理するプロジェクトを開発しています。この関数はS3バケット内のファイルを取得し、読み込みを開始します。このポイントまで、すべてが期待されるように動作しますが、ファイルの読み込みを開始するには、我々は次のエラーを受信したとき:NoClassDefFoundErrorライブラリでAWSラムダ関数を実行している場合

ファイルは、我々が原因事実に私たち自身のカスタムファイル読み込み/プロセスライブラリ(Javaプロジェクト)を使用
(...) 
/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を使ってプロジェクトに追加しました。私たちのラムダジャーは、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サポートに連絡すると、ここで説明するように、ライブラリの1つが禁止ディレクトリ内にファイルを作成していたことがわかりました。したがって、ラムダ関数は失敗していました。

ファイルを作成する必要がある場合、/ tmpディレクトリを使用する必要があると説明しましたが、この問題が発生するまでこれを認識しませんでした。私たちは何度もこの文書を読んでいますが、この1つのことがまだ私たちを捉えていました。とにかく、ライブラリ内でこれを変更した後、関数は現在、期待通りに完全に実行されます。

ありがとうございました。

+0

FAQから特定の質問を指摘できますか?私はスキミングでそれを見つけることができませんでした。 –

+1

まあ、私もそれを見つけることができませんでした(それは奇妙ですが、私は彼らが最後に私がそれを見た時からページを更新したと信じています)。とにかく、この他の役に立つリンクが見つかりました:https://docs.aws.amazon.com/lambda/latest/dg/limits。html '/ tmpディレクトリを使用できる...'のようなものを検索する –

関連する問題